如何在gitlab中触发特定作业

时间:2019-06-21 08:42:00

标签: post tags gitlab gitlab-ci gitlab-ci-runner

我想在管道中运行特定的作业,我认为为该作业分配一个标签,然后在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

3 个答案:

答案 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。

enter image description here

对于像我这样来这里的其他人,这是我触发特定工作的方式:

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"

⚠️请注意job1中的except - pipelines,否则,您将进入无限子进程管道循环!

trigger a specific job

答案 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