Git
在聲明性 Jenkins 管道中使用 GIT 變數
我正在努力訪問我的 Jenkins 管道中的 GIT 變數
我需要知道在管道的某個階段在一些 bash 程式碼中檢查了哪個 GIT 分支。我將使用它來創建不同的輸出文件名。我的管道是聲明式的,不是腳本式的,我使用的是 Jenkins 2.150.1
我嘗試了所有我能在網上找到的東西,但它大多是不完整的程式碼或腳本管道。或者只是我無法將資訊放在一起。
給出我在這方面花了多少時間,如果有一個使用聲明性管道的完整工作範例會很好。
這是我到目前為止所嘗試的:
#1
執行 git inside
sh
,但 Jenkins 簽出的是送出,而不是分支,導致頭部分離#2
從 shell 中尋找環境變數,但沒有與 GIT 相關的設置。這個片段
steps { sh 'echo $GIT_BRANCH' }
總是返回空。然後我嘗試了 Groovy:
steps { echo "${env.GIT_BRANCH}" }
列印
null
。#3
在“全域變數參考”中有一點說:
SCM-specific variables such as GIT_COMMIT are not automatically defined as environment variables; rather you can use the return value of the checkout step.
我在網上搜尋瞭如何做到這一點,我把這段程式碼放在一起:
pipeline { stages { stage('Build') { steps { def scmVars = checkout([...]) echo 'scm : the commit id is ' + scmVars.GIT_COMMIT } } } }
但它失敗了一個例外
#4
使用
environment
命令並嘗試以某種方式獲取該值#5
在 Jenkinsfile 中尋找其他級別的變數,但顯然我只能在腳本化管道上做到這一點
#5
試圖訪問建構 url 和 API 呼叫,但我是代理,這會使 URL 變得複雜。
我的詹金斯文件
pipeline { stages { stage('Build') { steps { checkout([ $class: 'GitSCM', doGenerateSubmoduleConfigurations: false, userRemoteConfigs: [[ url: '...', credentialsId: '...' ]], branches: [ [name: '*/master'] ] ]) sh ''' #!/bin/bash -x echo $MY_GIT_BRANCH_THAT_I_CANT_FIND ''' } } } }
最後我找到了一個例子,我能夠理解如何做到這一點。
我需要使用腳本命令,獲取
Map
返回checkout
並保存Map
為環境變數:stage('Checkout code') { steps { script { // Checkout the repository and save the resulting metadata def scmVars = checkout([ $class: 'GitSCM', ... ]) // Display the variable using scmVars echo "scmVars.GIT_COMMIT" echo "${scmVars.GIT_COMMIT}" // Displaying the variables saving it as environment variable env.GIT_COMMIT = scmVars.GIT_COMMIT echo "env.GIT_COMMIT" echo "${env.GIT_COMMIT}" } // Here the metadata is available as environment variable ... } }