Jenkins / Git:从任何提交构建最新的分支+手动构建

时间:2013-09-30 17:01:57

标签: git jenkins

我正在尝试使用Git项目设置Jenkins,以便:

  1. 它将从匹配模式的分支构建( origin / master origin / feature / * origin / hotfix / *等等,每当更改被推送到中央存储库

  2. 开发人员和测试人员可以为他们想要的任何修订触发构建,指定为构建参数,即标记名称,分支名称或提交哈希。该作业有其他参数,我们偶尔会想要使用默认值以外的其他东西创建构建。

  3. 通过在Git服务器上设置post-receive脚本并在Jenkins中添加多个分支说明符,我得到了正确的工作。

    为了也做2.,我添加了一个额外的构建参数GitRef,然后添加了一个额外的分支说明符$GitRef。无论参数设置如何,手动启动构建只会每次都从同一个提交/分支继续构建。如果我删除了所有其他分支说明符,则手动构建将按预期工作。但是钩子触发的构建只能从 origin / master (默认值$GitRef)构建。

    如果没有为每个项目创建两个工作,我想要实现的目标是什么?如果是这样,我需要做些什么才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

如果您安装了Git Parameters Plugin,则可以允许用户使用特定的提交ID,分支或标记来启动参数化构建。

然后,您可以将参数的默认值设置为**,默认情况下,Jenkins将在分支上构建最新的提交。

答案 1 :(得分:1)

不要将$GitRef用作另一个分支说明符,而是将其用作没有默认值的String变量。然后,作为Jenkins构建阶段的第一步,有一个脚本来检查是否设置了该值:

#!/bin/bash
if [ -n $GitRef ]
then
  echo "Manually specified reference found. Building $GitRef"
  git checkout $GitRef
else  
  echo "No explicit branch specified, building $GIT_BRANCH" 
fi

此时,按正常方式运行构建(例如Maven)。构建将运行您希望编译的任何分支/标记/提交,如果它不存在,Jenkins应该通过使构建失败来处理git checkout <bad_ref>