天天看點

自動化內建:Pipeline流水文法詳解

自動化內建:Pipeline流水文法詳解

該系列文章,圍繞持續內建:Jenkins+Docker+K8S相關元件,實作自動化管理源碼編譯、打包、鏡像建構、部署等操作;本篇文章主要描述Pipeline流水線用法。

前言:該系列文章,圍繞持續內建:Jenkins+Docker+K8S相關元件,實作自動化管理源碼編譯、打包、鏡像建構、部署等操作;本篇文章主要描述Pipeline流水線用法。
自動化內建:Pipeline流水文法詳解

Pipeline流水線任務通常情況下都是自動觸發的,在Git倉庫中配置源碼改動後通知的位址即可。

例如在Gitee倉庫中,基于WebHook的配置,可以在向倉庫push代碼後,自動回調預先設定的請求位址,進而觸發代碼更新後的打包動作,基本流程如下:

自動化內建:Pipeline流水文法詳解

這裡涉及到兩個核心配置:

Gitee回調:即倉庫接收到push請求後的通知位址;在倉庫管理的<code>WebHooks</code>選項中;

Jenkins流程:編寫流水線任務,處理代碼送出後的自動化流程;這裡需要Jenkins位址可以在外網通路,網上的元件很多,自行選擇搭建即可;

注意:可以先随意設定回調位址,在請求日志中直接拷貝請求參數,在postman中去觸發Jenkins任務,這樣在測試時會友善很多。

自動化內建:Pipeline流水文法詳解

這裡結合Gitee的幫助文檔,去分析不同push動作的參數辨別,可以判斷分支的建立、推送、删除等操作,例如:

建立分支:before字元都是0;删除分支:after字元都是0;

在Jenkins插件管理中,安裝<code>Generic-Webhook-Trigger</code>插件,流水線<code>pipeline</code>相關元件在Jenkins初始化的時候已經安裝了。

建立Item,輸入任務名稱,選擇<code>pipeline</code>選項即可:

自動化內建:Pipeline流水文法詳解

選擇Webhook選項,頁面提示了觸發的方式。

基于如上方式通過認證,觸發流水線執行,會生成任務日志,即流程是通順的。

triggers:基于hook模式觸發流水線任務;

environment:聲明全局通用的環境變量;

stages:定義任務步驟,即流程分段處理;

post.always:最終執行的動作;

正常流程中的整體結構如下:

把各個節點下的腳本配置進去,就會生成一個自動化的流水線任務。注意這裡不勾選<code>使用Groovy沙盒</code>選項。

這裡說的參數解析是指,Gitee通過hook機制請求Jenkins服務攜帶的參數,這裡主要解析post參數即可,解析方式看說明:

自動化內建:Pipeline流水文法詳解

這裡從hook回調的參數中選了幾個流程中使用的參數,下面看具體解析方式,在上圖中點選新增:

自動化內建:Pipeline流水文法詳解

把上述參數依次做好配置即可,這樣在工作流中就可以使用這些參數。

這裡即<code>triggers</code>子產品配置,核心作用是加載觸發流程的一些參數,後續在腳本中使用,其他相關配置按需選擇即可,注意這裡的參數需要在上個步驟中配置:

聲明一些全局的環境變量,也可以直接定義,在流程中用<code>${變量}</code>的方式引用:

這裡根據hook請求參數,解析出分支的操作類型:是否建立、是否删除、是否主幹分支,以及定義一個<code>is_success</code>流程是否成功的辨別。

這裡主要分為五個步驟:解析資料、拉取分支、處理Pom檔案、分支推送、項目打包;

解析資料:解析并輸出部分參數資訊;

拉取分支:結合Git指令,拉取分支代碼;

處理Pom檔案:對pom檔案的讀取和修改;

分支推送:結合Git指令,推送分支代碼;

項目打包:結合Mvn指令,完成項目打包;

注意:這裡在本地測試流程時,并沒有推送代碼;在項目打包完成後,結合shell腳本完成服務的啟動釋出。

在流程的最後,識别任務的執行辨別<code>is_success</code>,通知相關人員是否打包成功,這裡的通知方式可以選擇郵件或者其他API推送的通知類型,不過多描述:

完成上面<code>pipeline</code>流水線腳本開發後,通過postman工具不斷發送請求,完成腳本調試:

自動化內建:Pipeline流水文法詳解

這裡也可以點選流程裡的不同子產品,檢視該子產品下的日志資訊:

自動化內建:Pipeline流水文法詳解

說明:完整的<code>pipeline</code>腳本内容放在末尾的Gitee開源倉庫中,有需要的自行擷取。

同系列推薦:

Jenkins管理工具詳解

分布式服務部署釋出

微服務灰階釋出原理

服務自動化部署和管理

微服務元件二次淺封裝

自動化內建:Pipeline流水文法詳解

繼續閱讀