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

der*_*dex 7 git jenkins

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

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

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

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

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

如果不为每个项目创造两个工作岗位,我试图实现的目标是什么?如果是这样,我需要做些什么才能使其正常工作?

aca*_*nby 1

不要将其用作$GitRef另一个分支说明符,只需将其用作没有默认值的字符串变量即可。然后,作为 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
Run Code Online (Sandbox Code Playgroud)

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