簡體   English   中英

選擇分支以在Jenkins中構建

[英]Select branch to build in Jenkins

我的項目中有幾個分支。 是否有可能在Jenkins的工作中進行動態分支選擇? 想法是Jenkins將獲得當前分支的列表並將其顯示為可能的選擇參數。 有沒有辦法做到這一點? 謝謝

我已經為此找到了groovy腳本。 有點修改它。 您需要選擇'groovy script'而不是'Property file'

def gitURL = "ssh://jenkins@phabricator.com/project.git"
def command = "git ls-remote -h $gitURL"

def proc = command.execute()
proc.waitFor()         

if ( proc.exitValue() != 0 ) {
   println "Error, ${proc.err.text}"
   System.exit(-1)
}     

def branches = proc.in.text.readLines().collect {
    it.replaceAll(/[a-z0-9]*\trefs\/heads\//, '') 
}   
return branches.join(",")

想法是一樣的。 只有現在你的關鍵是工作中的$ {Branch}。 效果很好。 ?非常感謝@Technext的想法。

是的,您可以使用擴展選擇參數插件來實現。 安裝插件后,轉到作業的配置頁面。 現在按照下面提到的步驟操作:

  1. 啟用復選框This build is parameterized
  2. 在下拉菜單中, Add Parameter ,選擇Extended Choice Parameter
  3. 由於您只為構建選擇一個分支,因此將Parameter Type保留為Single Select
  4. 在“ Choose Source for Value部分中,單擊單選按鈕“ Property File 指定文件的絕對(完整)路徑。
  5. Property File下方,您將看到Property Key 在這里你必須指定密鑰。 屬性文件采用鍵值對的形式。 例如, key=value1,value2,...

從下面顯示的屬性文件內容中可以看到,我將使用branch_name作為Property Key框中的鍵。

[tom@master ]# cat /data/branch_list
branch_name=master,mainline,branch_A,branch_B,branch_C,branch_N,

請參閱下面的快照,以便更好地理解我上面解釋的內容

在此輸入圖像描述

現在,如果您已經擁有分支列表,則可以使用上面指定的格式創建屬性文件。 但是,由於分支創建時有發生,因此您需要從版本控制工具中動態獲取列表。 我們使用Git,如果需要,我可以幫助你。 如果您使用其他任何東西,則必須搜索所需的命令。 為了動態獲取分支列表,我設置了一個cron,它繼續檢查Git repo並獲取分支列表。 然后,它使用最新的分支列表填充屬性文件,然后由Jenkins 動態加載。

更新:

我們使用Gitolite並使用git ls-remote命令訪問分支名稱。

git ls-remote gitolite@git.server.com:repository_name

例如,

[tom@master ~]$ git ls-remote gitolite@git.server.com:repository_name
08a119f0aec5d4286708d2e16275fcd7d80d2c25        HEAD
a91ef29f1be5bfe373598f6bb20d772dcc65b8ca        refs/heads/dev-mob
d138356cf752a46fd8c626229809c9eaae63a719        refs/heads/dev-ssorel
e7d7e2c617c4a42b299b29c0119283813800f1bb        refs/heads/dev-omni
3193b36d678f1af2dcc3a291c6313f28ede97149        refs/heads/dev-pay
72fd9d8586708011c763cd7bc4f7bd2a3513a12f        refs/heads/dev-sell
39455fc2672039a7f325e9cafe3777ed563368ef        refs/heads/dev-apis
a22eb000ffa1ac0fbbf51b6bc8aea31b040567a3        refs/heads/dev-front
78a63105ec754d7ba758af97d542e749ceb9c533        refs/heads/dev-tpsp
82d99796690b6c562872ea68655c74ebc3f0abfb        refs/heads/mainline
fd82522f9999cedb11e245b515d480187c2e9cc6        refs/heads/master

要僅過濾掉分支名稱並以鍵值對的形式在文件中填充分支名稱,可以使用以下腳本:

#!/bin/bash

git ls-remote gitolite@git.server.com:repository_name | grep -v HEAD | cut -d/ -f3 | sort > /data/branch_list_temp
tr '\n' ',' < /data/branch_list_temp | sed "s/^\(.*\)/branch_name=\1/" > /data/branch_list

rm /data/branch_list_temp

PS :確保屬性文件在Jenkins Master上(在Master-Slave設置的情況下)。

暫無
暫無

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

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