需要成功,项目A才能使用.gitlab-ci.yml在多项目gitlab管道中等待项目B完成

时间:2019-05-15 07:15:59

标签: git gitlab gitlab-ci gitlab-ce

我有2个项目Project A和Project B,现在我希望在Project A的某个阶段中,GitLab CI管道应在项目B中触发GitLab CI管道,然后等待 项目B的管道完成,然后最终,项目A的GitLab CI管道将基于项目B的成功执行而成功完成 GitLab CI管道

在我的公司中,我拥有gitlab社区版本11.8.0,因此我正面临以下挑战 使用网桥作业触发下游管道,然后等待项目B完成多项目gitlab管道。 使用url-creating-multi-project-pipelines-from-gitlab-ciyml中提到的Trigger和project关键字,Gitlab premium可以轻松解决上述要求。

我在下面做了2个选择

选项1)

好吧,我认为Pipeline-Trigger会有所帮助,它可以在GitLab CI管道中提供docker映像。

我创建了具有完全API访问权限的private_token using ,然后在其中使用了private_token 下面提到的CI_JOB_TOKEN具有项目令牌,如下所述,下面是项目A的Yaml文件

    image: katalonstudio/katalon
    services:
    - docker:dind


    variables:
     PRE_RENDER_ALL: 'false'
      APP_PROJECT_ID: 274
      GIT_SSL_NO_VERIFY: "true"
      API_TOKEN: $PERSONAL_ACCESS_TOKEN
      TARGET_BRANCH: master

    stages:
      - trigger


    trigger:
     stage: trigger
     image: registry.gitlab.com/finestructure/pipeline-trigger
     tags:
       - docker
     script:
       - trigger -p "$CI_JOB_TOKEN" -t master --on-manual pass 274

我在项目A的Gitlab CI管道上遇到的错误是

       $ trigger -p "$CI_JOB_TOKEN" -t master --on-manual pass 274
       Triggering pipeline for ref 'master' for project id 274
       Traceback (most recent call last):
       File "/usr/bin/trigger", line 299, in <module>
       trigger(sys.argv[1:])
       File "/usr/bin/trigger", line 217, in trigger
       pid = create_pipeline(project_url, pipeline_token, ref, variables)
       File "/usr/bin/trigger", line 87, in create_pipeline
       assert r.status_code == 201, f'Failed to create pipeline, api returned 
       status code {r.status_code}'
       AssertionError: Failed to create pipeline, api returned status code 404
       ERROR: Job failed: exit code 1

这是项目B的Yaml文件

     image: katalonstudio/katalon
     services:
     -  docker:dind

     stages:
     - test


     test_job:
     stage: test
     tags:
      - docker
     script:
       - katalon-execute.sh -browserType="Chrome" -retry=0 -statusDelay=15 -testSuitePath="Test Suites/LightRegression"
     artifacts:
      name: "$CI_COMMIT_REF_NAME"
       paths:
       - report/
     reports:
       junit:
       - 'report/*.xml'

选项2)      这很好用,但是有一个局限性,尽管项目A的GitLab CI管道触发了项目B中的GitLab CI管道,但是      它只是将控制权传递给项目B和项目A,直到成功完成,并在管道中显示绿色勾号,这不是      我的要求

 image: katalonstudio/katalon
 services:
  - docker:dind


 variables:
   PRE_RENDER_ALL: 'false'
   APP_PROJECT_ID: 274
   GIT_SSL_NO_VERIFY: "true"
   API_TOKEN: $PERSONAL_ACCESS_TOKEN
   TARGET_BRANCH: master

 stages:
  - trigger



 trigger:
  stage: trigger
  tags:
   - docker
  script:
   - curl -k --request POST --form token="$CI_JOB_TOKEN" --form ref=master https://git.abc.hasro.com/api/v4/projects/$APP_PROJECT_ID/trigger/pipeline

由于我有两个项目A和项目B,所以我在项目A的某个阶段的所有GitLab CI管道都需要触发项目B中的GitLab CI管道,然后等待项目B的管道完成,然后最终项目A的GitLab CI管道将基于项目B的GitLab CI管道的成功执行而成功完成

0 个答案:

没有答案