持續集成與自動化部署---代碼流水線管理及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控制台輸出信息如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM