Эй, это убивает меня уже пару дней, я чувствую, что мне не хватает незначительного синтаксиса.
Я хочу отправить слабое сообщение со статусом тестирования из конвейера gitlab. Я использую stage:allure, чтобы перенести эти значения в файл env в качестве артефакта. Другой этап: send-slack-message, чтобы использовать значения для отправки Slack-сообщения.
allure:
stage: allure
tags:
- testrunner
needs:
- combine-results #this is a previous stage
image:
name: mycomp.io/test-allure:latest
pull_policy: always
before_script:
- apk update
- apk add jq
- apk add curl
- apk upgrade
script:
- TESTS_PASSED=$(curl --header PRIVATE-TOKEN:" "ab $PIPELINE_URL | jq .total.success)
- TESTS_FAILED=$(curl --header PRIVATE-TOKEN:" "ab $PIPELINE_URL | jq .total.failed)
- echo "TESTS_PASSED=$TESTS_PASSED" >> test_stats.env
- echo "TESTS_FAILED=$TESTS_FAILED" >> test_stats.env
- python /allure_report.py
artifacts:
paths:
- test_stats.env
После завершения этого задания я могу просмотреть файл env как артефакт, и он имеет следующие значения:
TESTS_PASSED=15
ТЕСТС_FAILED=1
ПРИМЕЧАНИЕ. Пробелов нет, они, кажется, находятся на следующей строке для каждого значения.
Моя проблема заключается в следующем задании по отправке слабого сообщения с использованием приведенной ниже пользовательской переменной:
send-slack-message:
extends:
- .slack-send-message-custom
stage: alert-slack
when: on_success
needs:
- job: allure
artifacts: true
tags:
- testrunner
before_script:
- source test_stats.env # Load environment variables
- echo "Tests passed count-" $TESTS_PASSED #this value is printed as 15 in console
variables:
CUSTOM_INPUT: ":gitlab:\n
- Tests Branch: `$CI_COMMIT_REF_NAME` \n
- *App*: $values__app__tag \n
- *Applite*: $values__applite__image__tag \n
- *Url*: <$CI_PIPELINE_URL|*here*> \n
- *Passed Tests*: '${TESTS_PASSED}'\n
- *Failed Tests*: ${TESTS_FAILED}\n
- *Results URL*: <$CI_PIPELINE_URL/test_report|*here*> \n "
Итак, все работает, слабина — это сообщение, указанное в переменной, за исключением переменных «TESTS_PASSED» и «TESTS_FAILED», которые отправляются из предыдущего задания. Они отправляются в сообщении как пустые значения. Как это исправить?
$values__app__tag эта переменная отправляется как часть конвейера.
Любое руководство высоко ценится.
Проблема в том, что раздел переменных оценивается до запуска before_script. Before_script правильно устанавливает переменные TESTS_PASSED и TESTS_FAILED, как видно из оператора echo. Однако сначала оценивается раздел переменных.
Чтобы обойти это, вы можете установить переменную CUSTOM_INPUT в файле before_script, например;
send-slack-message:
before_script:
- |
source test_stats.env
export CUSTOM_INPUT = ":gitlab:\n
- Tests Branch: `$CI_COMMIT_REF_NAME` \n
- *App*: $values__app__tag \n
- *Applite*: $values__applite__image__tag \n
- *Url*: <$CI_PIPELINE_URL|*here*> \n
- *Passed Tests*: '${TESTS_PASSED}'\n
- *Failed Tests*: ${TESTS_FAILED}\n
- *Results URL*: <$CI_PIPELINE_URL/test_report|*here*> \n "
Если вы добавите echo $CUSTOM_INPUT
в скрипт в .slack-send-message-custom
, вы увидите, что CUSTOM_INPUT установлен.
Мне это помогло, спасибо @ievinm