zeerk
zeerk

Reputation: 144

GitLab manual job triggered by schedule

I have a little problem with my GitLab pipeline.
I would like to run a manual job with scheduled rule or find a way to run a scheduled pipe with my jobs without rewrite the pipe.

As you see in the example I have 2 firstjob tagged job. One is manually and one is scheduled. My problem that if I run the scheduled workflow, the AC-test won't start and if I try to run the FirstJob by scheduled rule, it won't start because of when: manual section.

Here is my example:

stages:
    - firstjob
    - test
    - build
    - deploy

FirstJob:
    stage: firstjob
    script:
        - echo "Hello Peoples!"
        - sleep 1
    when: manual
    allow_failure: false

FirstJobSchedule:
    stage: firstjob
    script:
        - echo "Hello Scheduled Peoples!"
        - sleep 1
    only: 
        - schedule
    allow_failure: false

AC-test:
    needs: [FirstJob]
    stage: test
    script:
        - echo "AC Test is running"
        - sleep 10

ProdJobBuild:
    stage: build
    needs: [AC-test]
    script:
        - echo "Building thing to prod"

ProdJobDeploy:
    stage: deploy
    needs: [ProdJobBuild]
    script:
        - echo "Deploying thing to prod"


Is there a possibility to solve this problem somehow?
Did somebody ever suffer from this problem?

Upvotes: 4

Views: 6301

Answers (1)

Denis Pisarev
Denis Pisarev

Reputation: 584

There's a way to do that with only:, but I'd suggest moving to rules: as only: is going to be deprecated. So you will not need two jobs with different conditions, you can do a branching condition:

stages:
  - firstjob
  - test
  - build
  - deploy

workflow:
  rules:
    - if: $CI_MERGE_REQUEST_IID
    - if: $CI_COMMIT_TAG
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

FirstJob:
  stage: firstjob
  script:
    - echo "Hello Peoples!"
    - sleep 1
  rules:
    - if: $CI_PIPELINE_SOURCE == "schedule"
      # when: always # is a default value
    - when: manual
  # allow_failure: false # is a default value
    
AC-test:
  needs: [FirstJob]
  stage: test
  script:
    - echo "AC Test is running"
    - sleep 10
    
ProdJobBuild:
    stage: build
    needs: [AC-test]
    script:
      - echo "Building thing to prod"

With it, the pipeline checks if the job is called by a schedule, and runs. And if not, stays manual.

*I took the freedom to pick the MR-style of workflow to avoid the double pipelines.

Upvotes: 11

Related Questions