zoukankan      html  css  js  c++  java
  • 持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成]

    一、代码流水线管理

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

    新建部署代码项目 
    点击新建 
    image_1b4l7mhmml3216gaifh1lfemo99.png-50.2kB 
    image_1b4l7mnvr1h6aj5v1c541ksk1m4tm.png-110.5kB 
    这里只需要写一下描述 
    image_1b4l7osk51pd713ba1vlptmj1lu13.png-55.3kB 
    执行Shell脚本 
    image_1b4l7p42mlgd161ia981i8e12e31g.png-27.3kB

    温馨提示:执行命令主要涉及的是权限问题,我们要搞明白,jenkins是以什么权限来执行命令的。那么问题来了,我们现在192.168.56.11上,如果在想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
    • 1
    • 2
    • 3
    • 4
    • 1
    • 2
    • 3
    • 4

    jenkins编写执行脚本 
    image_1b4l7so1c1j5kustgu71as31nas1t.png-22.5kB 
    然后我们点击立即构建 
    image_1b4l7svdq1eq21q0r15sc19g2k7r2a.png-56.1kB 
    成功! 
    image_1b4l7tbqilp2ejt1bgs1jkcvjr2n.png-50.4kB 
    现在我们要将代码质量管理和测试部署连接起来。

    这时候就用到了Git钩子 
    我们需要安装jenkins插件parameterized 
    image_1b4l7u8lcmsc1ifl9738oqeqi34.png-67.9kB

    我们选择demo-deploy 
    image_1b4l811k3ukgb0u148a6jf1ncp3h.png-83.9kB

    再次点击项目设置的时候就会出现Trigger parameterized build on other projects 
    image_1b4l81f97buo1k6j1g2016r0vki3u.png-55.1kB 
    提示:Projects to build是为构建设置一个项目。例如我们想构建完代码项目后执行测试的,这里就填写测试的就可以。

    image_1b4l81t5rj02npr8i397t7134b.png-33.5kB

    最后点击保存,点击构建。我们查看效果 
    image_1b4l825oktjevtg7hl16v7bsh4o.png-27.2kB 
    image_1b4l82e34g9mih2vnqhhv130155.png-38.3kB 
    #这样我们每次点击demo-deploy 它就会在构建完成之后在对auto-deploy进行构建

    下载pipeline。这样只需要构建一个项目,就会帮我们完成所有相关项目 
    搜索插件pipeline 
    image_1b4l83oko147g84cr07193465f5i.png-123.2kB 
    等待安装完成 
    image_1b4l83vbo15c11s541bg61splt8k5v.png-27.5kB 
    我们点击首页+号,新建一个试图 
    image_1b4l8480bgv01fe7jks18ptbi46c.png-56.4kB 
    点击OK 
    image_1b4l84fdolbrupe1ntl1gn9be6p.png-53kB 
    pipeline 配置 
    image_1b4l84omnfkn19s61tpph81tmv76.png-44.4kB 
    image_1b4l84tqkvkh27k1ct91cc1q97j.png-40kB 
    然后我们点击保存

    pipeline视图如下: 
    image_1b4l85coe19ut1varctmgf81jv980.png-122.2kB 
    点击Run 
    image_1b4l85l771i5fl529q0t69bpa8d.png-37kB 
    这样就先代码质量进行管理,然后就开始部署了

    构建成功后: 
    image_1b4l85th6lhh13iufk8dcruud8q.png-34.8kB 
    这样我们下次想看pipeline视图的时候,点击上面的demo-pipeline即可 
    image_1b4l866d2nqf179714b85fc6r997.png-56.5kB

    二、Jenkins + gitlab集成

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

    这个项目我们需要安装一个gitlab钩子的脚本

    提示: jenkins不论想实现什么功能,都需要安装插件!!

    image_1b4l87o0q58d1bng5qohvg1lfp9k.png-51.4kB 
    安装完插件之后我们就开始配置钩子脚本 
    image_1b4l87uqq1pcqi6p1oj94p8qbpa1.png-64.4kB 
    这里需要我们在服务器里面写一个令牌,在jenkins上也写一个令牌。这两个可以连接到一起就可以。

    #因为用到了令牌我们还需要在安装一个插件,否则将无法使用。因为令牌是需要登录之后才会有,所以需要有一个管理的插件

    插件搜索:Build Aut 
    image_1b4l88co647j1lkv1vb81l1819alae.png-29.4kB 
    为了令牌的安全性,我们使用openssl生成一个

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

    image_1b4l88sjs1i0s1h751df01omoa7ar.png-68kB 
    然后我们点击保存即可

    因为jenkins上也提示我们需要在gitlab上添加钩子脚本

    点击我们创建的项目 
    image_1b4l895jsiiiq0n62j125r1q8ab8.png-29.9kB 
    选中Webhooks 
    image_1b4l89cdp18ohdbbomnk8kqe9bl.png-56.7kB

    Build Authorization Token Root Plugin 插件使用说明 
    https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin

    使用Build插件后,url如下:

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

    image_1b4l8a3s41cc51ukp1uo11auc994c2.png-34.1kB 
    然后点击Add Webhook 
    image_1b4l8adqahga1q4e6lmvhf6cacf.png-12.8kB 
    下方就会出现我们这个选项,我们点击Test进行测试 
    image_1b4l8anrgv57h1g13nb1fdr5gpcs.png-16.2kB 
    测试结果 
    image_1b4l8b26012nekodouf14ub7lfd9.png-11.6kB

    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
    • 2
    • 3
    • 1
    • 2
    • 3

    jenkins服务器的日志记录:

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

    image_1b4l8bjik1aosoio1hqg1pes8qtdm.png-35.4kB

    jenkins项目构建: 
    image_1b4l8cejv6rr191a3crpu4cfme3.png-17.2kB

    访问web界面验证代码是否最新的: 
    jenkins控制台输出信息: 
    image_1b4l8cr6c1f0cqobd3m1r16c9geg.png-29.2kB

     转载:http://blog.csdn.net/abcdocker/article/details/53840629
     
  • 相关阅读:
    MySql使用游标Cursor循环(While)更新数据
    初试TinyIoCContainer笔记
    用Razor做静态页面生成器
    在CentOS6.5上安装MariaDB
    mono的远程调试
    mono3.2.3+Jexus5.5+openSuSE13.1的asp.net
    mono3.2和monodevelop4.0在ubuntu12.04上两天的苦战
    第一节知识点:.net与c#的概念
    支付宝支付功能(使用支付宝sdk)
    vs2017/vs2019 去掉 单击aspx文件预览页面
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/6529557.html
Copyright © 2011-2022 走看看