Jenkins環境變量


一.環境變量

環境變量可以被看作是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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM