如何在本地运行 GitHub Actions 工作流?

我计划将我们的 Travis CI 构建转移到 GitHub Actions,使用 Docker 进行每次提交测试。

我可以在本地重复运行这些新的 GitHub Actions 工作流吗?是否有一种在本地运行任何 GitHub Actions 工作流的通用方法?

101812 次浏览

有一些工具,比如上面提到的 act,但是它们并不完美。 面对这个问题的并非只有你一个人,类似的问题还有:

  • 怎么测试 Jenkins 在本地建造的东西
  • 如何在本地测试 Circle CI 构建
  • 如何在本地测试 XXXX 构建

我对这些问题的解决办法是:

  • 避免使用 CI 工具提供的功能(GitHub Actions、 Gitlab CI 等)
  • 尽可能多地用 CI 不可知的方式写作(BASH 脚本、 PowerShell 脚本、 Gradle 脚本、 NPM 脚本、 Dockerfiles 脚本、安赛尔脚本——任何你知道的东西)
  • 从 CI 工具中调用这些脚本

更新2022; 比特桶管道支持本地运行,这意味着100% 的免费使用时间,并且需要购买自己的 PC/Mac (如果你想要永久服务器)。

你最好的选择是 https://github.com/nektos/act(0.2.0之前) ,它还不支持 yaml 语法,尽管有很多感兴趣的东西也就是: https://github.com/nektos/act/issues/80 https://github.com/nektos/act/issues/76https://github.com/nektos/act/issues/74

Gitlab 有 gitlab-runner exec docker job-name,但那是 Gitlab:)

您可以使用自 0.2.0(预发行版)以来支持 yaml 语法的 裸体/行为

看看他们的 最新的释放。

通过使用 docker 容器,这个名为 act 的工具可以在这里找到,< a href = “ https://github.com/nektos/act”rel = “ nofollow norefrer”> https://github.com/nektos/act 您可以在一个 docker 容器中本地运行所有 github 操作。 注意: act 为要运行的操作构建所有必要的容器。您所要做的就是按照有关如何使用该工具的文档进行操作

测试 Github 操作的一种方法是创建一个私有的 repo,并在那里迭代操作 conf 。因此,您可以避免使用破坏的提交来污染实际的回购。

我知道,这不是对这个问题的直接回答——这不是一种本地化的方式。但是我一开始并没有想到这一点,我认为这对于许多用例来说已经足够了。

除了@iirekm 和@riQQ 所说的内容之外,为了保持 CI 不可知性并具有一些编配特性,你可以使用 任务来抽象步骤,然后从 Github Actions 或任何其他 CI/CD 中调用任务。 这样您还可以获得在本地运行所有内容的好处。

我假设您希望在本地运行该操作,因为它正在失败,并且您希望调试它。如果是这样,另一种选择(不需要在本地运行)是在运行操作的计算机中使用 行动,伙计 to SSH。从那里,您可以查看日志、运行命令等,以找出问题所在。

开始:

  1. 在您的工作流 yaml 文件中,在失败的步骤之后(或者在最后) ,添加一个新的步骤如下:
    - name: Setup tmate session
if: success() || failure()
uses: mxschmitt/action-tmate@v3
  1. 将更改推送到 GitHub 并重新运行操作。

  2. 等待它再次失败——这一次,不是停止工作流,而是打开一个 tmate 会话,并在工作流控制台中打印 SSH 详细信息。

  3. 通过 SSH 从您自己的计算机连接,现在您可以完全访问运行程序计算机。

在我的案例中,即使 GitHub CI 通过了,ACT 也不及格,因此我发现:

Https://github.com/actions/runner

官方的 github 动作运行器(可以自主托管)。按照自述文件中的说明操作。

它与 ACT 略有不同,但是允许将 repo CI 与当地跑步者配对(例如可以使用 cuda)