7

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

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

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

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

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

在不为每个项目创建两个工作的情况下,我想要实现的目标是否可能?如果是这样,我需要做什么才能让它工作?

4

2 回答 2

2

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

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

于 2015-02-26T10:46:31.217 回答
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

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

于 2015-02-19T03:36:39.747 回答