Gitlab CI - 在变量中使用变量

问题描述 投票:0回答:1

嘿,这几天一直困扰着我,我觉得我错过了一个小语法。

我想从 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 该变量作为管道的一部分发送。

非常感谢任何指导。

environment-variables gitlab-ci gitlab-api
1个回答
0
投票

问题是变量部分在 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 已设置。

© www.soinside.com 2019 - 2024. All rights reserved.