天天看點

Jenkins進階用法 - Jenkinsfile 介紹及實戰經驗

系列目錄

1.Jenkins 安裝

2.Jenkins 叢集

3.Jenkins 持續內建 - ASP.NET Core 持續內建(Docker&自由風格&Jenkinsfile)

4.Jenkins 進階用法 - Pipeline 安裝

5.Jenkins 進階用法 - Jenkinsfile 介紹及實戰經驗

6.Jenkins 進階用法 - Blue Ocean 使用

7.Jenkins 進階用法 - 根據 git commit 控制建構過程

8.Jenkins 進階用法 - 微服務DevOps實戰(ASP.NET Core)

常見問題:

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檔案建立并檢查到源代碼控制庫中通常被認為是最佳做法。

Jenkins進階用法 - Jenkinsfile 介紹及實戰經驗
更多詳細資訊參考:玩轉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/_/):

Jenkins進階用法 - Jenkinsfile 介紹及實戰經驗

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

可以通過

credentials

函數來擷取

credentials('<憑據id>')
           

例如

credentials('test')
           

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

Jenkins進階用法 - Jenkinsfile 介紹及實戰經驗

8.定義變量

def cusversion="Jenkinsfile"
           

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

Jenkins進階用法 - Jenkinsfile 介紹及實戰經驗

9.指定分支運作stage

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

三.擴充閱讀

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

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

目前學習.NET Core 最好的教程 .NET Core 官方教程 ASP.NET Core 官方教程

.NET Core 交流群:923036995  歡迎加群交流

如果您認為這篇文章還不錯或者有所收獲,您可以點選右下角的【推薦】支援,或請我喝杯咖啡【贊賞】,這将是我繼續寫作,分享的最大動力!

作者:曉晨Master(李志強)

聲明:原創部落格請在轉載時保留原文連結或者在文章開頭加上本人部落格位址,如發現錯誤,歡迎批評指正。凡是轉載于本人的文章,不能設定打賞功能,如有特殊需求請與本人聯系!