• 持续集成与自动化部署---代码流水线管理及Jenkins和gitlab集成


    1、代码流水线管理

    • Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目。如果使用jenkins构建完成后,开发构建项目需要一项一项点击,比较麻烦。所以出现pipeline名词。
    • 代码质量检查完毕之后,我们需要将代码部署到测试环境上去,进行自动化测试。
    新建部署代码项目
    1. 点击新建

    2. 填写构建任务的描述

    3. 新增构建步骤,执行Shell脚本

      • 温馨提示:执行命令主要涉及的是权限问题,我们要搞明白,jenkins是以什么权限来执行命令的。那么问题来了,我们现在192.168.56.11(Jenkins所在机器)上,如果在想192.168.56.12上执行命令。需要怎么做呢?如下

      • 我们做无秘钥有2种分案:

        1. 使用jenkins用户将秘钥分发给192.168.56.12上
        2. 使用root用户将秘钥分发给192.168.56.12上,如果使用root用户还要进行visudo授权。因为Web上默认执行命令的用户是jenkins
      • 1、我们使用root做密码验证

        • 这里我们的key已经做好,如果没做可以直接 ssh-keygen -t ras 来生成秘钥
        • 我们将192.168.56.11上的公钥复制到192.168.56.12上

          [root@linux-node1 ~]# cat .ssh/id_rsa.pub
          ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChVQufrGwqP5dkzIU4ZwXCjRuSvMVGN5lJdvL/QFckmlVphWMsQw06VsPhgcI1NDjGbKOh5pbjrylyJUCig5YIJ1xuMOZ2YAK32SceMxnVhEb/G4wNb9VMsGQ/Vs4CxrU1HdATktH9zDAV4Qz81x2POYJW5B5LAvwZ4owqnIpZ7o3ya6xBxEvCIMSVtD17oKrNqAphsg+e68KvRexiNCEbCbRGGq3bKevgiDsWpSGnCYsJC0+cSrUxuzEO3G6AqGI/qR3nOeg91rOsoAP3FpFjBKgb/sXggkwwjmGIqFXJrUG+XmczeF4kG/rUrNbdy84e5RyHoIS3XKnJuRjTxHyD root@linux-node1
          
          [root@linux-node2 ~]# vim .ssh/authorized_keys
          ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChVQufrGwqP5dkzIU4ZwXCjRuSvMVGN5lJdvL/QFckmlVphWMsQw06VsPhgcI1NDjGbKOh5pbjrylyJUCig5YIJ1xuMOZ2YAK32SceMxnVhEb/G4wNb9VMsGQ/Vs4CxrU1HdATktH9zDAV4Qz81x2POYJW5B5LAvwZ4owqnIpZ7o3ya6xBxEvCIMSVtD17oKrNqAphsg+e68KvRexiNCEbCbRGGq3bKevgiDsWpSGnCYsJC0+cSrUxuzEO3G6AqGI/qR3nOeg91rOsoAP3FpFjBKgb/sXggkwwjmGIqFXJrUG+XmczeF4kG/rUrNbdy84e5RyHoIS3XKnJuRjTxHyD root@linux-node1
          
          [root@linux-node1 ~]# ssh 192.168.56.12
          The authenticity of host '192.168.56.12 (192.168.56.12)' can't be established.
          ECDSA key fingerprint is b5:74:8f:f1:03:2d:cb:7d:01:28:30:12:34:9c:35:8c.
          Are you sure you want to continue connecting (yes/no)? yes
          Warning: Permanently added '192.168.56.12' (ECDSA) to the list of known hosts.
          Last login: Sat Dec 17 02:14:31 2016 from 192.168.56.1
          [root@linux-node2 ~]# ll
          total 4
          -rw-------. 1 root root 1021 Dec 13 05:56 anaconda-ks.cfg 
        
          #现在SSH连接就不需要密码了
          
          授权jenkins用户,使用visudo或者编辑配置文件/etc/sudoers
          [root@linux-node1 ~]# vim /etc/sudoers
           92 jenkins ALL=(ALL)       NOPASSWD:/usr/bin/ssh
          #jenkins授权所有主机,不需要密码执行ssh。切记不要授权ALL
        
      • 我们在192.168.56.12上写一个简单shell脚本,检测是否可以执行成功。正式环境可以写一个自动化部署的脚本


       [root@linux-node2 ~]# echo "echo "hello word"" >demo.sh
       [root@linux-node2 ~]# chmod +x demo.sh
       [root@linux-node2 ~]# ll demo.sh
       -rwxr-xr-x 1 root root 16 Dec 17 02:24 demo.sh 
      
      • jenkins编写执行脚本
    4. 然后我们点击立即构建

    5. 构建成功,如下

    将代码质量管理和测试部署连接起来
    1. 安装jenkins插件parameterized(git钩子)
    2. 安装Jenkins的maven-plugin插件Pipeline Maven Integration Plugin
    3. 选择构建任务demo-deploy进行配置
    4. 在配置中增加构建后操作步骤Trigger parameterized build on other projects
    5. Projects to build是为构建设置一个项目。例如我们想构建完代码项目后执行测试的,这里就填写测试的构建任务。
      • Projects to build:需要构建的项目(job)名,如果有多个项目用,分隔。
      • Trigger when build is:构建触发的条件
        • Stable 成功(稳定)(等价于successful)
        • Unstable 不稳定
        • Stable or unstable but not failed 成功(稳定)或者不稳定,但是没有失败
        • Unstable or Failed but not stable 不稳定或者失败,但是没有成功(稳定)
        • Failed 失败
        • Complete (always trigger) 完成(总是触发)
      • Trigger build without parameters:构建的job不带参数(选择后下面的参数无效)
        • 没有特别的需求,参数可以忽略。
        • Add Parameters:添加参数
          • Boolean parameters 布尔参数(键值对)
          • Build on the same node 在同一个节点上构建
          • Current build parameters 当前构建参数
          • Parameters from properties file 从属性文件获取参数
          • Predefined parameters 预定义参数
          • Restrict matrix execution to a subset 限制矩阵执行的一个子集
          • Subversion revision svn版本
    6. 最后点击保存,点击构建。效果如下:

      • 这样我们每次点击demo-deploy,它就会在构建完成之后再对auto-deploy进行构建
    将构建任务加入Build Pipeline View
    1. 下载pipeline,这样只需要构建一个项目,就会帮我们完成所有相关项目的构建
    2. 安装完成后,我们点击首页的+号,新建一个视图
    3. 点击OK
    4. pipeline 配置

    5. 点击保存后,pipeline视图如下:
    6. 点击Run
      • 这样就可以先对代码质量进行管理,然后就开始部署了
    7. 构建成功后:
    8. 这样我们下次想看pipeline视图的时候,点击上面的demo-pipeline即可

    2、Jenkins + gitlab集成

    Jenkins + gitlab集成后,实现的功能是:开发写好代码提交至gitlab上,即代码开始push到gitlab上之后,jenkins会自动帮我们立即构建。

    1. 安装一个gitlab钩子的插件,如下

    2. 安装完插件之后我们就开始配置钩子脚本

    3. 这里需要我们在服务器里面写一个令牌,在jenkins上也写一个令牌。这两个可以连接到一起就可以了。

      • 因为用到了令牌我们还需要在安装一个插件,否则将无法使用。因为令牌是需要登录之后才会有,所以需要有一个管理的插件,插件搜索:Build Aut,如下
    4. 为了令牌的安全性,我们在Jenkins所在机器上使用openssl生成一个

       [root@linux-node1 ~]# openssl rand -hex 10
       0a37c6d7ba1fe3472e26
      


    5. 然后我们点击保存即可,因为jenkins上也提示我们需要在gitlab上添加钩子脚本,点击我们创建的项目,如下

    6. 选中Webhooks

    7. 使用Build插件后,url如下:

    	http://192.168.56.11:8080/buildByToken/build?job=auto-deploy&token=0a37c6d7ba1fe3472e26
    	# auto-deploy=项目名称(构建时的项目名称)
    	# 0a37c6d7ba1fe3472e26=jenkins填写的令牌
    


    8. 然后点击Add Webhook

    9. 下方就会出现我们这个选项,我们点击Test进行测试

    10. 测试结果

    11. 向git服务器提交代码,验证是否可以自动部署:

    	[root@linux-node1 ~]# echo "Build Token Root Plugin" > index.html
    	[root@linux-node1 ~]# git add index.html [root@saltmaster ~/weather]# git commit -m "text"
    	[root@linux-node1 ~]# git push origin master
    
    1. jenkins服务器的日志记录:

      [root@linux-node1 ~]# tail -f /var/log/jenkins/jenkins.log
      


    13. jenkins项目构建:

    14. 访问web界面验证代码是否最新
    15. jenkins控制台输出信息如下:

  • 相关阅读:
    jenkins+newman+postman实现api自动化
    数据库的关闭方法
    获取2台linux机器的时间差
    性能测试与其分析
    todo:云数据库的元信息
    todo:trove命令使用
    syslog协议及rsyslog服务全解析
    C++Primer学习日记
    excel-填充
    excel-删除
  • 原文地址:https://www.cnblogs.com/jun-zi/p/12145982.html
Copyright © 2020-2023  润新知