【发布时间】:2020-07-01 02:10:05
【问题描述】:
我有一个管道,我想在部署到 uat 环境后运行 e2e 测试,e2e 测试在 gitlab 上运行。我想做的是让 gitlab 使用 webhook 来触发 jenkins 来决定构建是否可以投入生产。所以管道如下所示。
部署到 uat 后,我可以发送 webhook 在 gitlab 上触发 e2e 测试。然而,gitlab 可以将 webhook 发送给 jenkins,因为管道作业 e2e 收到了 webhook 并构建成功。它不会更改管道作业状态,因此,除非我们手动单击 e2e 作业上的触发器,否则我们无法继续部署到生产环境。而且我已经尝试使用currentBuild.currentResult 和currentBuild.result 似乎不起作用。
我应该怎么做才能解决这个问题?
更新
我没有使用 groovy 的新管道方式,而是像这样使用旧方式。但我认为这与我要在这里解决的问题无关。
让我提供有关该问题的更多详细信息。完成 e2e 测试后,我将以下请求从 gitlab 发送到 jenkins
curl "SERVER_URL/job/MY_XXX_PROJECT/view/Pipeline/job/X.X%20E2E%20my_e2e_test_result/buildWithParameters?token=xxxxxxxxxxxxxx&PARENT_BUILD_NUMBER=123&currentBuild.currentResult=SUCCESS&currentBuild.Result=SUCCESS"
这是管道,如果我在SERVER_URL/job/MY_XXX_PROJECT/view/Pipeline/job/X.X%20E2E%20my_e2e_test_result/ 中检查作业。该工作实际上是构建SUCCESS。
但是,状态显示就像什么都没发生,如果不再次手动单击同一作业 (e2e) 上的触发按钮,我们将无法继续部署生产。
【问题讨论】:
-
不确定你的意思。 Gitlab 应该调用 Jenkins webhook 来启动 e2e 作业,但由 Jenkins 决定构建的状态。您是否只是在为 Jenkins 工作寻找更新自身状态的方法?如果是这样,您使用的是脚本式还是声明式管道?
-
在 jenkins UAT 的最后构建步骤中,我向 gitlab 发送了一个 post 请求以运行 e2e 测试。 e2e测试完成后,gitlab发送webhook给jenkins通知测试结果是成功还是失败。但是,当 jenkins 收到 webhook 并运行作业时,它不会更新作业的状态。我希望 jenkins 将作业状态更新为成功或失败。
标签: jenkins jenkins-pipeline webhooks