gitlab-ci - Gitlab:通过 API 触发手动操作
问题描述
我有一个看起来像这样的 GitLab-CI 管道阶段:
test:
stage: test
script:
- echo test
when: manual
我需要通过 GitLab API 请求触发此操作。我已经尝试过这些解决方案,但它们似乎不起作用。
curl --request POST \
--form token=<trigger-token> \
--form ref=<branch-name> \
https://gitlab.example.com/api/v4/projects/1/trigger/pipeline
curl --request POST \
--headert <private-token> \
https://gitlab.example.com/api/v4/projects/1/jobs/1/play
我没有收到任何错误消息。但是,如果我将 curl-request 输出通过管道传输到 jq,则会得到以下输出:
[...]
"started_at": null,
"finished_at": null,
"committed_at": null,
"duration": null,
"coverage": null,
"detailed_status": {
"icon": "status_manual",
"text": "blocked",
"label": "waiting for manual action",
"group": "manual",
"tooltip": "manual action"
[...]
这些是管理日志,但即使 Pipeline 被授权,也不会触发作业。
{"severity":"INFO","time":"2020-11-05T15:57:51.989Z","correlation_id":"z7ATZBEHCB2","message":"Pipeline authorized","project_id":148,"user_id":12}
谢谢您的帮助!
解决方案
您正在使用的 API 调用是针对trigger
该步骤的,而不是手动启动它。如果您更改作业定义以接受触发器或手动操作,那么您当前的 API 调用将起作用。我们可以使用rules
关键字来做到这一点:
test:
stage: test
script:
- echo test
when: manual
rules:
- if: “$CI_PIPELINE_SOURCE == ‘trigger’”
when: always
它所做的是将默认设置设置为,manual
因此它仍然可以在 UI 中启动,但还检查$CI_PIPELINE_SOURCE
预定义变量以查看是否触发了管道。如果是这样,它将始终运行。
rules
您可以在此处查看关键字的文档: https ://docs.gitlab.com/ee/ci/yaml/#rules和所有预定义变量:https ://docs.gitlab.com/ee/ci/变量/predefined_variables.html
推荐阅读
- python - 将一个数据框中的列添加到 pandas 中的 muliheader 数据框
- python - Pandas 只识别我的数据框中的一列
- amazon-web-services - 从 cloudformation 创建 Aurora Serverless 集群?
- informix - TO 在一行中显示记录
- event-sourcing - 来自 AxonDB 事件存储的事件未到达我的 TrackingEventProcessor
- ios - 如何在 UIBezierPath 超过阈值时更改笔触和路径颜色
- java - 如何在 Eclipse 中导入 Jenetics 库
- javascript - 抛出断言错误
- twilio - 无法在 Twilio Softphone 上静音音频输出
- smpp - 如何在 kannel 上设置registred_delivery