如何在Webhook触发的作业后触发一个可由人手动触发的作业

79次阅读
没有评论

问题描述

情境是这样的:他已经在 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 环境和项目需求。

  1. 设置人工触发的构建 B
    首先,需要将构建 B 设置为一个 Pipeline 作业,并且为其添加一些构建参数,以便人们可以在 Web UI 中手动触发构建 B 时提供自定义变量。以下是在 Jenkins 中设置构建参数的步骤:

  2. 在 Jenkins 界面中,选择“新建任务”创建一个新的 Pipeline 作业。

  3. 在作业配置中,找到“Build Triggers”部分。
  4. 勾选“This project is parameterized”选项。
  5. 点击“Add Parameter”按钮并选择适当的参数类型,比如字符串参数(String Parameter)。
  6. 为参数设置名称(比如 parameterName1),这将是在手动触发构建 B 时用来标识变量的名称。
  7. 保存配置。

现在,构建 B 被设置为一个带有自定义参数的 Pipeline 作业,并且可以由人手动触发。

  1. 在 Pipeline 构建 A 中触发构建 B
    在 Pipeline 构建 A 中触发构建 B,需要使用 Jenkins 提供的内置构建步骤(build step)。以下是在 Pipeline 构建 A 中触发构建 B 并传递变量的步骤:

  2. 在 Pipeline 脚本中,使用 build 步骤来触发构建 B。

  3. 使用 job 参数指定要触发的作业的名称,这里是 “Job B”。
  4. 使用 parameters 参数传递构建参数,以便在触发构建 B 时传递给它。
  5. 保存并提交 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 中成功设置这种触发机制。

正文完