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



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

  1. 每当将更改推送到中央存储库时,它将从与模式(源/主、源/功能/*、源/修补程序/* 等(匹配的分支构建

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

我有 1. 通过在 Git 服务器上设置接收后脚本并在 Jenkins 中添加多个分支说明符来正常工作。

为了也做 2.,我添加了一个额外的构建参数GitRef然后添加了一个带有 $GitRef 的额外分支说明符。手动启动构建将每次都从相同的提交/分支进行构建,无论参数设置为什么。如果我删除了所有其他分支说明符,手动构建将按预期工作。但是钩子触发的构建将仅从源/主构建(默认值 $GitRef (。

如果不为每个项目创造两个工作岗位,我试图实现的目标是否可行?如果是这样,我需要做什么才能让它工作?

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

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

不要使用 $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

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

最新更新