GitHub Actions 与其他 CI 工具(如 Jenkins)有何区别?

What are the differences between GitHub Actions and other CI tools like Jenkins?

GitHub 宣布了一项即将推出的功能,GitHub Actions

我对 CI 工具(如 Jenkins)在自动构建或测试方面的好处持肯定态度,GitHub Actions 旨在将来使用。

在 GitHub 上拥有一个存储库并使用外部 CI 工具有一个巨大的好处,即允许将存储库移动到另一个 Git 存储库平台(甚至本地)而无需重写整个 CI 过程。使用 GitHub Actions,您或多或少与 GitHub 生态系统相关联。

我假设 GitHub 的 Actions 集成在 native 环境中会更流畅,但除此之外还有其他优点或缺点吗?

几个月来我一直在全职处理 GitHub 动作。

现在还早(2019 年 6 月),但这是我的清单:

优点:

  1. GitHub 动作只是连续的 docker 运行s。非常容易推理和调试。 为 container-based Travis 重现构建环境是 可能, 但更难。 在 GitHub 个操作上,它只是一个 docker build docker run 的距离。
  2. 工作流程中的各个动作默认是隔离的。 您可以使用完全不同的计算环境进行编译和测试。 Travis CI(我认为其他 "traditional" CI)将 运行 所有 "stages"(~ 动作)在相同的计算环境中。 同样,GitHub 操作更容易推理和调试。
  3. main.workflow 规范(HCL 的一个子集,实际上只是一个有向无环图)是 open source。 无论如何,整个事情是 Docker 的一个非常薄的包装,所以平台 lock-in 可以说是最小的。
  4. 已经 open-source 重新实现了 GitHub 操作,例如 act 用于本地测试。
  5. 您已经准备好访问 GitHub API,开箱即用(有些受限)身份验证。
  6. 可能 是一个充满活力的社区(市场?),人们可以在其中分享操作。 例如,我正在重用由不同生态系统中的不同人员构建的部署操作。
  7. 有向无环图 (DAG) 和 main.workflow 的可视化编辑器可能是建模 CI/CD 和一般工作流程的好方法。 需要一些时间来适应,但概括性很好。
  8. GitHub 行动可以做的不仅仅是 CI!基本上整个 API 作为输入和输出都触手可及。

缺点:

GitHub 动作(仍然?)在这一点上(2019 年 6 月)有时具有令人惊讶的基础限制。

  1. 没有本机缓存。 你得到 imagelayer caching(它是 complicated),但没有别的。 对于构建工件,您必须滚动自己的缓存(通过 AWS、Azure 等...),这可能需要大量工作。 (你可以看到一个 hacky setup here.
  2. 令人惊讶的是,不支持来自分支的拉取请求。 它又有点 complicated,从安全的角度来看是可以理解的,但目前无法 运行 采取行动 a) 针对分叉 PR(基础)的接收回购的秘密,and/or b) 针对 fork PR 的 would-be 合并结果(这就是 travis 所做的)。 对于涉及分叉的工作流程,这使得 GitHub 操作在很大程度上无法用作 CI/CD 工具。
  3. 单一平台,运行 在 docker 中可以使用任何东西,所以一些 Linux 发行版。这似乎不太可能改变,但可能是一个可以接受的限制。 您可以随时添加一个操作来调用其他 cross-platfrom CI/CD 服务。
  4. 文档仍然很少。 最佳实践或脚手架的方式不多。
  5. 已发布 GitHub 行动的质量和广度(至少在市场上)仍然很低/有限。 我们拭目以待。
  6. 没有很好的方法来 unit-test 操作。 (我 hacked 在一起,但我不太确定)。

Having a repository on GitHub and using an external CI tool has the huge benefit of allowing to move the repository to another Git repository platform (or even local) without rewriting of the whole CI process.
With GitHub Actions, you're more or less tied to the GitHub ecosystem.

是的,从 2019 年 11 月开始,情况略有不同:

参见 Joe Bourne's annoucement "Self-hosted runners for GitHub Actions is now in beta”。

您可以拥有自托管的运行器,这意味着:

  • Your environment, your tools,
  • Any size machine or configuration,
  • Secure access and networking,
  • Large workload support.

To support using self-hosted runners in your workflows, we’ve expanded the experience of using the runs-on key.
When registering your self-hosted runners, they’re each given a read-only label self-hosted which you can use with runs-on.
Here’s an example:

# Use Any available Self-hosted runners connected to repo
runs-on: self-hosted

请参阅“Hosting your own runners”处的文档。