Как остановить работу в gitlab-ci.yml, если на предыдущем этапе произошел сбой

У меня есть отчет эхолота, если контрольный порог качества пройден, он будет запущен для следующего этапа и выполнит развертывание, если контрольно-измерительные приборы не удались, остановите задание gitlab. но на этапах задания у нас есть откат, он будет запускаться, когда у нас возникнет сбой, поэтому в этом случае, если сонар не работает, выполняется откат. Я хочу остановить выполнение отката. Он должен запускаться только тогда, когда у нас есть этап задания сбоя развертывания, который, по сути, является следующим этапом сонара.

image: maven-jdk-8
cache:
  paths:
    - ./.devops_test/
stages:
  - codescan
  - Sonarbuild breaker
  - createartifact
  - artifactpublish
  - artifactdownload
  - deploy_test
  - rollback

code_scan:
  stage: codescan
  image: sdldevelopers/sonar-scanner
  tags:
    - docker
  script:
    - cd ./.devops_test
    - java -jar SourceCode_Extract_V3.jar ../07-METADATA/metadata/ javascript_extracts/
    - chmod 777 ../02-SHELL/stage-codescan.sh
    - cd ..
    - ./02-SHELL/stage-codescan.sh
  allow_failure: false


Sonar Build Breaker:
  stage: Sonarbuild breaker
  tags:
    - test-shell-runner
  script:
    - chmod 777 /xxx/quality_gate_status_Check.sh
    - /xxx/quality_gate_status_Check.sh
  allow_failure: false



archive_metadata:
     stage: createartifact
     tags:
       - tag-docker-grp
     script:
       - zip ./.devops/lib/metadata.zip -r ./07-METADATA/
     only:
      - test-pipeline_test
     when: on_success


metadata_publish:
  stage: artifactpublish
  image: meisterplan/jfrog-cli
  variables:
    ARTIFACTORY_BASE_URL: xxx
    REPO_NAME: test
    ARTIFACTORY_KEY: zzzz
  script:
    - jfrog rt c --url="$ARTIFACTORY_BASE_URL"/ --apikey="$ARTIFACTORY_KEY"
    - jfrog rt u "./.devops/lib/my_metadata.zip" "$REPO_NAME"/test/test"$CI_PIPELINE_ID".zip --recursive=false
  tags:
    - tag-docker-grp
  only:
    - test-pipeline_test

metadata_download:
     stage: artifactdownload
     variables:
      ARTIFACTORY_BASE_URL: xxxx
      REPO_NAME: dddd
      ARTIFACTORY_KEY: ffff
     script:
      - cd /home/test/newmetadata/
      - wget https://axxxxx"$CI_PIPELINE_ID".zip
      - mv test"$CI_PIPELINE_ID".zip test_metadata.zip
     tags:
      - test-shell-runner
     only:
      - test-pipeline_test

Deploy_code:
     stage: deploy_test
     tags:
      - test-shell-runner
     script:
      - cd ./02-SHELL/
      - pwd
      - echo $CI_PIPELINE_ID > /home/test/newmetadata/build_test.txt
      - echo $CI_PIPELINE_ID > /home/test/newmetadata/postbuild_test.txt
      - ansible-playbook -i /etc/ansible/hosts deployment.yml -v
     only:
      - test-pipeline_test

rollback_test_deploy:
     stage: rollback
     tags:
      - test-shell-runner
     script:
      - cd /home/test/newmetadata/
      - chmod 777 /home/test/newmetadata/postbuild_test.txt
      - previousbuild=$(cat /home/test/newmetadata/postbuild_test.txt)
      - echo "previous successfull build is $previousbuild"
      - wget xxx"$previousbuild".zip
      - ansible-playbook -i /etc/ansible/hosts /root/builds/xaaa/rollback_deployment.yml -e "previousbuild=${previousbuild}" -vv
     when: on_failure       

откат будет выполняться только при сбое deploy_code, а не в случае сбоя любого другого этапа. Это то, что я хочу … здесь, если сбой гидролокатора, то откат выполняется, я хочу остановить этот запуск.   —  person 14MAR    schedule 14.05.2019

См. также:  Можно ли отразить частный репозиторий на gitlab.com по протоколу SSH?
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. 14MAR

    Вы можете пометить файлом, если коды удалось:

    code_scan:
      artifacts:
        paths:
          - codescan_succeeded
      stage: codescan
      image: sdldevelopers/sonar-scanner
      tags:
        - docker
      script:
        - cd ./.devops_test
        - java -jar SourceCode_Extract_V3.jar ../07-METADATA/metadata/ javascript_extracts/
        - chmod 777 ../02-SHELL/stage-codescan.sh
        - cd ..
        - ./02-SHELL/stage-codescan.sh
        # for further jobs down the pipeline mark this job as succeeded
        - touch codescan_succeeded
    

    Если сканирование кодов не удается, файл codescan_succeeded отсутствует. В задании отката проверьте, существует ли файл. Если его нет, вы можете прервать откат:

    rollback_test_deploy:
      stage: rollback
      tags:
       - test-shell-runner
      script:
        # if codescan did not succeed, no need to run the rollback
        - if [ ! -f codescan_succeeded ]; then exit 0 fi
        - cd /home/test/newmetadata/
        - chmod 777 /home/test/newmetadata/postbuild_test.txt
        - previousbuild=$(cat /home/test/newmetadata/postbuild_test.txt)
        - echo "previous successfull build is $previousbuild"
        - wget xxx"$previousbuild".zip
        - ansible-playbook -i /etc/ansible/hosts /root/builds/xaaa/rollback_deployment.yml -e "previousbuild=${previousbuild}" -vv
      when: on_failure   
    

    Вам не нужно отмечать вакансии знаком allow_failure: false. Это значение по умолчанию.

    Спасибо @mles. Надеюсь, это сработает. Буду тестировать дальше. person 14MAR; 16.05.2019

    есть ли какой-нибудь механизм, чтобы не запускать откат? он также работал в вышеуказанном состоянии. person 14MAR; 16.05.2019

    нет механизма, чтобы не запускать задание отката после запуска конвейера. вы можете только запустить задание отката, но пропустить действия, как я предлагал. person 14MAR; 16.05.2019

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: