嘿,这几天一直困扰着我,我觉得我错过了一个小语法。
我想从 gitlab 管道发送一条包含测试状态的 slack 消息。我正在使用 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 文件视为工件,它具有以下值:
测试通过=15
测试失败=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 语句可以看出。然而,首先评估变量部分。
为了解决这个问题,您可以在 before_script 中设置 CUSTOM_INPUT 变量,例如;
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 已设置。