我想在管道中运行特定的作业,我认为为该作业分配一个标签,然后在post方法中再次指定此标签将满足我的需求。问题是当我使用api(post)触发时,管道中的所有作业都是触发事件,尽管只有其中之一被标记。
gitlab-ci.yml:
job1: 脚本: -回声“ helloworld!” 标签:[myTag]
job2: 脚本: -回声“你好gitlab!”
api调用: curl -X POST -F token =“ xxx” -F ref =“ myTag” https://gitlab.com/api/v4/projects/12345678/trigger/pipeline
答案 0 :(得分:2)
向触发器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
答案 1 :(得分:2)
可能是由于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
,否则,您将进入无限子进程管道循环!答案 2 :(得分:0)
通过使用变量,您可以执行以下操作:
使用此curl命令以变量触发管道
curl --request POST --form token=${TOKEN} --form ref=master --form "variables[TRIGERRED_JOB]=job1" "https://gitlab.service.nsw.gov.au/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