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

  持续集成(CI)表示由开发对项目代码进行确认修改并推送到git,svn,ftp等应用的持续更新发版操作。

  持续部署(CD)表示根据jenkins在应用中拉取的代码可以对目标服务器进行持续部署到任何环境下。

  将代码更新后,提交到指定的存储库中,如git,svn以及ftp等应用中,再由运维通过jenkins拉取存储在应用中的项目代码,打包成war包的形式部署到对应的测试环境以及生产环境中。docker的参与就在于,通过执行shell语句拉取远程镜像仓库的镜像,以及git,svn,ftp中的项目代码,在本地docker环境下,通过Dockerfile的形式再改远程镜像中构建出一套存在项目代码的新的基础镜像,并将镜像上传到远程registry中,再通过jenkins中ssh协议对想要部署的docker主机进行镜像拉取,容器创建等远程部署操作,这样服务就能正常运行了。

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

工作流程:

  1. 开发人员提交代码到Git版本仓库;

  2. Jenkins人工/定时触发项目构建;

  3. Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;

  4. Jenkins在Docker主机创建容器并发布。

环境规划如下:

  node-1:192.168.175.128 jenkins/docker

  node-2:192.168.175.130 docker/部署主机

  node-3:192.168.175.131 git/registry 仓库


1.部署Git仓库

主机node-3


  1.安装git

    #yum install -y git


  2.创建git用户、

    #useradd git

    #passwd git


  3.以git用户的身份在其家目录下创建git仓库

    #su - git

   ~]mkdir solo.git  //该仓库绝对路径为/home/git/solo.git

  

  4.尝试拉取远程git仓库中的代码

    #git clone git@192.168.175.131:/home/git/solo.git


2.部署私人registry

主机 node-3


  1.安装docker

  # yum install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm  -y
  # yum install https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm  -y

 

  2.启动docker

  # systemctl start docker && systemctl enable docker


  3.创建registry,并在后台运行

  # docker pull registry

  # docker run -itd --name registry -p 5000:5000 --restart=always registry

 

3.部署jenkins

  1.安装jdk,maven

    # tar -xf  jdk-8u181-linux-x64.tar.gz -C /usr/local

    # mv /usr/local/jdk-8u181-linux-x64 /usr/local/jdk1.8

    # tar -xf apache-maven-3.5.0-bin.tar.gz -C /usr/local

    # mv /usr/local/apache-maven-3.5.0-bin /usr/local/maven

    # cat > /etc/profile.d/java.sh << EOF

       export JAVA_HOME=/usr/local/jdk1.8
       export MAVEN_HOME=/usr/local/maven
       export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH

       EOF

    # source /etc/profile.d/java.sh


  2.安装tomcat环境(源码安装)

    # tar -xf apache-tomcat-8.5.33.tar.gz -C /usr/local

    # mv /usr/local/apache-tomcat-8.5.33 /usr/local/tomcat

 

  3.导入jenkins的war包

  https://jenkins.io/download/  

  如图点击下载最后一个Generic Java package(war):
Jenkins与Docker的自动化CI/CD实战


     # rm -rf /usr/local/tomcat/webapps/ROOT/*

     # unzip jenkins -d /usr/local/tomcat/webapps/ROOT/

     # cd /usr/local/tomcat/bin

     # ./startup //启动tomcat

   

    安装的jenkins默认家目录在/root/.jenkins


    浏览器访问:http://192.168.175.128:8080

    输入密码,进行初始化


    选择右边的选择安装引擎

    图片描述 

图片.png

    为了保证jenkins主机能够在docker主机远程执行shell脚本,能够对git仓库进行代码拉取

    让jenkins主机能够无密登录130,以及131两台机器

    192.168.175.128下执行

    # ssh-keygen -t rsa

    # ssh-copy-id -i /root/.ssh/id_rsa.pud root@192.168.175.130

    # ssh-copy-id -i /root/.ssh/id_rsa.pud git@192.168.175.131


4.导入代码到git仓库

    # 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


5.创建Tomcat基础镜像并导入registry

    1.tomcat Dockerfile

    [root@node-3 ~]# cat docker/tomcat/Dockerfile2
    FROM centos:7
    MAINTAINER   wjq

    RUN yum install unzip iproute -y

    ENV JAVA_HOME /usr/local/jdk

    ADD apache-tomcat-8.0.46.tar.gz /usr/local
    RUN mv /usr/local/apache-tomcat-8.0.46 /usr/local/tomcat

    WORKDIR /usr/local/tomcat
    EXPOSE 8080
    ENTRYPOINT ["./bin/catalina.sh", "run"]


    2.创建镜像

    # docker build -t 192.168.175.128:5000/tomcat-9 -f Dockerfile2 .

  

    3.上传到私有镜像仓库

    # docker push 192.168.175.128:5000/tomcat-9


6.jenkins配置定义

    1.系统管理 --> 凭据

     配置远程docker主机的身份,让jenkins能够在该docker主机上进行镜像拉取,容器构建操作,可以使用密钥,密码的方式

     图片.png


   

    2.系统管理 --> 系统设置 配置远程主机信息,主机IP,使用的凭据,访问端口

  图片.png



   


    3.系统管理 --> 全局工具设置 设置jdk,maven,git的全局配置,如路径,名称

    图片.png


    图片.png


    4.系统管理 --> 管理插件 安装插件SSH,Git Parameter,Maven Integration plugin

   

    5.创建Maven项目,进行配置

   图片.png

 

  设置在git仓库拉取代码,需要设置无密连接

   图片.png

  图片.png

 

  在本地jenkins执行shell命令,并在远程docker操作主机将封装好的镜像拉渠道docker主机,删除之前部署过的镜像和容器,并启动封装了最新代码的镜像容器

  图片.png


  进行部署

  1.保存配置

  2.Build with Parameters:根据Tag选择版本号

  图片.png

  3.进入控制台查看输出

  图片.png


    4.访问博客

    图片.png