[英]Jenkins - Pipeline access git branch name
問題:是否有任何方法可以在jenkinsfile中獲取由管道簽出的分支的名稱?
注意 :我不在多分支管道中!
在我的管道中即時通訊使用
checkout([$class: 'GitSCM',
userRemoteConfigs: [[url:'https://github.com/repo',
credentialsId: 'xxxx',name: '1234']]])
其中name
是提交ID。 我需要驗證此提交ID來自用戶已將其指定為參數的分支(用戶同時指定了分支名稱和提交ID,並且我需要在構建項目之前檢查是否沒有錯誤)。
為什么分支名稱未在管道中公開,而僅在多分支管道中公開? 對我來說沒有意義。
我不想轉換為多分支管道的原因有三個:
我已經打印出所有環境變量,分支名稱不在其中。
謝謝您的幫助!
如果您使用的是管道代碼,那么我假設您正在執行以下操作:
checkout scm
令人高興的是,這將返回一個包含一些有用內容的地圖,您可以通過以下方式從中獲取已簽出的分支:
def scmVars = checkout scm def branchName = scmVars.GIT_BRANCH
returnStdout
(可選)如果選中,則任務的標准輸出將作為步驟值作為
String
,而不是打印到構建日志中。 (如果有標准錯誤,仍然會打印到日志中。)您通常會希望在結果上調用.trim()
來刪除尾隨的換行符。
並查看git-branch :
-包含[<commit>]
僅列出包含指定提交的分支(如果未指定,則為HEAD)。 暗示--list
。
將它們與:
...
def branches = sh(returnStdout: true, script: "git branch --contains ${commitId}")
...
檢查branches
是否包含用戶指定的分支名稱。
順便說一句,我重命名了您的變量,因為:
name
是您的提交ID,又名(提交)哈希,因此我將其commitId
或commitHash
branchName
,這樣可以使將來的維護者的生活更輕松 關於:
為什么分支名稱不公開[...]?
請參閱計算機科學家的Git :
refs
:引用或頭或分支,就像在DAG [有向無環圖]中的某個節點上拍的便箋一樣。 在僅添加DAG且無法更改現有節點的情況下,后期可以自由移動。 它們不會存儲在歷史記錄中,也不會在存儲庫之間直接傳輸。 它們就像書簽一樣,“我在這里工作”。
這樣就很容易從分支中找到一個提交:通過從分支ref遍歷整個圖,但是反過來比較棘手,因為一個提交可以屬於多個分支(如果該分支以后再分支一次)。 例如,來自Pro Git的3.1 Git分支-堅果殼中的分支,其中左邊的三個提交都屬於分支master
和 testing
:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.