1. 程式人生 > >Jenkins高階教程 - Jenkinsfile 介紹及實戰經驗

Jenkins高階教程 - Jenkinsfile 介紹及實戰經驗

系列目錄

1.Jenkins 安裝
2.Jenkins 叢集
3.Jenkins 基本使用 - ASP.NET Core 持續整合(待補充)
4.Jenkins高階教程 - Pipeline 安裝
5.Jenkins高階教程 - Jenkinsfile 介紹及實戰經驗

常見問題:

1.Jenkins 時區設定
2.Jenkins 無法捕獲構建指令碼錯誤問題

一.什麼是 Jenkinsfile

Jenkinsfile 是 Jenkins 2.x 核心特性 Pipeline 的指令碼,由Groovy語言實現。Jenkinsfile一般是放在專案根目錄,隨專案一起受原始碼管理軟體控制,無需像建立“自由風格"(Jenkins FreeStyle)專案一樣,每次可能需要拷貝很多設定到新專案,提供了一些直接的好處:

  • Pipeline上的程式碼審查/迭代
  • Pipeline的審計跟蹤
  • Pipeline的唯一真實來源,可以由專案的多個成員檢視和編輯。

Pipeline支援:Declarative(在Pipeline 2.5中引入)和Scripted Pipeline兩種格式。兩者都支援建立Pipeline,兩者都可以用於在Web UI中定義一個流水線Jenkinsfile,將Jenkinsfile檔案建立並檢查到原始碼控制庫中通常被認為是最佳做法。

aaa

更多詳細資訊參考:玩轉Jenkins Pipeline(大寶魚) 推薦必讀

二. Jenkinsfile 實戰經驗

看本小節之前,如果你不熟悉 Jenkinsfile 那麼推薦一定要閱讀,第一小節推薦的文章,裡面介紹了很多基本用法。

這裡的實戰主要講宣告式 Jenkinsfile,因為宣告式 Jenkinsfile是 Pipeline 2.5 引入的,比之以前的指令碼式會有一些更先進的設計和更快捷的用法,且宣告式Jenkinsfile還相容指令碼式語法。這裡主要講一些博主實際用的過程中的經驗。

1.在指定的Jenkins叢集結點上執行

pipeline {
    agent {
        node {
            label 'slave-1'
        }
    }
}

label 指你的叢集結點名稱

2.定義環境變數

pipeline {
    environment {
        NUGET_KEY     = 'abc'
    }
}

使用:

env.NUGET_KEY

sh裡使用

$NUGET_KEY

例子:

輸出該環境變數

echo "${env.NUGET_KEY}"

sh:

sh 'echo $NUGET_KEY'

這裡要注意在 sh 語句塊裡使用的不同。

3.設定 github webhook 觸發器

triggers {
      githubPush()
}

UI上沒有沒有設定github webhook觸發的。指令碼設定後,需要到 【系統管理】->【系統設定】裡,手動註冊一下github webhook即可

4.常用的預置環境變數

變數名 說明
BRANCH_NAME 當前分支名稱
GIT_COMMIT 當前 commit hash
GIT_PREVIOUS_SUCCESSFUL_COMMIT 上一次構建成功 cimmit hash

示例:

echo "branch: ${env.BRANCH_NAME}"
echo "current SHA: ${env.GIT_COMMIT}"
echo "previous SHA: ${env.GIT_PREVIOUS_SUCCESSFUL_COMMIT}"script

5.script塊

script 塊裡可以寫指令碼式Jenkinsfile的語法

例子:

stages {
        stage('Build') {
            steps {
                script {
                    result = sh (script: "git log -1|grep 'Release'", returnStatus: true) 
                    echo "result: ${result}"
                }
            }
        }
    }

6.設定構建結果

post { always { script { currentBuild.result = 'NOT_BUILT' } } }

一般放在 POST 語句塊

7.敏感資料設定

一些敏感資料,比如賬號密碼,不可能解除安裝指令碼中。

首先新建憑據(Jenkins 地址 /credentials/store/system/domain/_/):

1544687837595

型別選擇 Secret text,Secret 輸出你的 賬號/密碼等。然後記住你設定的ID,待會要用

可以通過 credentials函式來獲取

credentials('<憑據id>')

例如

credentials('test')

直接輸出到控制檯也會加密:

1544687975228

8.定義變數

def cusversion="Jenkinsfile"

必須放在 pipeline 前面或者 script 語句塊裡面

1544695268853

9.指定分支執行stage

stage('Deploy') {
            when {
                branch "<分支名稱>"
            }
}

三.擴充套件閱讀

Jenkinsfile 語法 https://jenkins.io/doc/book/pipeline/syntax

玩轉Jenkins Pipeline https://blog.csdn.net/diantun00/article/details/81075007