如何使用 GitHub Actions 对构建工件进行版本控制?

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

我的用例是我希望每次构建/运行的工件都有一个唯一的版本号。使用当前的工具,如 CircleCI、Travis 等,有一个可用的内部版本号,它基本上是一个始终上升的计数器。所以,我可以创建像

0.1.0-27
这样的版本字符串。即使是同一次提交,这个计数器也会每次增加。

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

github automation versioning continuous-delivery github-actions
5个回答
95
投票

GitHub 操作现在在

github
上下文中有一个运行/构建的唯一编号和 ID。

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 }}

14
投票

我遇到了同样的问题,并且刚刚创建了一个动作来生成连续的内部版本号。像这样使用

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

在此之后的步骤中,您将拥有一个

BUILD_NUMBER
环境变量。在 https://github.com/einaregilsson/build-number/

上查看有关为不同作业使用相同内部版本号等的更多信息

更新:现在 GitHub Actions 中内置了一个

$GITHUB_RUN_NUMBER
变量,因此不再需要这种方法了。


1
投票

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

  1. 维护 repo 上的状态:例如,使用一个使用工作流 ID 的

    count.build
    文件,并在构建时递增它。这是我最不喜欢的两个解决方案,因为它增加了其他复杂性,比如它本身会触发推送事件。您可以将此文件存储在其他地方,例如 S3 或 Gist 中。

  2. 使用日期:如果您不担心整数增量的顺序,您可以只使用当前数据和时间,例如

    0.1.0-201903031310
    表示今天 13:10。

不管你是否有 Actions Beta Access,我肯定会把它反馈给 GitHub。

希望有帮助。


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\""

0
投票

您还可以使用 GitHub Actions API 将变量设置为您需要的值 https://docs.github.com/en/rest/actions/variables?apiVersion=2022-11-28

例如

  curl --location --request PATCH 'https://api.github.com/repos/my_org/ios_app/actions/variables/BUILD_INCREMENT' \
--header 'Accept: application/vnd.github+json' \
--header 'Authorization: Bearer ghp_Fd6N34L9sometoken' \
--header 'Content-Type: text/plain' \
--header 'X-GitHub-Api-Version: 2022-11-28' \
--data '{"name":"BUILD_INCREMENT","value":"1111"}'
© www.soinside.com 2019 - 2024. All rights reserved.