Jenkins - Pipeline as Code - Shared Libraries
前一篇將 Jenkinsfile 內共用的部份重構為一份,那如果是不同的專案之間要共用呢?像這一連串文章,Jenkinsfile 改了無數次,如果有十幾個甚至幾十個專案不就要一直復制貼上,重覆這個動作好幾次?
我們可以透過 Jenkins Shared Libraries 機制來達到程式碼共用,這邊我們示範單純把整個 Jenkinsfile 封裝起來的方法
首先將原本的 Jenkinsfile 復制到新的檔案 vars/commonPipeline.groovy 並且用 def call() 包起來,像這樣
def call() {
pipeline {
agent none
stages {
… 略 …
}
}
接著要把 shared libraries 註冊到 Jenkins,在主頁 > 管理 Jenkins > 設定系統 > Global Pipeline Libraries 新增一組 libary,設定如下
- Name: pipeline-library
- Default version: shared-libraries
- 選擇 Modern SCM
- 選擇 Git
- Project Repository: https://github.com/allyusd/jenkins-pipeline.git
填完之後按下儲存,這樣 Jenkins 就知道要去哪裡取得 libary
接著修改 Jenkinsfile,先載入 libary,再呼叫 commonPipeline
@Library('pipeline-library') _
commonPipeline()
這麼一來,所有的專案的 Jenkinsfile 就只是轉呼叫 commonPipeline,之後只要修改 commonPipeline,所有的專案都會一起更新的,因為他們使用同一份 libary
ref
Extending with Shared Libraries
Share a standard Pipeline across multiple projects with Shared Libraries
留言