问题描述
情境是这样的:他已经在 Bitbucket 项目中创建了一个 Webhook,用于在某些事件发生时向 Jenkins 发送 POST 请求。他已经按照一些指导设置了 Jenkins 中的 Pipeline 构建,该构建只会在推送 Git 标签的事件发生时才触发。他希望这个 Jenkins Pipeline 构建能够触发另一个可以由人手动触发的 Jenkins 构建,而且能够传递一些变量。换句话说,如果 A 是由通用 Webhook 触发的 Pipeline 构建,他希望 A 能够计算一些变量值并触发 B,并且允许人手动触发 B 时提供一些自定义变量。
用户尝试将 A 设置为一个 Pipeline 构建,因为 Pipeline 构建提供了使用 Pipeline 脚本的选项,这是他目前唯一知道可以访问 POST 请求内容参数的方式。然而,当 A 是一个 Pipeline 构建时,Jenkins UI 中没有“Post-build Actions”部分,也就是说,他不知道如何让 Pipeline 构建触发后续的构建。用户还尝试想象一个 Pipeline 构建触发一个自由风格的构建,因为 Pipeline 构建允许访问通用 Webhook POST 内容,而自由风格的构建是人工触发的,可以带有参数,可以由人或调用的 Pipeline 构建提供这些参数。但他不确定如何在 Pipeline 构建中触发自由风格的构建。
用户想要解决这个问题,并希望得到一种有效的方法来在 Jenkins 中设置这种触发机制。
解决方案
用户想要实现的需求可以通过以下两个步骤来完成。请注意,在使用以下解决方案时,需要确保你的 Jenkins 版本和插件版本与示例中提到的版本保持一致。以下解决方案可能需要适当的调整,具体取决于你的 Jenkins 环境和项目需求。
-
设置人工触发的构建 B
首先,需要将构建 B 设置为一个 Pipeline 作业,并且为其添加一些构建参数,以便人们可以在 Web UI 中手动触发构建 B 时提供自定义变量。以下是在 Jenkins 中设置构建参数的步骤: -
在 Jenkins 界面中,选择“新建任务”创建一个新的 Pipeline 作业。
- 在作业配置中,找到“Build Triggers”部分。
- 勾选“This project is parameterized”选项。
- 点击“Add Parameter”按钮并选择适当的参数类型,比如字符串参数(String Parameter)。
- 为参数设置名称(比如 parameterName1),这将是在手动触发构建 B 时用来标识变量的名称。
- 保存配置。
现在,构建 B 被设置为一个带有自定义参数的 Pipeline 作业,并且可以由人手动触发。
-
在 Pipeline 构建 A 中触发构建 B
在 Pipeline 构建 A 中触发构建 B,需要使用 Jenkins 提供的内置构建步骤(build step)。以下是在 Pipeline 构建 A 中触发构建 B 并传递变量的步骤: -
在 Pipeline 脚本中,使用
build
步骤来触发构建 B。 - 使用
job
参数指定要触发的作业的名称,这里是 “Job B”。 - 使用
parameters
参数传递构建参数,以便在触发构建 B 时传递给它。 - 保存并提交 Pipeline 脚本。
下面是示例 Pipeline 脚本:
build(
job: 'Job B',
parameters: [
string(name: 'parameterName1', value: "some parameter value"),
string(name: 'parameterName2', value: "some parameter value"),
// 添加其他参数
],
)
在这个示例中,我们使用 build
步骤来触发 “Job B”,并传递了两个字符串参数(parameterName1 和 parameterName2)的值。你可以根据需要添加其他参数。
完成上述步骤后,Pipeline 构建 A 将能够在满足条件时触发构建 B,并且可以传递指定的参数。
这个解决方案应该满足用户的需求,允许通过 Webhook 触发的构建 A 来触发一个可以由人手动触发的构建 B,并且能够传递变量。如果你遇到任何问题,可以在 Jenkins 文档中查找更多关于 Pipeline 脚本和构建步骤的信息,或者参考相关插件的文档。这将帮助你在 Jenkins 中成功设置这种触发机制。