t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как переприсвоить значение переменных в gitlab-ci

Теги: #<Tag:0x00007fd77146cb98> #<Tag:0x00007fd77146cad0> #<Tag:0x00007fd77146c8a0>

Здравствуйте.
Никак не могу разобраться как переприсвоить значение переменной в ходе выполнения джобы.
Мне нужно отправить инфу о прогоне в мессенджер.
Устанавливаю изначально переменную EXIT_CODE=1
Если джоба дошла до конца и вернула 0, то переменную надо переприсвоить в 0 и выполнить скрипт отправки. Если джоба упала, то ничего не переприсваиваем и передаем в скрипт отправки установленную переменную=1 по умолчанию.
Проблема в том, что как я только не пробовал переприсвоить значение переменной у меня ничего не выходит. Переменная хранит установленное значение по умолчанию. Читал доки, но что-то не найду нужного мне варианта.

image: python:3.7

stages:
  - test
    
test:
  stage: test

  variables:
    EXIT_CODE: "1"

  before_script:
    - echo "Install environment"
    ...
    
  script:
    - echo "Run all tests"
    - echo $EXIT_CODE
    - py.test -s -v tests/api/test_other.py::TestsOther::test_bad
    - EXIT_CODE=$?

  after_script:
    - echo "Send report to chat"
    - echo $EXIT_CODE
    - python3 ./scripts/send_tests_report.py $CI_JOB_ID $EXIT_CODE

  artifacts:
    when: always
    paths:
      - $CI_PROJECT_DIR/report.html
    expire_in: 1 month

Такие пляски из-за того, что если джоба упадет, то эта часть EXIT_CODE=$? уже не выполняется. Поэтому ищу вариант с переприсваиванием переменной. Т.е. если pytest вернул код 1, то джоба валится. Получить код ответа от pytest я могу если все тесты прошли, иначе джоба валится.

З when: on_failure (https://docs.gitlab.com/ee/ci/yaml/#when) можна буде обійтись без змінних - окрема джоба яка відсилатиме результати тільки в випадку якщо попередня джоба (з тестами) впала.

В доке вычитал, что after_script не видит переменные из before_script и script. Метод описанный в доке мне тоже не помог, почему-то он не перехватывает код ответа при запуске pytest.

job:
  script:
    - false && true; exit_code=$?
    - if [ $exit_code -ne 0 ]; then echo "Previous command failed"; fi;

Сделал через переменную, которую сохранял в файл.

  script:
    - echo "1" > exit_code.txt
    
  after_script:
    - EXIT_CODE=$(cat exit_code.txt)