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

Wil*_*ken 65 github-actions

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

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

iir*_*ekm 72

有像已经提到的 工具act,但它们并不完美。您并不孤单。类似的问题有:

  • 如何在本地测试 Jenkins 构建
  • 如何在本地测试 GitLab CI 构建
  • 如何在本地测试 Circle CI 构建
  • 如何在本地测试 XXXX 构建

我对这些问题的解决方案是:

  • 避免使用 CI 工具(GitHub Actions、Gitlab CI 等)提供的功能
  • 尽可能以 CI 不可知的方式编写(BASH 脚本、PowerShell 脚本、Gradle 脚本、NPM 脚本、Dockerfiles、Ansible 脚本——任何你知道的)
  • 从 CI 工具调用这些脚本。在 GitHub 操作中:run: your command to run

  • 很好的答案!但不幸的是,当您测试诸如上传和下载工件到 github 版本之类的事情时,这并没有多大帮助。 (11认同)
  • 实际上 gitlab 有一个 cli 工具来测试你的工作流程:`gitlab-runner exec docker my-job` (7认同)
  • 当使用每个特定的 CI 缓存功能时,“CI 不可知的方式”带来了缓存挑战 (5认同)
  • 这正是我多年来一直在做的事情。掌控一切且不依赖专有 CI 工具的好处远远超过了能够看到每个已完成阶段标有复选标记的小圆圈的好处。CI 工具供应商应该为我们的脚本提供挂钩,用于指示已完成的阶段。CI 工具供应商应该对我们透明地处理缓存;这是他们的问题,不是我们的问题。 (5认同)
  • Circle CI 还允许您在本地运行:https://circleci.com/docs/2.0/local-cli/ (2认同)

Jor*_*ett 25

我假设您想要在本地运行该操作,因为它失败了,并且您想要调试它。如果是这样,另一种选择(不需要在本地运行)是使用action-tmate通过 SSH 连接到运行操作的计算机。从那里,您可以查看日志、运行命令等来找出问题所在。

开始:

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

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

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


Web*_*ber 19

您可以使用自0.2.0(预发布)起支持 yaml 语法的nektos/act

查看他们的最新版本。

  • 看来这不支持 Windows 版本。很好奇,其他人通常如何测试对 Windows 应用程序的 Github Actions 的更改(不签入并触发它们)? (2认同)
  • 但它不适用于 .net/windows 项目:( (2认同)

Jub*_*air 10

你最好的选择是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 :)

  • act 从 0.2.0 开始支持 yaml 语法(参见 Webber 的回答) (3认同)

juh*_*tio 7

测试 Github 操作的一种方法是创建一个私有存储库,并在那里迭代操作 conf。因此,您可以避免因提交损坏而污染实际存储库。

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

  • 另一种可能性是在存储库中创建一个新分支,将更改推送到该分支,直到操作正常运行,然后压缩为单个提交并合并到主分支中。 (94认同)
  • @JordanMitchellBarrett 遗憾的是,这在添加*新*工作流程时不起作用。有时,工作流程 YAML 文件必须存在于主线/默认分支上,才能显示在操作 UI 中。 (2认同)

小智 7

就我而言,即使 GitHub CI 通过,ACT 也会失败,所以我发现了这一点:

https://github.com/actions/runner

官方 github Action runner(可以自行托管)。按照自述文件中的说明进行操作。

它与 ACT 略有不同,但允许将 repo CI 与本地运行器配对(例如可以使用 cuda)