Post 如何在gitlab中触发特定作业

Post 如何在gitlab中触发特定作业,post,tags,gitlab,gitlab-ci,gitlab-ci-runner,Post,Tags,Gitlab,Gitlab Ci,Gitlab Ci Runner,我想在管道中运行一个特定的作业,我认为为该作业分配一个标记,然后在post方法中再次指定该标记可以满足我的需要。问题是,当我使用api(post)触发时,管道中的所有作业都会被触发,尽管只有一个标记 gitlab-ci.yml: 工作1: 脚本: -回声“helloworld!” 标签:[myTag] 工作2: 脚本: -echo“你好,gitlab!” api调用: curl-X POST-F token=“xxx”-F ref=“myTag”向触发器api调用添加一个变量,如下所示: 然

我想在管道中运行一个特定的作业,我认为为该作业分配一个标记,然后在post方法中再次指定该标记可以满足我的需要。问题是,当我使用api(post)触发时,管道中的所有作业都会被触发,尽管只有一个标记

gitlab-ci.yml:

工作1: 脚本: -回声“helloworld!” 标签:[myTag]

工作2: 脚本: -echo“你好,gitlab!”


api调用:
curl-X POST-F token=“xxx”-F ref=“myTag”

向触发器api调用添加一个变量,如下所示:

然后仅使用
属性
在您的
gitlab.yml
文件中 如图所示:

然后仅当变量存在时,才会执行作业

比如说

job1:
  script: echo "HELLO"
  only:
    variables:
      - $variables[API_CALL]=true

通过使用变量,您可以执行以下操作:

使用此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和


可能是GitLab中的更改导致上述答案无效。

语法触发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"
⚠️ 注意job1中的
except-pipelines
,否则,您将进入无限子管道循环!

非常感谢,但我真正想要的是从api中选择作业(将其作为参数传递)。据我所知,这是不可能的。应该是
only:variables:-api\u CALL==“true”
根据您的gitlab版本,答案几乎是一年前的
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"