Gitlab CI / CD:有条件地从上游管道运行下游多级管道

时间:2020-11-05 13:51:41

标签: continuous-integration devops gitlab-ci continuous-deployment multistage-pipeline

我仅在上游管道中的工件不可用时才尝试触发下游管道。我正在使用Gitlab CE v13.5.1。

想法是:

  1. 预构建阶段:从联系处卷曲并检查工件是否 可用。如果是,请不要运行下游触发器,否则请运行 它。

    • 要实现此目的,当curl失败时,我将创建一个虚拟的exist.txt文件,然后在以后的阶段中以existed条件使用该文件。
  2. 仅在存在exist.txt时运行触发器。但是, 问题是触发器始终在运行,无论是否存在。txt是否存在 。可以这么说,触发阶段的存在条件无法正常工作。

以下是gitlab-ci文件:

image: ${NEXUS_REPO_DOCKER_URL}/<<image>>

  variables:
    CUSTOMER_NAME: "ABC"
    CONFIG_VERSION: "1.2.7"
    PICKER_TEMPLATE_TAG: "6.9.15"

  stages:
    - prebuild
    - trigger
    - build
    - release

  checkArtifactAvailability:
     stage: prebuild
     only:
      - master
     tags:
      - docker
      -  lxc
    script:
      - set +e
      - curl -s -S -f $NEXUS_RAW_PICKER_REPOSITORY/${PRODUCT_FLAVOR}/${PRODUCT_FLAVOR}-${BUILD_TYPE}v${PICKER_TEMPLATE_TAG}.apk --output ${PRODUCT_FLAVOR}-${BUILD_TYPE}v${PICKER_TEMPLATE_TAG}.apk
      - "if [ '$?' -gt '0' ]; then touch exists.txt; fi"
      -set -e
    artifacts:
      expire_in: 1 hour
      paths:
       - ${PRODUCT_FLAVOR}-${BUILD_TYPE}v${PICKER_TEMPLATE_TAG}.apk
       - exists.txt

  createApk:
    stage: trigger
    rules:
      - exists:
          - exists.txt
    trigger:
      project: dev/<<project_name>>
      strategy: depend
    when: on_failure
  
  buildZip:
    stage: build
    tags:
      - docker
      - lxc
    rules:
      - exists:
          - exists.txt
    script:
        - curl -s -S -f $NEXUS_RAW_PICKER_REPOSITORY/${PRODUCT_FLAVOR}/${PRODUCT_FLAVOR}-${BUILD_TYPE}v${PICKER_TEMPLATE_TAG}.apk --output ${PRODUCT_FLAVOR}-${BUILD_TYPE}v${PICKER_TEMPLATE_TAG}.apk
        - zip -r v${CONFIG_VERSION}.zip <<files>> ${PRODUCT_FLAVOR}-${BUILD_TYPE}v${PICKER_TEMPLATE_TAG}.apk
    artifacts:
      expire_in: 1 hour
      paths:
          - v${CONFIG_VERSION}.zip

  releaseToNexus:
    stage: release
    tags:
        - docker
        - lxc
    rules:
      - exists:
          - exists.txt
    needs:
     - job: buildZip
       artifacts: true
    script:
        - curl -u $NEXUS_USER:$NEXUS_PASSWORD --upload-file ./v${CONFIG_VERSION}.zip $NEXUS_RAW_QA_REPOSITORY/Picker/${CUSTOMER_NAME}/

0 个答案:

没有答案