29

我的用例是我希望每次构建/运行都有一个唯一的工件版本号。使用当前的工具,如 CircleCI、Travis 等,有一个可用的内部版本号,基本上是一个始终上升的计数器。所以,我可以创建版本字符串,如0.1.0-27. 即使对于相同的提交,每次都会增加此计数器。

如何使用 GitHub Actions 做类似的事情?Github 操作仅提供 GITHUB_SHA 和 GITHUB_REF。

4

4 回答 4

51

GitHub Actions 现在有一个唯一的编号和 ID,用于在github上下文中运行/构建。

github.run_id:在存储库中运行的每个工作流的唯一编号。如果您重新运行工作流运行,此数字不会更改。

github.run_number:存储库中特定工作流每次运行的唯一编号。对于工作流的第一次运行,此数字从 1 开始,并随着每次新运行而递增。如果您重新运行工作流运行,此数字不会更改。

github.run_attempt:在存储库中运行的特定工作流的每次尝试的唯一编号。对于工作流运行的第一次尝试,此数字从 1 开始,并随着每次重新运行而增加。

参考:https ://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context

您可以在这样的工作流程中引用它们:

      - name: Output Run ID
        run: echo ${{ github.run_id }}
      - name: Output Run Number
        run: echo ${{ github.run_number }}
      - name: Output Run Attempt
        run: echo ${{ github.run_attempt }}
于 2020-02-05T00:36:35.150 回答
12

我遇到了同样的问题,刚刚创建了一个操作来生成顺序内部版本号。像这样使用它

- uses: einaregilsson/build-number@v1
  with:
    token: ${{secrets.github_token}}

在之后的步骤中,您将拥有一个BUILD_NUMBER环境变量。在https://github.com/einaregilsson/build-number/上查看有关将相同内部版本号用于不同作业的更多信息以及更多信息

更新:现在$GITHUB_RUN_NUMBERGitHub Actions 中内置了一个变量,因此不再需要这种方法。

于 2019-09-23T15:39:42.073 回答
0

您可以使用 GitVersion 从 Git 中的标签生成递增版本。https://github.com/GitTools/GitVersion/pull/1787的 PR有一些细节,但基本上你可以定义这个工作:

- uses: actions/checkout@v1
    - name: Get Git Version
      uses: docker://gittools/gitversion:5.0.2-beta1-34-linux-debian-9-netcoreapp2.1
      with:
        args: /github/workspace /nofetch /exec /bin/sh /execargs "-c \"echo $GitVersion_MajorMinorPatch > /github/workspace/version.txt\""
于 2019-08-30T00:44:23.400 回答
0

如果您想要一个恒定的整数增量(1,2,3,4,5),我在文档中没有找到任何您可以用作此类增量的内容,它知道该特定操作运行了多少次。我能想到的解决方案有两种:

  1. 在 repo 上维护状态:例如count.build使用使用工作流 ID 的文件,并在构建时增加它。这是两者中我最不喜欢的解决方案,因为它增加了其他复杂性,例如它本身会触发推送事件。您可以将此文件存储在 S3 等其他地方或 Gist 中。

  2. 使用日期:如果您不担心整数增量的顺序,您可以只使用当前数据和时间,例如0.1.0-201903031310今天 13:10。

无论您是否拥有 Actions Beta 访问权限,我都肯定会将其反馈给 GitHub。

希望能帮助到你。

于 2019-03-03T13:11:44.973 回答