我想在管道中运行特定作业。我认为为作业分配一个标签,然后在 post 方法中再次指定该标签就可以满足我的需求。问题是,当我使用 api(post) 触发时,管道中的所有作业都会被触发,即使只有其中一个被标记。
gitlab-ci.yml
:
job1:
script:
- echo "helloworld!"
tags : [myTag]
job2:
script:
- echo "hello gitlab!"
API调用:
curl -X POST -F token="xxx" -F ref="myTag" https://gitlab.com/api/v4/projects/12345678/trigger/pipeline
将变量添加到触发器 api 调用中,如下所示:
https://docs.gitlab.com/ee/ci/triggers/#making-use-of-trigger-variables
然后使用
only
属性
在你的 gitlab.yml
文件中
如图所示:
https://docs.gitlab.com/ee/ci/variables/#environment-variables-expressions
然后只有当变量存在时作业才会执行
例如
job1:
script: echo "HELLO"
only:
variables:
- $variables[API_CALL]=true
GitLab 中的更改可能会使上述答案不起作用。
only:
variables:
- $variables[....]
语法触发 CI Lint。
对于像我一样来到这里的其他人,以下是我触发特定工作的方法:
job1:
script:
- echo "HELLO for job1"
- "curl
--request POST
--form token=$CI_JOB_TOKEN
--form ref=master
--form variables[TRIGGER_JOB]=job2
https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/trigger/pipeline"
except:
- pipelines
job2:
script: echo "HELLO for job2"
only:
variables:
- $TRIGGER_JOB == "job2"
except - pipelines
,否则,你会进入无限的子管道循环!通过使用变量,你可以做到:
使用此curl命令通过变量触发管道
curl --request POST --form token=${TOKEN} --form ref=master --form "variables[TRIGERRED_JOB]=job1" "https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/trigger/pipeline"
当然你必须相应地设置变量。
使用适当的变量定义您的工作:
job1:
script: echo "HELLO for job1"
only:
variables:
- $variables[TRIGERRED_JOB] == "JOB1"
job2:
script: echo "HELLO for job2"
only:
variables:
- $variables[TRIGERRED_JOB] == "JOB2"
如果您从另一个/同一个作业中运行curl,您可以使用 ${CI_JOB_TOKEN} 而不是 $TOKEN 和
https://docs.gitlab.com/ee/ci/triggers/#making-use-of-trigger-variables