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

How to version build artifacts using GitHub Actions?

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

如何使用 GitHub 操作执行类似的操作? Github 行动仅提供 GITHUB_SHA 和 GITHUB_REF。

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

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

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

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

希望对您有所帮助。

您可以使用 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\""

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

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

在此之后的步骤中,您将拥有一个 BUILD_NUMBER 环境变量。在 https://github.com/einaregilsson/build-number/

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

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

GitHub Actions 现在在 github 上下文中具有 run/build 的唯一编号和 ID。

github.run_id : A unique number for each workflow run within a repository. This number does not change if you re-run the workflow run.

github.run_number : A unique number for each run of a particular workflow in a repository. This number begins at 1 for the workflow's first run, and increments with each new run. This number does not change if you re-run the workflow run.

github.run_attempt : A unique number for each attempt of a particular workflow run in a repository. This number begins at 1 for the workflow run's first attempt, and increments with each re-run.

参考: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 }}