我有一个由 Bitbucket 通用 webhook 触发的 Jenkins Pipeline 作业。即 Jenkins 有 Generic Webhook Trigger:
...和 Bitbucket 项目通过添加一个 webhook 来触发这个 Jenkins 项目http://my_jenkins_server:8080/generic-webhook-trigger/invoke?token=foo
我的 Jenkinsfile 使用 HTTP POST 内容——它是 JSON 格式——随调用 webhook 一起提供。例如,我的 Jenkinsfile 有这样的部分:
pipeline {
agent any
triggers {
GenericTrigger (
genericVariables: [
[ key: "POST_actor_name", value: "\$.actor.name" ],
[ key: "POST_actor_email", value: "\$.actor.emailAddress" ],
[ key: "POST_ref_id", value: "\$.changes[0].refId" ],
[ key: "POST_ref_display_id", value: "\$.changes[0].ref.displayId" ],
[ key: "POST_commit", value: "\$.changes[0].toHash" ],
[ key: "POST_repo_slug", value: "\$.repository.slug" ],
[ key: "POST_project_key", value: "\$.repository.project.key" ],
[ key: "POST_clone_url", value: "\$.repository.links.clone[1].href" ],
[ key: "POST_pull_req_clone_url", value: "\$.pullRequest.fromRef.repository.links.clone[1].href" ],
[ key: "POST_pull_req_id", value: "\$.pullRequest.id" ],
[ key: "POST_pull_req_from_branch", value: "\$.pullRequest.fromRef.displayId" ],
[ key: "POST_pull_req_to_branch", value: "\$.pullRequest.toRef.displayId" ],
[ key: "POST_pull_req_repo_slug", value: "\$.pullRequest.toRef.repository.slug" ],
[ key: "POST_pull_req", value: "\$.pullRequest.links.self[0].href" ],
[ key: "POST_pull_req_url", value: "\$.pullRequest.links.self[0].href" ],
],
causeString: '$committer_name pushed ref $ref to $clone_url referencing $commit',
token: "foo",
printContributedVariables: true,
printPostContent: true,
)
}
...
问题:有人如何重放现有的构建?
如果我单击Replay
现有构建的按钮:
...构建失败,我在构建日志中得到这个小片段:
[Pipeline] readJSON (hide)
[Pipeline] readJSON
[Pipeline] error
我相信这表明 readJSON 错误,因为重播的作业不是由真正的 HTTP POST 触发的,因此该部分(上面发布)没有 JSON 内容triggers.GenericTrigger.genericVariables
可以解析。这是对构建错误的正确评估吗?
我想触发读取 HTTP POST 内容的 Jenkins 管道作业的通用 webhook 很常见。我还认为重播过去 Jenkins 构建的需求很常见。因此,我想知道是否有一种习惯用法或通用方法来提供一种方法来重新触发过去依赖于来自触发通用 webhook 的 HTTP POST 内容的 Jenkins 管道作业。我在这里太缺乏经验了,不知道是否有某种机制可以缓存原始 HTTP POST 内容并将其重新发送到重播作业。或者有没有办法在不推动虚拟更改的情况下从 Bitbucket 重新触发管道?(Git 活动,例如将新提交推送到 Bitbucket 存储库会触发存储库的 webhook)。