zoukankan      html  css  js  c++  java
  • 04: CI(持续集成)/CD(持续交付/持续部署)

    1.1 持续集成、持续交付 介绍

        参考博客:https://www.cnblogs.com/cay83/p/8856231.html

      1、传统交付

          1. 传统软件的开发与交付的周期都很漫长,从需求的分析、系统的设计、编写测试用例、系统开发、单元测试、组装测试到交付调试。

          2. 每一次交付、升级,都需要提供基础的硬件、软件的环境、软件的代码、软件的文档与手册。

          3. 工程师都按照之前预演过好多遍的流程,对照着系统的部署手册,一步一步的组装硬件,安装软件,稍有差池,就要按照对应的应急预案进行回滚。

                

      2、技术工程师日常 与 痛点

          1)立项,建代码库,申请资源,拉分支写代码,联调测试,发布到线上,设置监控点,质效分析和总结等等

          2)这些活动存在于不同的平台,每天在不停的重复,需要不停的和各个团队沟通,不停的做研发平台和技术栈的切换

          3)所以我们又回到持续交付的一个原则,如果有一件事让你感觉到痛苦,那么就尽早实现自动化。

          4)梳理出规范化的玩法,采用自动化的高效手段,用技术去解决这些让我们感觉头疼的问题。

          

      3、CI 持续集成 与 CD持续交付

           持续集成(Continuous Integration,CI): 代码合并、构建、部署、测试都在一起,不断地执行这个过程,并对结果反馈(主要产出是一个镜像)

           持续部署(Continuous Deployment,CD)加将产品部署到 测试环境、预生产环境、生产环境

           持续交付(Continuous Delivery,CD): 将最终产品发布到生产环境,给用户使用

          

      4、产品线发布流程

          

      5、国内一些公司开发的轮子

          阿里云效/codepipeline:https://www.aliyun.com/product/codepipeline

          百度效率云:https://xiaolvyun.baidu.com/

          普元devops平台:http://www.primeton.com/products/devops/

      6、构建持续集成环境介绍

          

          

    1.2 构建持续集成环境(搭建Harbor私有镜像仓库+git服务:192.168.56.14)

      1、安装Docker(192.168.56.14)

    # 1)安装依赖包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 2)添加Docker软件包源(否则doker安装的不是新版本)
    yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo
    
    # 3)安装Docker CE
    yum install -y docker-ce
    
    # 4)启动Docker服务并设置开机启动
    systemctl start docker
    systemctl enable docker
    
    # 5)安装docker compose
    curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    docker-compose --version  # 测试docker-compose是否安装好

      2、安装Harbor(192.168.56.14)

          1. 配置Harbor Https认证等,内容较多请参考, https://www.cnblogs.com/xiaonq/p/10285808.html 

          2. 必须保证Jenkins机器和Docker机器能通过命令 docker login linux-node4.example.com 登录私有镜像仓库Harbor

    '''安装Harbor镜像仓库'''
    # 1、下载离线安装包
    https://github.com/goharbor/harbor/releases
    
    # 2、解压并配置访问地址'''
    cd /home/work
    tar zxvf harbor-offline-installer-v1.8.1.tgz
    cd /home/work/harbor
    vi harbor.yml
    '''
    hostname = 192.168.56.14
    harbor_admin_password = 123456
    '''
    
    # 3、准备配置
    ./prepare
    
    # 4、导入镜像并启动
    ./install.sh
    
    # 5、查看容器状态
    docker-compose ps
    
    安装完成后可以登录Harbor:http://192.168.56.14

      3、Git代码版本仓库 

    '''在192.168.56.14安装git仓库 '''
    # 1、安装Git
    yum -y install git
    # 2、创建Git用户并设置密码
    useradd git
    passwd git
    # 3、创建仓库(下面三步git仓库已经创建完成)
    su - git         # 切换到git用户
    mkdir solo.git   # 在git用户家目录创建镜像仓库文件夹 demo.git
    cd solo.git
    git --bare init  # 初始化镜像仓库
    
    
    '''在192.168.56.13中模拟拉取git代码进行测试 '''
    # 4、模拟拉取并提交代码
    yum -y install git
    git clone git@192.168.56.14:/home/git/solo.git
    touch test.py  # 创建一个文件模拟代码提交
    git add .
    git commit -m 'test'
    git push origin master
    
    # 5、配置客户端与Git服务器SSH免交互认证
    ssh-keygen  # 生成秘钥
    ssh-copy-id git@192.168.56.14  # 将私钥拷贝到git服务器
    ssh git@192.168.56.14  # 在192.168.56.13测试免密登录192.168.56.14

    1.3 构建持续集成环境(部署docker以便部署部署项目:192.168.56.13)

       1、安装docker

    # 1)安装依赖包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 2)添加Docker软件包源(否则doker安装的不是新版本)
    yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo
    
    # 3)安装Docker CE
    yum install -y docker-ce
    
    # 4)启动Docker服务并设置开机启动
    systemctl start docker
    systemctl enable docker

    # 5)配置镜像加速器:https://www.daocloud.io/mirror
    [root@linux-node2 ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io       
    [root@linux-node2 ~]# cat /etc/docker/daemon.json # 执行上面命令后就会将镜像源修改成国内的地址
    {"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
    [root@linux-node2 ~]# systemctl restart docker # 重启docker生效

      2、复制Harbor证书登录Harbor服务器

    mkdir -p /etc/docker/certs.d/linux-node4.example.com/
    scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/
    scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/
    scp -r root@192.168.56.14:/home/work/harbor/ssl/ca.crt /etc/docker/certs.d/linux-node4.example.com/
    
    vi /usr/lib/systemd/system/docker.service  # 添加--insecure-registry 192.168.56.14
    '''
    ExecStart=/usr/bin/dockerd --insecure-registry 192.168.56.14
    '''
    
     systemctl restart docker.service  # 重启docker

    # 可以在linux-node3.example.com机器上测试docker登录
    docker login linux-node4.example.com

      3、配置java JDK环境

    [root@linux-node3 ~]# cd /usr/local/  # 将jdk-8u45-linux-x64.tar.gz包上传到当前文件夹中
    [root@linux-node3 local]# tar -xvf jdk-8u45-linux-x64.tar.gz
    [root@linux-node3 local]# vim /etc/profile
    export JAVA_HOME=/usr/local/jdk1.8.0_45
    export CLASSPATH=$JAVA_HOME/lib/
    export PATH=$PATH:$JAVA_HOME/bin
    export PATH JAVA_HOME CLASSPATH
    [root@linux-node3 local]# source /etc/profile
    [root@linux-node3 local]# java -version

    1.4 构建持续集成环境(安装Jenkins服务:192.168.56.12)

      1、安装docker

    # 1)安装依赖包
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # 2)添加Docker软件包源(否则doker安装的不是新版本)
    yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo
    
    # 3)安装Docker CE
    yum install -y docker-ce
    
    # 4)启动Docker服务并设置开机启动
    systemctl start docker
    systemctl enable docker
    
    # 5)配置镜像加速器:https://www.daocloud.io/mirror
    [root@linux-node2 ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io       
    [root@linux-node2 ~]# cat /etc/docker/daemon.json # 执行上面命令后就会将镜像源修改成国内的地址
    {"registry-mirrors": ["http://f1361db2.m.daocloud.io"]}
    [root@linux-node2 ~]# systemctl restart docker # 重启docker生效

      2、复制Harbor证书登录Harbor服务器

    mkdir -p /etc/docker/certs.d/linux-node4.example.com/
    scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/
    scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/
    scp -r root@192.168.56.14:/home/work/harbor/ssl/ca.crt /etc/docker/certs.d/linux-node4.example.com/
    
    vi /usr/lib/systemd/system/docker.service  # 添加--insecure-registry 192.168.56.14
    '''
    ExecStart=/usr/bin/dockerd --insecure-registry 192.168.56.14
    '''
    
     systemctl restart docker.service  # 重启docker
    # 可以在linux-node2.example.com机器上测试docker登录
    docker login linux-node4.example.com

      3、上传配置Java JDK环境

    [root@linux-node3 ~]# cd /usr/local/  # 将jdk-8u45-linux-x64.tar.gz包上传到当前文件夹中
    [root@linux-node3 local]# tar -xvf jdk-8u45-linux-x64.tar.gz
    [root@linux-node3 local]# vim /etc/profile
    export JAVA_HOME=/usr/local/jdk1.8.0_45
    export CLASSPATH=$JAVA_HOME/lib/
    export PATH=$PATH:$JAVA_HOME/bin
    export PATH JAVA_HOME CLASSPATH
    [root@linux-node3 local]# source /etc/profile
    [root@linux-node3 local]# java -version

      4、上传配置maven

    [root@linux-node2 work]# tar -xvf apache-maven-3.5.0-bin.tar.gz -C /usr/local/    # 先上传apache-maven-3.5.0-bin.tar.gz

      5、拉取java的博客系统测试

    [root@linux-node2 ~]# yum –y install git
    [root@linux-node2 ~]# cd /root/test/
    [root@linux-node2 ~]# git clone https://github.com/b3log/solo.git
    [root@linux-node2 test]# cd solo/
    [root@linux-node2 solo]# git remote rm origin 
    [root@linux-node2 solo]# git remote add origin git@192.168.56.14:/home/git/solo.git
    [root@linux-node2 solo]# git add .
    [root@linux-node2 solo]# git commit -m 'all'
    [root@linux-node2 solo]# git push origin master
    # 配置客户端与Git服务器SSH免交互认证
    [root@linux-node2 solo]# ssh-keygen  # 生成秘钥
    [root@linux-node2 solo]# ssh-copy-id git@192.168.56.14  # 将私钥拷贝到git服务器
    [root@linux-node2 solo]# ssh git@192.168.56.14  # 在192.168.56.13测试免密登录192.168.56.14

      6、构建一个Tomcat基础镜像,并推送到Harbor中

    [root@linux-node2 solo]# mkdir -p /root/solo/
    [root@linux-node2 solo]# vi /root/solo/Dockerfile
    '''
    FROM centos:7
    MAINTAINER www.example.com
    RUN yum install unzip iproute -y
    ENV JAVA_HOME /usr/local/jdk  # 使用宿主机的java 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"]
    '''
    
    ## 注:一定要把apache-tomcat-8.0.46.tar.gz上传到/root/solo/目录下
    [root@linux-node2 solo]# docker build -t linux-node4.example.com/test/tomcat:v1 .   # 构建一个tomcat镜像
    # linux-node4.example.com  # Harbor镜像仓库名称
    # test  # 在Harbor页面中创建的项目(一定记得到Harbor管理页面创建test项目)
    # tomcat:v1  # 我们打的镜像名称
    
    [root@linux-node2 jenkins]# docker images   # 查看到刚刚构建的linux-node4.example.com/test/tomcat 镜像
    [root@linux-node2 solo]# docker push linux-node4.example.com/test/tomcat:v1  # 将镜像推送到Harbor中

      7、安装Jenkins(使用官方提供的Jenkins二次构建)

    [root@linux-node2 ~]# mkdir –p /home/work/jenkins
    [root@linux-node2 ~]# cd /home/work/jenkins
    [root@linux-node2 jenkins]# vim Dockerfile  # 使用官方Jenkins镜像构建我们的镜像
    '''
    FROM jenkins
    USER root
    RUN apt-get update && apt-get install -y git libltdl-dev 
    '''
    
    [root@linux-node2 jenkins]# docker build -t jenkins:v1 .  # 构建Jenkins镜像
    [root@linux-node2 jenkins]# docker images  # 可以看到我们的镜像了
    [root@linux-node2 jenkins]# docker rm -f $(docker ps -q -a)   # 删除我们刚刚创建的测试镜像
    [root@linux-node2 jenkins]# 
    #### 使用下面命令创建Jenkins容器(使用上面构建的jenkins:v1镜像)
    # -v命令进行挂载,其中冒号前面的是本机的目录
    # 将本机的javahome和mavenhome的路径,挂载到Jenkins容器上,冒号后面是容器上的目录,可以写跟本机目录相同
    '''
    docker run -d 
    --name jenkins 
    -p 8080:8080 
    -v /var/jenkins_home/:/var/jenkins_home 
    -v /usr/local/apache-maven-3.5.0:/usr/local/maven 
    -v /usr/local/jdk1.8.0_45:/usr/local/jdk 
    -v /var/run/docker.sock:/var/run/docker.sock 
    -v $(which docker):/usr/bin/docker 
    -v ~/.ssh:/root/.ssh 
    jenkins:v1
    '''
    
    [root@linux-node2 work]# cat /var/jenkins_home/secrets/initialAdminPassword  # 查看Jenkins密码,要放到页面中验证
    3628631b13f04919ac864a597c336ce1

    1.5 构建持续集成环境(在页面中完成Jenkins安装:192.168.56.12)

        访问Jenkinshttp://192.168.56.12:8080

       1、输入Jenkins初始密码

           

      2、选择安装插件

          安装报错常见解决方案:https://www.cnblogs.com/sxdcgaq8080/p/10489326.html

          

      3、配置Jenkins admin用户信息

          

    1.6 构建持续集成环境(配置Jenkins:192.168.56.12)

      1、配置配置git、jdk、maven

          Manage Jenkins  ----》Global Tool Configure----》Global Tool Configuration

          [root@linux-node2 local]#   sudo chown -R 1000 /var/jenkins_home        #注意挂载目录授权

          [root@linux-node2 local]#   docker restart d57a     # 重启Jenkins所在的docker容器

        1)配置java JDK

             

        2)配置git

            

        3)配置maven

            

      2、系统配置

          # 配置192.168.56.13中用户密码ssh登录,好让Jenkins一会run你的镜像

        1)配置ssh凭证

            凭证---》global---》添加凭证

            

        2)配置使用上面凭证ssh 192.168.56.13的docker主机

            Manage Jenkins ----》Global Tool Configure ----》Configuration System

            注:如果没有 SSH remote hosts,记得主动安装插件,插件名(SSH)

            

     1.7 使用Jenkins创建一个新的项目,将java项目从Jenkins(192.168.56.12)自动部署到docker(192.168.56.13)机器中

      1、创建一个新任务

          create new jobs   # 如果没有“构建一个maven项目”选项,自己安装插件:Maven Integration
          

      2、配置Jenkins使用git拉取代码的路径

           git@192.168.56.14:/home/git/solo.git   是我们自己搭建的git仓库地址

           

      3、简单测试一下触发器配置

           注:每隔一分钟拉取一次git仓库中的代码

           

      4、指定maven构建选项

          

      5、测试构建

          

          

          # 构建完成后Jenkins工作目录即可看到构建生成的 solo.war包,这个solo.war包放到Tomcat中就可以启动了

          [root@linux-node2 target]# ll /var/jenkins_home/workspace/solo_blog/target/solo.war

       6、配置构建成功后的动作(将项目打包推送到镜像中)

          刚刚已经看到构建没问题,此时可以配置构建成功后的动作

        1)再次配置

             

        2)构建项目镜像,并推送到Harbor中

            1. 使用上面生成,推送到Harbor的 tomcat:v1镜像生成项目镜像 solo:v1

            2. 将solo:v1推送到Harbor中

             

    cd $WORKSPACE
    cat > Dockerfile << EOF
    FROM linux-node4.example.com/test/tomcat:v1
    MAINTAINER WWW.example.com
    
    COPY target/solo.war /tmp/ROOT.war
    RUN rm -rf /usr/local/tomcat/webapps/* && 
        unzip /tmp/ROOT.war -d /usr/local/tomcat/webapps/ROOT && 
        rm -f /tmp/ROOT.war
        
    ENTRYPOINT ["./bin/catalina.sh", "run"]
    EOF
    
    docker build -t linux-node4.example.com/test/solo:v1 .
    docker login -u admin -p 123456 linux-node4.example.com
    docker push linux-node4.example.com/test/solo:v1

      7、配置完构建成功后动作后,重新构建,保证输出台是(success)

           注: 使用Jenkins远程,让docker主机(192.168.56.13)拉取上步构建的solo:v1项目镜像启动docker容器

          

    docker rmi -f solo:v1 | true
    docker rm -f solo | true
    docker login -u admin -p 123456 linux-node4.example.com
    docker run -dit --name solo -p 8888:8080 -v /usr/local/jdk1.8.0_45/:/usr/local/jdk linux-node4.example.com/test/solo:v1

    1111111111111111

  • 相关阅读:
    CTF SQL注入知识点
    Rot13加密算法
    LFU缓存
    Redability
    快排
    更新卡片的zIndex
    webshell文件下载器
    [转]背包九讲
    hihocoder第196周
    Python import容易犯的一个错误
  • 原文地址:https://www.cnblogs.com/xiaonq/p/11371395.html
Copyright © 2011-2022 走看看