一隻箱子裡的貓,看著電腦螢幕

Schrödinger's Programmer

奔跑吧工程師,趁年輕跑得越遠越好

Jenkins 02 基本 pipeline 建置及串接 Github

建立一個基本的 pipeline 流程,並透過 Github 的 webhook 觸發建置流程

Ray

jenkins branches

Jenkins 中的建置流程也叫做 pipeline,也可以透過 webhook 觸發建置
一樣有各種觸發方式和執行方式,底下示範串接 Github webhook 和常見觸發條件範例

建立第一個 pipeline

側邊欄點選 Open Blue Ocean 來建置新的 pipeline
依照提示建立 access token,這邊為了示範我把舊的給砍了所以才會出現 Token 被刪除的錯誤訊息

create pipeline

按下Create an access token here.會開啟 Github 的personal access token建立頁面

如果自己要找的話是在
GitHub > settings > Developer settings > Personal access tokens > Generate new token

基本上他已經帶入需要的權限了,直接按下Generate token

new personal access token

然後複製產生的 token 貼到 jenkins
如果這時候沒有複製下來就只能重新產生了!

驗證完成之後就可以選擇專案

choose repository

接著按下創建就會掃瞄 Github Repository 裡面的所有分支了!

jenkins branches

串接 webhook 監聽事件

接著讓我們稍微改一下專案內容並且 commit push 到 github,會發現怎麼 Jenkins 沒動作?
那是因為我們沒設定讓 Jenkins 監聽 Github 事件!
那要怎麼設定呢?就是透過 webhook 啦
當我們設定在 webhook 裡面的事件被觸發,就會推送事件到指定的網址

要綁定專案 webhook 之後 jenkins 才能收到 github 上的事件
這個在 Drone 會在建置專案的時候會自動生成,但是 Jenkins 不會

進入專案的 Settings > Webhook > Add webhook
Payload URL填入jenkins主機網址/github-webhook/

如果 port 不是使用 80 或 443,則要完整輸入。例如 Jenkins 預設使用的是8080port

webhook

按下 Add webhook 新增後會測試連線
如果失敗,可以再調整後點擊右側三個點的選單,按下Redeliver來重新測試

redeliver

接著每次有 push 事件發生(根據 webhook 設定),都會通知 Jenkins
於是就達成我們想在有 push 新的內容到 Github 的時候觸發 Jenkins 建置流程

監聽 tag 事件

在版本發佈時我們常常會下tag來指定當前版本,之前使用 Drone 的經驗中
當 tag 被推送到版本庫,則 webhook 就會發送對應事件
但是在 Jenkins 並不是這麼一回事,卡了半天簡直氣死!
最後在官方文件:When using tags in Jenkins Pipeline 中發現

預設 Jenkins 是沒有建立 tag 監聽的,必須進入你的 pipeline 設定中
Branch Sources設定中的Behaviours區塊最下方的Add勾選Discover tags來啟用
至今我仍然沒參透為什麼要這樣設計

tag discover

pipeline 基本範例

這邊會基本示範幾種常用的觸發條件的條件判斷,至於觸發後要進行什麼行為之後再來介紹
首先在專案的根目錄下建立名為jenkinsfile的檔案,預設 Jenkins 會使用這個檔案作為 pipeline 流程

// jenkinsfile
pipeline {
    agent any
    stages {
        stage('Example Build') {
            steps {
                echo 'Hello World'
            }
        }
        stage('Example Deploy') {
            when {
                branch 'production'
            }
            steps {
                echo 'Deploying'
            }
        }
        stage('Example Tag Deploy') {
            when {
                buildingTag()
            }
            steps {
                echo "Building $TAG_NAME"
            }
        }
        stage('Example Tag Deploy') {
            when {
                tag "release-*"
            }
            steps {
                echo "Building $TAG_NAME"
            }
        }
    }
}

這邊示範了四種觸發條件

  • 沒有 when:不管怎樣都會觸發
  • when branch:指定分支被推送才會觸發
  • when buildingTag():當任何 tag 被建立
  • when tag "release-*":只有符合格式的 tag 被建立才會觸發,這邊是release- 開頭的 tag

基本有這四種應該可以玩出很多花樣了

更多使用方法可以參考官方說明文件:Pipeline Syntax
看了看文件覺得還是 Drone 香,因為 Jenkins 充滿太多「可以這樣做,也可以那樣做」的東西
在看別人的範例的時候常常會被搞得頭昏腦脹,有的人用 UI 有的人下指令
不過基本概念還是差不多的,有相關經驗的話知識可以平移借鏡
基本的 Jenkins pipeline 介紹就到這邊結束

最新文章

Category

Tag