在 Github Actions 中生成唯一字符串

Jiv*_*van 5 unique github-actions

env我对 Github Actions 中的作业有以下定义:

jobs:
  build-test-deploy:
    runs-on: ubuntu-latest
    env:
      FOO : foobar-${{ github.sha }}
      BAR : BAZ
Run Code Online (Sandbox Code Playgroud)

但是,github.sha当重新运行相同的工作流程且中间没有任何提交时,结果保持不变。我需要FOO每次运行都是唯一的(即使它在技术上是重新运行),与提交无关。

我正在考虑的两个选择:

  • 要么生成一个随机字符串
  • 或者获取当前的unix时间戳

我不知道如何在指令的上下文中获取这些值env:。有一些操作可以在其中使用steps,但是如何才能直接从env指令中获取这种唯一值呢?

Pos*_*don 13

现在有一个github.run_attempt变量(不确定从什么时候开始)在重新运行时会递增。因此,通过将其与eg 相结合,github.run_id您可以生成每次运行完全唯一的字符串。

jobs:
  build-test-deploy:
    runs-on: ubuntu-latest
    env:
      FOO : foobar-${{ github.run_id }}-${{ github.run_attempt }}
      BAR : BAZ
Run Code Online (Sandbox Code Playgroud)

确保在中间放置一个分隔符(-在上面的示例中),否则可能会出现重复项。如果没有它,例如123可能由两者run 12 attempt 3或产生run 1 attempt 23

快速链接到相关文档以供进一步阅读。


Jiv*_*van 4

jobs:
  build-test-deploy:
    runs-on: ubuntu-latest
    env:
      BAR : BAZ

    steps:
      - name: generate FOO unique variable based on timestamp
        run: echo FOO=foobar--$(date +%s) >> $GITHUB_ENV

      - name: other step that needs FOO
        run: echo ${{ env.FOO }}
Run Code Online (Sandbox Code Playgroud)