Search code examples
gitlabgitlab-cigitlab-ci-runner

How run a particular stage in GitLab after the execution of child pipelines'?


I'm using GitLab and the CI config has got following stages:-

stages:
  - test
  - child_pipeline1
  - child_pipeline2
  - promote-test-reports

At any time, only one of the child pipeline will run i.e. either child_pipeline1 or child_pipeline2 after the test stage and not both at a time. Now, I have added another stage called promote-test-reports which I would like to run in the end i.e. after the successful execution of any of child pipeline.

But I'm completely blocked here. This promote-test-reports is coming from a template which I have included in this main CI config file like:-

# Include the template file
include:
 - project: arcesium/internal/vteams/commons/commons-helper
   ref: promote-child-artifacts
   file: 'templates/promote-child-artifacts.yml'

I'm overriding the GitLab project token in this same main file like below:-

test:
  stage: promote-test-reports
  trigger:
    include: adapter/child_pipelin1.yml
    strategy: depend
  variables:
    GITLAB_PRIVATE_TOKEN: $GITLAB_TOKEN

If you see the above stage definition in main CI config file, I'm trying to use strategy: depend to wait for successful execution of child_pipeline1 and then run this stage but it throwing error (jobs:test config contains unknown keys: trigger)and this approach is not working reason is I'm using scripts in the main definition of this stage (promote-test-reports) in the template and as per the documentation both scripts and strategy cannot go together.

Following is the definition of this stage in the template:-

test:
  stage: promote-test-reports
  image: "495283289134.dkr.ecr.us-east-1.amazonaws.com/core/my-linux:centos7"
  before_script:
     - "yum install unzip -y"
  variables:
    GITLAB_PRIVATE_TOKEN: $GITLAB_TOKEN
  allow_failure: true
  script:
  - 'cd $CI_PROJECT_DIR'
  - 'echo running'
  when: always
  rules:
    - if: $CI_PIPELINE_SOURCE == 'web'
  artifacts:
    reports:
      junit: "**/testresult.xml"
      coverage_report:
        coverage_format: cobertura
        path: "**/**/coverage.xml"
  coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'

The idea of using strategy attribute failed. I cannot remove the logic of scripts in the template as well. May I know what is the alternate way of running my job(promote-test-reports) in the end and remember it is going to be an OR condition that run either after child_pipeline1 or child_pipeline2

I would really appreciate your help


Solution

  • Finally, I was able to do it by putting the strategy: depend on child pipelines. I was doing it incorrectly earlier by doing on stage, promote-test-reports