持續集成工具之Jenkins pipline簡單示例


  前文我們主要聊了下jenkins的插件安裝、用戶及權限管理、郵件發送、配置憑證到gitlab上拉取項目和創建普通job;回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13810648.html;今天我們來了解下jenkins的一個核心功能pipline以及jenkins的分布式slave節點的部署;

  pipline介紹

  pipline 是幫助 Jenkins 實現 CI 到 CD 轉變的重要角色,是運行在 jenkins 2.X 版本的核心插件,簡單來說 Pipline 就是一套運行於 Jenkins 上的工作流框架,將原本獨立運行於單個或者多個節點的任務連接起來,實現單個任務難以完成的復雜發布流程,從而實現單個任務很難實現的復雜流程編排和任務可視化,Pipeline 的實現方式是一套 Groovy DSL,任何發布流程都可以表述為一段 Groovy 腳本。

  pipline優勢

  可持續性:jenkins 的重啟或者中斷后不影響已經執行的 Pipline Job;

  支持暫停:pipline 可以選擇停止並等待人工輸入或批准后再繼續執行。

  可擴展:通過 groovy 的編程更容易的擴展插件。

  並行執行:通過 groovy 腳本可以實現 step,stage 間的並行執行,和更復雜的相互依賴關系。

  pipline語法

  Stage:階段,一個 pipline 可以划分為若干個 stage,每個 stage 都是一個操作,比如 clone 代碼、代碼編譯、代碼測試和代碼部署,階段是一個邏輯分組,可以跨多個 node 執行。

  Node:節點,每個 node 都是一個 jenkins 節點,可以是 jenkins master 也可以是 jenkins agent,node 是執行 step 的具體服務器。

  Step:步驟,step 是 jenkins pipline 最基本的操作單元,從在服務器創建目錄到構建容器鏡像,由各類Jenkins 插件提供實現,例如: sh “make”;

  示例

node {
stage("clone 代碼"){
echo "代碼 clone"
}
stage("代碼構建"){
echo "代碼構建"
}
stage("代碼測試"){
echo "代碼測試"
}
stage("代碼部署"){
echo "代碼部署"
}
}

  提示:上面是pipline腳本示例,node用於指定節點,stage用於指定階段名稱;而下面的echo就是在每個階段需要做的事;基本語法就是這樣;從上面的示例不難反應一個job的工作流程;我們寫pipline 構建pipline job就是根據項目構建流程來把要做的事用上述語法的形式表示出來,然后jenkins就可以根據我們定義的pipline任務,依次去各節點執行定義在自身的階段任務;

  創建pipline job

  提示:新建任務要首先給任務寫一個名稱,然后選擇流水線,點確定;

  提示:我們在general寫上任務描述,然后就可以直接到流水線把我們上面的pipline 示例貼在此處;

  提示:選擇立即構建;

  提示:最后執行成功就會顯示淺綠色的方格,每個方格代表一個階段;我們可以點擊方格查看對應階段執行的操作日志;如下

  當然我們也可以查看整個構建過程的日志,如下

  提示:找到左下方的構建時間,點擊時間后端小三角,選擇console output就可以查看整個構建的日志中了;

  當然,我上面只是一個很簡單的測試,主要是讓我們去理解pipline執行的流程和效果;

  生成Groovy代碼

  示例:把拉取代碼生成Groovy腳本

  提示:點擊配置,進入到配置任務的界面;

  提示:找到流水線語法,然后點擊跳轉到另外一個頁面;

  提示:這里我們可以選擇很多類型,比如我們要拉去代碼,可以選擇git:Git ;

  提示:選擇git:Git后,它會讓我們輸入倉庫地址和憑證,如果這里沒有憑證我們也可以選擇添加憑證;選擇好以后點擊下面的生成流水線腳本;然后我們就可以把生成后的腳本,拷貝到我們需要執行的步驟里;

  提示:編輯好pipline腳本后,點擊應用,我們又可以去執行我們現在的任務;

  提示:可以看到我們第二次構構建任務也是執行成功的;在克隆代碼階段,我們也可以看到jenkins到我們指定的倉庫中拉去代碼;

  驗證:在服務器上對任務目錄中看看是否將gitlab上的代碼拉去下來了?

 

  提示:可以看到對應的任務目錄下的確有從gitlab上拉去的文件;

  pipline 中執行 shell 命令

  提示:執行shell命令我用sh去執行,把要執行的shell命令用引號引起來;上面在代碼構建這個階段,用shell命令做了一件事,到test-pipline-job目錄打包了所有文件,生成了一個test.tar.gz的壓縮文件;

  驗證:執行test-pipline-job,看看服務器對應的目錄下是否有test.tar.gz文件生成?

  提示:從構建日志和視圖上看是執行成功了;我們在去服務器上確認下

  提示:在test-pipline-job目錄下的確有test.tar.gz文件生成;說明我們在代碼構建階段執行的shell命令成功了;

  配置jenkins的slave節點

  在要成為slave節點上安裝java環境

