选择分支以在Jenkins中构建

时间:2014-09-03 08:48:24

标签: xcode jenkins continuous-integration

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

2 个答案:

答案 0 :(得分:8)

我为此找到了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的想法。

答案 1 :(得分:5)

是的,您可以使用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,...
  6. 从下面显示的属性文件内容中可以看到,我将使用branch_name作为Property Key框中的键。

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

    请参阅下面的快照,以便更好地理解我上面解释的内容:

    enter image description here

    现在,如果您已经拥有分支列表,则可以使用上面指定的格式创建属性文件。但是,由于分支创建时有发生,因此您需要动态从版本控制工具中获取列表。我们使用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
    

    P.S。:确保属性文件位于Jenkins Master上(如果是Master-Slave设置)。