如何做这个 Jenkins 条件构建?

How to do this Jenkins conditional build?

我们是一家 .net 商店,因此使用 Jenkins MSBuild 插件进行构建。对于每个项目,我们都有一个开发和发布版本,但我注意到它们唯一的区别是:

  1. /p:Configuration=Debug 或 /p:Configuration=MSBuild 中的 Release
  2. 发布版本最后有一个额外的复制步骤

所以我在想是否可以将它们合并为一个构建,并根据 git 分支名称更改构建中的上述配置。我可以像这样得到 git 分支名称 %GIT_BRANCH%= origin/development,但我想不通:

  1. 如何构建条件步骤以使用上述 %GIT_BRANCH%。
  2. 如何使用上面的%GIT_BRANCH%来改变/p:Configuration=?

任何人都可以给我一些启发吗?

我假设,在将这些合并到一个作业中时,您希望对构建进行参数化(例如,定义一个名为 "Type" 的 Choice 参数,其值为 "Development" 和 "Release").如果是这样,您可以检查 "Prepare an environment for the run",然后将类似以下内容添加到 "Evaluated Groovy script" 字段:

if ("Release".equals(Type)) {
    def map = [Configuration: "Release"]
    return map
}

if ("Development".equals(Type)) {
    def map = [Configuration: "Debug"]
    return map
}

这将定义一个具有指定值的配置环境变量,然后可以将其作为 ${Configuration} 或 %Configuration% 环境变量(例如,“/p:Configuration=${Configuration}”)传递给 MSBuild作为命令行参数)。

如果你有一个只应有条件地执行的额外构建步骤(如果类型是 "Release"),你可以使用 Conditional BuildStep Plugin,在这种情况下你可以使用正则表达式匹配,使用表达式“^Release$”和标签 ${ENV,var="Type"} 来访问 "Type" 环境变量的值并将其与“^Release$”正则表达式模式进行比较。如果满足条件,您将执行复制步骤作为执行步骤。

或者,更简单的方法是,您可以在 Windows 批处理文件中使用 IF 逻辑,例如:

IF "%Type%" EQU "Release"
(
    rem Copy your files wherever
)