能否通过REST调用触发GitLab CI/CD的单个Job?
GitLab CI/CD:单独触发单个Job的实现方法
可以通过POST请求单独触发指定的单个Job,核心思路是用自定义变量控制Job的运行条件,结合GitLab的流水线触发API实现。
1. 修改.gitlab-ci.yml,添加Job触发规则
给每个Job添加rules配置,通过自定义变量TRIGGER_JOB来控制是否运行该Job。这样默认流水线(代码提交、手动触发全量)不受影响,只有当指定变量时才会单独运行目标Job:
build-job: stage: build script: - echo "Hello, $GITLAB_USER_LOGIN!" rules: - if: $TRIGGER_JOB == 'build-job' || $TRIGGER_JOB == null test-job1: stage: test script: - echo "This job tests something" rules: - if: $TRIGGER_JOB == 'test-job1' || $TRIGGER_JOB == null test-job2: stage: test script: - echo "This job tests something, but takes more time than test-job1." - echo "After the echo commands complete, it runs the sleep command for 20 seconds" - echo "which simulates a test that runs 20 seconds longer than test-job1" - sleep 20 rules: - if: $TRIGGER_JOB == 'test-job2' || $TRIGGER_JOB == null deploy-prod: stage: deploy script: - echo "This job deploys something from the $CI_COMMIT_BRANCH branch." environment: production rules: - if: $TRIGGER_JOB == 'deploy-prod' || $TRIGGER_JOB == null
2. 用POST请求触发单个Job
调用GitLab的流水线API,携带认证信息和指定的TRIGGER_JOB变量即可触发目标Job:
示例curl命令(触发test-job1):
curl --request POST \ --url "https://你的GitLab域名/api/v4/projects/你的项目ID/pipeline" \ --header "PRIVATE-TOKEN: 你的访问令牌" \ --form "variables[TRIGGER_JOB]=test-job1" \ --form "ref=你的分支名" # 比如main或master
注意事项
- 访问令牌需要拥有
api和read_repository权限,可在GitLab个人设置的「访问令牌」页面生成。 - 若只想通过API单独触发Job,可去掉规则中的
$TRIGGER_JOB == null条件,这样只有指定变量时Job才会运行。
内容的提问来源于stack exchange,提问作者awen
相关产品推荐
相关产品推荐

