Jenkins与Docker的自动化CI/CD实战

发布于:2021-05-15 02:09:36

在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署、交付(CD)。本文基于Jenkins+Docker+Git实现一套CI自动化发布流程。


一、发布流程设计




    开发人员提交代码到Git版本仓库;Jenkins人工/定时触发项目构建;Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;Jenkins在Docker主机创建容器并发布。

环境规划如下:


角色IP
Jenkins/Docker192.168.0.217
Docker192.168.0.218
Git/Registry192.168.0.219

操作系统:CentOS7.4


二、部署Git仓库

# yum install git -y

    创建Git用户并设置密码

    # useradd git
    # passwd git
    创建仓库

    # su - git
    # mkdir solo.git
    # cd solo.git
    # git --bare init
    访问创建的这个仓库

    # git clone git@192.168.0.212:/home/git/solo.git 三、准备Jenkins环境

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于代码编译、部署、测试等工作。 Jenkins也是一个跨*台的,大多数主流的*台都支持,而且安装很简单,我们这里以部署war包方式安装它。

    # tar zxf jdk-8u45-linux-x64.tar.gz
    # mv jdk-8u45-linux-x64 /usr/local/jdk1.8
    # vi /etc/profile
    JAVA_HOME=/usr/local/jdk1.8
    PATH=$PATH:$JAVA_HOME/bin
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export JAVA_HOME PATH CLASSPATH
    # source /etc/profile


在192.168.0.217主机安装Jenkins,下载Tomcat二进制包将war包到webapps下即可:**


# wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
# wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz
# tar zxf apache-tomcat-8.5.32.tar.gz
# mv apache-tomcat-8.5.32 /usr/local/tomcat-jenkins
# rm /usr/local/tomcat-jenkins/webapps/* -rf
# unzip jenkins.war -d /usr/local/tomcat-jenkins/webapps/ROOT
# cd /usr/local/tomcat-jenkins/bin/
# ./startup.sh
# tail ../logs/catalina.out -f
...
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

a5f1f7c167fd4b8ab62f9497d32d97db

This may also be found at: /root/.jenkins/secrets/initialAdminPassword ...

部署成功,访问Jenkins:http://ip:8080


第一步:输入上面日志输出的密码:a5f1f7c167fd4b8ab62f9497d32d97db,或者从本机/root/.jenkins/secrets/initialAdminPassword文件获取,点击继续

安装完成,开始使用Jenkins:

四、部署私有镜像仓库

Docker Hub作为Docker默认官方公共镜像;如果想自己搭建私有镜像仓库,官方也提供registry镜像,使得搭建私有仓库非常简单。

# docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry

接下来测试registry可用性。

# vi /etc/docker/daemon.json
{"insecure-registries":["192.168.0.219:5000"]}
# service docker restart

五、安装Docker

在192.168.0.217/192.168.0.218/192.168.0.219主机安装Docker,如下:


    安装依赖包

    # yum install -y yum-utils device-mapper-persistent-data lvm2添加Docker软件包源:

    # yum-config-manager
    --add-repo
    https://download.docker.com/linux/centos/docker-ce.repo
    安装Docker CE

    # yum install docker-ce -y配置加速器

    # curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://bc437cce.m.daocloud.io启动并开机启动

    # systemctl start docker
    # systemctl enable docker
    六、构建Tomcat基础镜像

    JAVA程序必须有JDK环境才可以运行,为了减少镜像大小及提高性能,这里直接把JDK放到宿主机上,容器以挂载形式使用。

    Tomcat基础镜像Dockerfile:


    # cat Dockerfile
    FROM centos:7
    MAINTAINER www.aliangedu.com

    ENV VERSION=8.5.32
    ENV JAVA_HOME /usr/local/jdk

    RUN yum install wget -y

    RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz &&
    tar zxf apache-tomcat-${VERSION}.tar.gz &&
    mv apache-tomcat-${VERSION} /usr/local/tomcat &&
    rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/* &&
    mkdir /usr/local/tomcat/webapps/ROOT

    EXPOSE 8080
    CMD ["catalina.sh", "run"]

    构建镜像并上传到registry:


    # docker build -t 192.168.0.219:5000/tomcat-85 -f Dockerfile .
    # docker push 192.168.0.219:5000/tomcat-85

    七、Jenkins配置全局工具配置

    主页面 -> 系统管理 -> 全局工具配置


    指定JDK、Maven路径,Git保持默认:

    八、Jenkins安装必要插件

    1. Jenkins安装必要插件

    插件说明:


    SSH:用于SSH远程Docker主机执行Shell命令Git Parameter:动态获取Git仓库Branch、Tag

    2. 配置SSH插件

    九、上传JAVA项目代码到Git仓库

    从Github拉取开源JAVA博客系统solo:


    # git clone https://github.com/b3log/solo
    # cd solo
    移除旧的推送地址,添加新的:
    # git remote remove origin
    # git remote add origin git@192.168.0.219:/home/git/solo.git
    提交代码到Git仓库并创建tag:
    # touch src/main/webapp/a.html
    # git add .
    # git commit -m “a”
    创建标签:
    # git tag 1.0.0
    推送到Git服务器:
    # git push origin 1.0.0

    十、Jenkins创建项目并发布测试

    主页面 -> 新建任务 -> 输入任务名称,构建一个Maven项目:

    设置maven构建命令选项:

    利用pom.xml文件构建项目。

    REPOSITORY=192.168.0.219:5000/solo:${Tag}
    # 构建镜像
    cat > Dockerfile << EOF
    FROM 192.168.0.219:5000/tomcat-85:latest
    RUN rm -rf /usr/local/tomcat/webapps/ROOT
    COPY target/*.war /usr/local/tomcat/webapps/ROOT.war
    CMD ["catalina.sh", "run"]
    EOF
    docker build -t $REPOSITORY .
    # 上传镜像
    docker push $REPOSITORY

    上图中,SSH远程Docker主机执行的Shell命令如下:


    REPOSITORY=192.168.0.219:5000/solo:${Tag}
    # 部署
    docker rm -f blog-solo |true
    docker image rm $REPOSITORY |true
    docker container run -d --name blog-solo -v /usr/local/jdk1.8:/usr/local/jdk -p 88:8080 $REPOSITORY

    注:容器名称blog-solo,暴露宿主机端口88,即使用宿主机IP:88访问blog-solo项目。

    选择tag,开始构建:




    浏览器访问solo项目:http://192.168.0.218:88

    至此,自动化CI环境搭建完成,你可以模拟提交代码并打tag测试自动化发布流程。


    少侠,请留步!


    有个消息告诉你,大家知道Docker/Kubernetes是当下非常主流的容器技术,已成为运维工程师、架构师必备技能,但Kubernetes相比Docker学*成本高很多,因为Kubernetes具备丰富的功能,相对比较复杂,并且网上资源写的不成系统,大多数缺章少节的,很难按照教程跑通。因此,我决定写Docker和Kubernetes技术文章专栏,目的是让学*Kubernetes的朋友少走些弯路,在企业落地容器云*台提供一些企业实践性指导,希望自己所学所思的东西能够帮助到大家,能够有所启发。




    若你在容器运维中,遇到Kubernetes方面的问题,请给我留言。同样,若发现有任何纰漏,还请随时指正,相互学*,共同进步!


    记得点进去看看哦。感谢支持!


    本文视频版:http://edu.51cto.com/course/14462.html?qd=lzl



    **Docker技术交流群([719105297](http://shang.qq.com/wpa/qunwpa?![]








    相关资源:Docker+JenkinsPipeline+GitlabCI_CD

相关推荐

最新更新

猜你喜欢