Reputation: 274
I want to run a specific job in a pipeline. I thought assigning a tag for the job and then specifying this tag again in the post method will fulfill my needs. The problem is when I trigger using the api(post), all the jobs in the pipeline are triggered even though only one of this tagged.
gitlab-ci.yml
:
job1:
script:
- echo "helloworld!"
tags : [myTag]
job2:
script:
- echo "hello gitlab!"
the api call :
curl -X POST -F token="xxx" -F ref="myTag" https://gitlab.com/api/v4/projects/12345678/trigger/pipeline
Upvotes: 19
Views: 39773
Reputation: 417
Probably changes in GitLab makes answers above not working. The
only:
variables:
- $variables[....]
syntax trigger CI Lint.
For others that come here like me, here's how I trigger a specific job:
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
in job1, else, you go in infinite Child pipeline loop!Upvotes: 14
Reputation: 314
By using variables you can do:
Use this curl command to trigger the pipeline with a variable
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"
Ofcourse you have to set the variable accordingly.
Define your jobs with the appropriate variable:
job1:
script: echo "HELLO for job1"
only:
variables:
- $variables[TRIGERRED_JOB] == "JOB1"
job2:
script: echo "HELLO for job2"
only:
variables:
- $variables[TRIGERRED_JOB] == "JOB2"
if you are running the curl from inside another/same job you can use ${CI_JOB_TOKEN} instead of $TOKEN and
https://docs.gitlab.com/ee/ci/triggers/#making-use-of-trigger-variables
Upvotes: 7
Reputation: 5707
add a variable to your trigger api call as shown here:
https://docs.gitlab.com/ee/ci/triggers/#making-use-of-trigger-variables
then use the only
prperty
inside your gitlab.yml
file
as shown here :
https://docs.gitlab.com/ee/ci/variables/#environment-variables-expressions
then only if the variable exists the job will be execute
for example
job1:
script: echo "HELLO"
only:
variables:
- $variables[API_CALL]=true
Upvotes: 15