[root@node05 ~]# yum install -y java-1.8.0-openjdk-devel

  驗證:java環境

[root@node05 ~]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
[root@node05 ~]# 

  創建存放slave數據的目錄

[root@node05 ~]# mkdir /data/jenkins/slave01 -p
[root@node05 ~]# tree /data
/data
└── jenkins
    └── slave01

2 directories, 0 files
[root@node05 ~]# 

  在jenkinsweb圖形界面找到節點管理,選擇新建節點

  提示:填寫slave節點名稱或者IP地址,然后選擇固定節點,然后點擊確定;

  提示:填寫對應的信息,在啟動方式里選擇SSH,然后主機就寫slave主機的ip地址,然后選擇憑證,如果沒有就選擇添加;

  提示:這里把連接slave節點的用戶和密碼填寫上;也可以選擇公鑰私鑰,然后把私鑰放上去也行;填寫好,點添加;然后在憑證里再選我們添加的憑證;

  提示:這里如果是第一次連接slave我們要選擇為驗證那個選項,這樣jenkins去用ssh連接slave出現輸入yes,它會幫我們輸入,否則jenkins會連接上不是;如果之前用ssh連接過slave,host key驗證我們可以選擇第一個know那個;選擇好以后點擊保存就好;

  提示:以上就是成功將192.168.0.45配置成jenkins的slave節點的狀態,如果我們添加到對應節點上有小紅叉,說明我們添加slave節點有問題;我們可以查看日志,來排查對應的錯誤;

  查看slave構建日志

  提示:從上面日志上,我們可以看到jenkins啟動slave時,首先會去我們指定的數據目錄找java命令,然后返回java的版本,然后啟動一個sftp線程,拷貝remoting.jar到我們指定的數據目錄,然后在slave節點上執行 java -jar 把對應的jar包運行起來;

  驗證:在192.168.0.45上查看是否運行了remoting.jar的進程

  提示:可以看到在192.168.0.45上,運行了一個remoting.jar的jave進程;

  配置 slave 執行 job

  執行job

  提示:這里提示我們執行job失敗,說沒有git;我們在slave節點上安裝git命令

[root@node05 ~]# yum install git -y

  再次構建job,看看是否能夠夠構建成功?

  提示:這里這個錯誤嚴格上不應該出現,我們在pipline中寫的構建代碼,cd的目錄在slave上是不存在的,所以構建代碼這一步就失敗了;

  修改pipline腳本,然后重新構建job

  再次構建

  查看執行job日志

  提示:在日志中的確可以看到,執行過程是在我們指定的slave節點上執行的;

  驗證:去slave節點上對應目錄下看看是否有test.tar.gz生成?

  提示:可以看到slave節點上對應目錄下生成了我們指定打包文件;


免責聲明!

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



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