无法解释 Github actions 临时变量

Github actions temporary variable cant be interpreted

提问人:Flaximoman 提问时间:8/31/2022 更新时间:3/31/2023 访问量:460

问:

在我的 Github 操作中,我使用一个临时变量作为时间戳,并希望在 webhook 中发送此变量,但 github 无法解释字符串中的$var。有人可以帮我吗?

代码如下所示:

- name: Posting Rocketchat
    if: failure()
    run: |
        TS=$(date +%Y%m%d%H%M%S)
        curl -X POST -H 'Content-Type: application/json' --data '{"text":"❌ Test: Leads Testing Desktop 💻","image_url":"https://myurl.net/$TS-1.png"}' https://chat.myurl.com/hooks/yxyxyxxyxyxyx/xxxxxyxyxyxyxyxyxy
变量 github-actions 临时

评论


答:

0赞 Hamza AZIZ 8/31/2022 #1

请改用

- name: Posting Rocketchat
    if: failure()
    run: |
        echo "TS=$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV
        curl -X POST -H 'Content-Type: application/json' --data '{"text":"❌ Test: Leads Testing Desktop 💻","image_url":"https://myurl.net/${{ env.TS }}-1.png"}' https://chat.myurl.com/hooks/yxyxyxxyxyxyx/xxxxxyxyxyxyxyxyxy

评论

0赞 Flaximoman 8/31/2022
好的,谢谢。但是,我想知道:当我在自己身上尝试时,它没有用。为什么我没有得到 TIMESTAMP 输出?这是我的例子: echo “TIMESTAMP=$(date +%Y%m%d%H%M%S)” >> $GITHUB_ENV echo ${{env.时间戳}}
0赞 Hamza AZIZ 8/31/2022
如果这解决了您的问题,请接受答案,因为它可以帮助其他人,要回答 yr 问题,我们需要查看代码
0赞 NotoriousPyro 3/31/2023
不能使用在同一步骤中重定向到的变量。只有后续步骤才能访问您保存的变量,这是因为仅在步骤开始时计算,而不是在同一步骤的运行期间计算。因此,这个答案是不正确的,不会起作用。您需要拆分为另一个单独的步骤:docs.github.com/en/actions/using-workflows/...$GITHUB_ENV$GITHUB_ENVcurl
0赞 NotoriousPyro 3/31/2023 #2

如果要在同一步骤中访问输出,则可以使用管道 using 和 但是对于 curl,这可能很难使用,您可能需要对数据字符串使用双引号并转义其余部分,例如:|/dev/stdin

- name: Posting Rocketchat
    if: failure()
    run: |
         date +%Y%m%d%H%M%S | curl -X POST -H 'Content-Type: application/json' --data "{\"text\":\" ❌ Test: Leads Testing Desktop 💻\",\"image_url\":\"http://myurl.net/$(</dev/stdin)-1.png\"}" http://chat.myurl.com/hooks/yxyxyxxyxyxyx/xxxxxyxyxyxyxyxyxy

或者,您可以将命令作为子 shell 包含在内,在这种情况下,这可能是最佳选择:

- name: Posting Rocketchat
    if: failure()
    run: |
         curl -X POST -H 'Content-Type: application/json' --data "{\"text\":\"❌ Test: Leads Testing Desktop 💻\",\"image_url\":\"http://myurl.net/$(date +%Y%m%d%H%M%S)-1.png\"}" http://chat.myurl.com/hooks/yxyxyxxyxyxyx/xxxxxyxyxyxyxyxyxy

如果要保存变量,则需要将其重定向到 ,但只有后面的步骤才能访问它,而不是创建它的步骤。这是因为 的内容仅在步骤开始时计算,而不是在步骤期间计算: https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable$GITHUB_ENV$GITHUB_ENV

- name: Get the time
    run: |
         echo "the_time=$(date +%Y%m%d%H%M%S)" >> $GITHUB_ENV
- name: Posting Rocketchat
    if: failure()
    run: |
         curl -X POST -H 'Content-Type: application/json' --data "{\"text\":\"❌ Test: Leads Testing Desktop 💻\",\"image_url\":\"http://myurl.net/${{ env.the_time }}-1.png\"}" http://chat.myurl.com/hooks/yxyxyxxyxyxyx/xxxxxyxyxyxyxyxyxy