一.環境變量
環境變量可以被看作是pipeline與Jenkins交互的媒介。比如,可以在pipeline中通過BUILD_NUMBER變量知道構建任務的當前構建次數。環境變量可以分為Jenkins內置變量和自定義變量。
在pipeline執行時,Jenkins通過一個名為env的全局變量,將Jenkins內置環境變量暴露出來。其使用方法有多種,示例如下:
pipeline {
agent any
stages {
stage('Example') {
steps {
echo "Running ${env.BUILDNUMBER} on ${env.JENKINS_URL}" # 方法1 推薦
echo "Running $env.BUILDNUMBER on $env.JENKINS_URL" # 方法2
echo "Running ${BUILDNUMBER} on ${JENKINS_URL}" # 方法3 不推薦,難排查
}
}
}
}
默認env的屬性可以直接在pipeline中引用。所以,以上方法都是合法的。但是不推薦方法三,因為出現變量沖突時,非常難查問題。echo只是為了展示,實際應用可以修改變量來達到不同的定制化。
通過訪問http://localhost:8080/env-vars.html/
或者http://localhost:8080/pipeline-syntax/globals#env
來獲取完整列表。在列表中,當一個變量被聲明為"For a multibranch project"時,代表只有多分支項目才會有此變量。
打印當前環境變量
sh "printenv" //打印環境變量
二.自定義環境變量
當pipeline變得復雜時,我們就會有定義自己的環境變量的需求。聲明式pipeline提供了environment指令,方便自定義變量。比如:
pipeline {
agent any
environment {
CC = "clang"
}
stages {
stage("Example") {
environment {
DEBUG_FLAGS = "-g"
}
steps {
sh "${CC} ${DEBUG_FLAGS}"
sh "printenv"
}
}
}
}
environment指令可以用在pipeline中定義,作用域就是整個pipeline,當定義在stage階段,只在當前stage有效。
環境變量的互相引用:
environment {
__server_name = 'mail-server'
__version = "${BUILD_NUMBER}"
__artifact_name = "${__server_name}-${__version}.jar"
}
技巧:
自定義變量時,為避免命名沖突,可根據項目或公司加上統一前綴,如__server_name,__就是前綴。
三.自定義全局變量
定義全局環境變量可以跨pipeline使用。
進入Jenkins→Manage Jenkins→Confiure System找到Global properties→勾選"Environment variables"復選框,單擊“Add”按鈕,在輸入框中輸入變量名和變量值即可。
自定義全局環境變量會被加入env屬性列表中,所以使用時可以直接用${env.g_name}引用。
四.常用變量定義
1.定義構建名和構建顯示,在script包裹后直接覆蓋即可
currentBuild.displayName = "1.2.3-SNAPSHOT"
currentBuild.description ="分支: " + "2020-09-18"
還可以插入html顯示顏色或者鏈接
currentBuild.setDescription(‘<p><font color="blue">All cases Passed but maybe include retry cases</font></p>’)
2.設置job狀態
jenkins job的狀態,常用狀態有幾種:SUCCESS,UNSTABLE,FAILURE,ABORTED,可以在pipeline腳本中自主修改job的狀態,但只能由好的狀態變成壞的。例如發布成功是SUCCESS,可以修改為UNSTABLE。
currentBuild.result = 'FAILURE'
五.常用環境變量
BUILD_NUMBER
構建號,累加的數字。在打包時,它可作為制品名稱的一部分,比如server-${BUILD_NUMBER}.jar
BRANCH_NAME
多分支pipeline項目支持。當需要根據不同的分支做不同的事情時就會用到,比如通過代碼將release分支發布到生產環境中、master分支發布到測試環境中。
BUILD_URL
當前構建的頁面URL。如果構建失敗,則需要將失敗的構建鏈接放到郵件通知中,這個鏈接就可以是BUILD_URL
GIT_BRANCH
通過git拉取的源碼構建的項目才會有此變量。在使用env變量時,需要注意不同類型的項目,env變量所包含的屬性及其值是不一樣的。比如普通pipeline任務中的GIT_BRANCH變量值為roigin/master,在多分支pipeline中GIT BRANCH變量的值為master
所以,在pipeline中根據分支進行不同行為的邏輯處理時,需要留意。
CHANGE_ID
對於與某種更改請求相對應的多分支項目,這將被設置為更改ID,例如拉取請求號。
CHANGE_URL
對於與某種更改請求相對應的多分支項目,這將被設置為更改URL。
CHANGE_TITLE
對於對應於某種變更請求的多分支項目,這將被設置為更改的標題。
CHANGE_AUTHOR
對於對應於某種變更請求的多分支項目,這將被設置為擬議更改的作者的用戶名。
CHANGE_AUTHOR_DISPLAY_NAME
對於對應於某種變更請求的多分支項目,這將被設置為作者的人名。
CHANGE_AUTHOR_EMAIL
對於對應於某種變更請求的多分支項目,這將被設置為作者的電子郵件地址。
CHANGE_TARGET
對於對應於某種變更請求的多分支項目,這將被設置為可以合並更改的目標或基本分支。
BUILD_ID
當前版本ID,與BUILD_NUMBER相同,用於在1.597+中創建的構建,但較舊版本的YYYY-MM-DD_hh-mm-ss時間戳記
BUILD_DISPLAY_NAME
當前版本的顯示名稱,默認為“#153”。
JOB_NAME
此構建項目的名稱,如“foo”或“foo / bar”。
JOB_BASE_NAME
此建立項目的名稱將剝離文件夾路徑,例如“bar / foo”的“foo”。
BUILD_TAG
“jenkins- $ {JOB_NAME} - $ {BUILD_NUMBER} ”的字符串。JOB_NAME中的所有正斜杠(/)都會用破折號( - )替換。方便放入資源文件,jar文件等,以方便識別。
EXECUTOR_NUMBER
識別執行此構建的當前執行程序(在同一台計算機的執行程序中)的唯一編號。這是您在“構建執行者狀態”中看到的數字,但數字從0開始,而不是1。
NODE_NAME
代理的名稱,如果構建是代理,或者“主”,如果在主機上運行
NODE_LABELS
空格分隔的節點分配的標簽列表。
WORKSPACE
分配給構建作為工作區的目錄的絕對路徑。
JENKINS_HOME
Jenkins主節點上分配的目錄絕對路徑存儲數據。
JENKINS_URL
完整的Jenkins網址,例如http://server:port/jenkins/ (注意:只有在系統配置中設置了Jenkins URL)
JOB_URL
此作業的完整URL,如http://server:port/jenkins/job/foo/ (必須設置Jenkins URL)
SVN_REVISION
Subversion版本號,當前已被檢出到工作區,如“12345”
SVN_URL
當前已經檢出到工作空間的Subversion URL。