簡體   English   中英

Jenkins-管道訪問git分支名稱

[英]Jenkins - Pipeline access git branch name

問題:是否有任何方法可以在jenkinsfile中獲取由管道簽出的分支的名稱?

注意 :我不在多分支管道中!

在我的管道中即時通訊使用

checkout([$class: 'GitSCM', 
          userRemoteConfigs: [[url:'https://github.com/repo', 
                               credentialsId: 'xxxx',name: '1234']]])

其中name是提交ID。 我需要驗證此提交ID來自用戶已將其指定為參數的分支(用戶同時指定了分支名稱和提交ID,並且我需要在構建項目之前檢查是否沒有錯誤)。

為什么分支名稱未在管道中公開,而僅在多分支管道中公開? 對我來說沒有意義。

我不想轉換為多分支管道的原因有三個:

  1. 我在管道中使用了另一個插件Build Blocker插件 ,該插件在多分支管道中似乎不可用。
  2. 我有一個參數化管道,在多分支管道中沒有看到該選項。
  3. 很多時間進入了這個管道,我只是不想僅僅為了這個分支名稱功能而從頭開始設置這個項目。

我已經打印出所有環境變量,分支名稱不在其中。

謝謝您的幫助!

如果您使用的是管道代碼,那么我假設您正在執行以下操作:

checkout scm

令人高興的是,這將返回一個包含一些有用內容的地圖,您可以通過以下方式從中獲取已簽出的分支:

def scmVars = checkout scm def branchName = scmVars.GIT_BRANCH

請參閱管道:節點和進程, sh :Shell腳本

returnStdout (可選)

如果選中,則任務的標准輸出將作為步驟值作為String ,而不是打印到構建日志中。 (如果有標准錯誤,仍然會打印到日志中。)您通常會希望在結果上調用.trim()來刪除尾隨的換行符。

並查看git-branch

-包含[<commit>]
僅列出包含指定提交的分支(如果未指定,則為HEAD)。 暗示--list

將它們與:

...
def branches = sh(returnStdout: true, script: "git branch --contains ${commitId}")
...

檢查branches是否包含用戶指定的分支名稱。

順便說一句,我重命名了您的變量,因為:

  • name是您的提交ID,又名(提交)哈希,因此我將其commitIdcommitHash
  • 您實際上還有其他名稱,即branch ,可以稱為branchName ,這樣可以使將來的維護者的生活更輕松

關於:

為什么分支名稱不公開[...]?

請參閱計算機科學家的Git

refs :引用或頭或分支,就像在DAG [有向無環圖]中的某個節點上拍的便箋一樣。 在僅添加DAG且無法更改現有節點的情況下,后期可以自由移動。 它們不會存儲在歷史記錄中,也不會在存儲庫之間直接傳輸。 它們就像書簽一樣,“我在這里工作”。

這樣就很容易從分支中找到一個提交:通過從分支ref遍歷整個圖,但是反過來比較棘手,因為一個提交可以屬於多個分支(如果該分支以后再分支一次)。 例如,來自Pro Git的3.1 Git分支-堅果殼中的分支,其中左邊的三個提交都屬於分支master testing

在此處輸入圖片說明


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM