我计划使用Docker将我们的Travis CI构建转移到GitHub Actions以进行每次提交测试。
我能否在本地可重复地运行这些新的GitHub Actions工作流程?是否有一种通用的方式来在本地运行任何GitHub Actions工作流程?
我计划使用Docker将我们的Travis CI构建转移到GitHub Actions以进行每次提交测试。
我能否在本地可重复地运行这些新的GitHub Actions工作流程?是否有一种通用的方式来在本地运行任何GitHub Actions工作流程?
有一些像已经提到的act
之类的工具,但它们并不完美。
你并不孤单。类似的问题还有:
而我对于这些问题的解决方案是:
run:your command to run
更新2022年; Bit-bucket的Pipelines支持本地运行,这意味着100%免费使用小时,代价是购买自己的PC/Mac(如果您想要永久服务器)。
gitlab-runner exec docker my-job
。 - Jubair测试 Github Actions 的方法之一是创建一个私有仓库,并在其中迭代操作配置。这样,您可以避免在实际仓库中添加错误提交。
我知道,这不是直接回答问题的方式 - 这不是本地方法。但一开始我没有想到这一点,我认为这对于许多用例可能已经足够了。
-P windows-latest=...
}",但是无论如何都不能将任何内容作为参数传递给 -P。我尝试了这个:-P ubuntu-latest=node:16-buster-slim,但每次都出现相同的错误。 - Daniel Williams我假设您希望在本地运行该操作以进行调试,因为它正在失败。如果是这样,另一种选择(不需要在本地运行)是使用action-tmate 来 SSH 连接到运行您的操作的机器。从那里,您可以查看日志、运行命令等,以找出问题所在。
开始操作:
- name: Setup tmate session
if: success() || failure()
uses: mxschmitt/action-tmate@v3
将更改推送到GitHub并重新运行操作。
等待再次失败 - 这一次,不会停止工作流程,而是会打开一个 tmate 会话,并在工作流程控制台中打印 SSH 详细信息。
从您自己的计算机通过SSH连接,现在您可以完全访问runner机器。
你最好的选择是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的 :)
在我的情况下,即使 GitHub CI 通过,ACT 也会失败,所以我找到了这个:
https://github.com/actions/runner
官方的 GitHub Action runner(可以自行托管)。请按照自述文件中的说明进行操作。
它与 ACT 有些不同,但例如允许将存储库 CI 与本地运行程序配对(例如可以使用 cuda)。
除了 @iirekm 和 @riQQ 所说的内容之外,为了保持CI无关性并具有一些编排功能,您可以使用 Task 抽象出您的步骤,然后从您的Github Actions或任何其他CI/CD中调用您的任务。
这样您还可以获得在本地运行所有内容的好处。
通过使用Docker容器,可以在此处找到名为act的工具https://github.com/nektos/act。您可以在Docker容器内本地运行所有GitHub操作。 注意:act会构建所有必要的容器以运行操作。您只需按照文档说明使用该工具即可。
nejtos/act
支持 YAML 语法感兴趣,可以看下面我的回答,里面有相关讨论的链接。 - Jubair