我计划将我们的 Travis CI 构建转移到 GitHub Actions,使用 Docker 进行每次提交测试。
我可以在本地重复运行这些新的 GitHub Actions 工作流吗?是否有一种在本地运行任何 GitHub Actions 工作流的通用方法?
有一些工具,比如上面提到的 act,但是它们并不完美。 面对这个问题的并非只有你一个人,类似的问题还有:
act
我对这些问题的解决办法是:
更新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/76和 https://github.com/nektos/act/issues/74
Gitlab 有 gitlab-runner exec docker job-name,但那是 Gitlab:)
gitlab-runner exec docker job-name
您可以使用自 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。从那里,您可以查看日志、运行命令等,以找出问题所在。
开始:
- name: Setup tmate session if: success() || failure() uses: mxschmitt/action-tmate@v3
将更改推送到 GitHub 并重新运行操作。
等待它再次失败——这一次,不是停止工作流,而是打开一个 tmate 会话,并在工作流控制台中打印 SSH 详细信息。
通过 SSH 从您自己的计算机连接,现在您可以完全访问运行程序计算机。
在我的案例中,即使 GitHub CI 通过了,ACT 也不及格,因此我发现:
Https://github.com/actions/runner
官方的 github 动作运行器(可以自主托管)。按照自述文件中的说明操作。
它与 ACT 略有不同,但是允许将 repo CI 与当地跑步者配对(例如可以使用 cuda)