Раздел.gitlab-ci.yml after_script: как я могу определить, успешно ли выполнена задача?

Я использую Gitlab CI, и поэтому работаю над довольно сложным .gitlab-ci.yml файл. Файл имеет after_script секция, которая запускается, когда основная задача выполнена или основная задача как-то не выполнена. Проблема: мне нужно выполнить другую очистку в зависимости от того, была ли основная задача выполнена успешно или нет, но я не могу найти переменную CI Gitlab, которая указывает результат основной задачи.

Как я могу сказать, внутри after_script раздел, была ли основная задача выполнена или не выполнена?

4 ответа

Решение

Вместо того, чтобы определить, была ли задача выполнена успешно или нет в after_scriptЯ бы предложил определить другой этап и использовать синтаксис when, где вы можете использовать when: on_failure или же when: on_success,


Пример из документации:

stages:
- build
- cleanup_build
- test
- deploy
- cleanup

build_job:
  stage: build
  script:
  - make build

cleanup_build_job:
  stage: cleanup_build
  script:
  - cleanup build when failed
  when: on_failure

test_job:
  stage: test
  script:
  - make test

deploy_job:
  stage: deploy
  script:
  - make deploy
  when: manual

cleanup_job:
  stage: cleanup
  script:
  - cleanup after jobs
  when: always

Начиная с gitlab-runner 13.5, вы можете использовать CI_JOB_STATUSпеременная.

      test_job:
  # ...
  after_script:
    - >
      if [ $CI_JOB_STATUS == 'success' ]; then
        echo 'This will only run on success'
      else
        echo 'This will only run when job failed or is cancelled'
      fi

См. документацию GitLab по предопределенным_переменным: https://docs.gitlab.com/ee/ci/variables/predefined_variables.html .

Принятый ответ может относиться к большинству ситуаций, но он не отвечает на первоначальный вопрос и будет работать, только если у вас есть только одна работа на этап.

Примечание. Там в настоящее время открыт запрос функции ( эмитентов / 3116) для обработки. on_failure а также on_success в after_script,

Можно было бы использовать переменные для передачи статуса задания after_script сценария, но здесь также открыт запрос функции ( Issues / 1926), чтобы иметь возможность обмениваться переменными между before_script, script а также after_script,

Одним из обходных путей будет запись во временный файл, который будет доступен во время after_script блок.

test_job:
  stage: test
  before_script:
    - echo "FAIL" > .job_status
  script:
    - exit 1
    - echo "SUCCESS" > .job_status
  after_script:
    - echo "$(cat .job_status)"

Просто еще один способ справиться с этим, если вы хотите настроитьif failureповедение.

      scripts:
  - ./script_that_fails.sh > /dev/null 2>&1 || FAILED=true
  - if [ $FAILED ]
    then ./do_something.sh
    fi

Примечание. У меня сработали и другие примеры, но я считаю эту реализацию более быстрой и подходящей для меня.

Другие вопросы по тегам