【问题标题】:Select branch to build in Jenkins选择要在 Jenkins 中构建的分支
【发布时间】:2014-09-03 08:48:24
【问题描述】:

我的项目中有几个分支。詹金斯的工作中是否可以进行动态分支选择? 这个想法是 Jenkins 将获取当前分支的列表并将它们显示为可能的选择参数。有没有办法做到这一点?谢谢

【问题讨论】:

  • 你用的是哪个版本控制工具?

标签: xcode jenkins continuous-integration


【解决方案1】:

我为此找到了 groovy 脚本。稍微修改了一下。您需要选择“groovy 脚本”而不是“属性文件”

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 的想法。

【讨论】:

  • 不客气! :) 感谢您发布脚本!会帮助别人。 :)
【解决方案2】:

是的,您可以使用Extended Choice Parameter 插件来做到这一点。安装插件后,转到作业的配置页面。现在按照以下步骤操作:

  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 存储库并获取分支列表。然后它使用 up-to-date 分支列表填充属性文件,然后 动态 由 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

P.S.:确保属性文件位于 Jenkins Master 上(以防主从设置)。

【讨论】:

  • 哇,感谢您快速而详尽的回答!我会尽快尝试的。另外,我使用 GIT。
  • 你如何获取分支名称(并且只有名称)?我正在尝试使用以下 'git branch -r | sed -e 's/origin\///g' -e 's/HEAD.*//g''。然后解析结果并将它们粘贴到 branch_list 文件中。我认为可能有更好的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2018-07-22
  • 1970-01-01
  • 2019-07-28
  • 2014-06-18
  • 1970-01-01
相关资源
最近更新 更多