GitHub Actions 与 Jenkins 等其他 CI 工具有啥区别?

Posted

技术标签:

【中文标题】GitHub Actions 与 Jenkins 等其他 CI 工具有啥区别?【英文标题】:What are the differences between GitHub Actions and other CI tools like Jenkins?GitHub Actions 与 Jenkins 等其他 CI 工具有什么区别? 【发布时间】:2019-03-27 22:42:09 【问题描述】:

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

我对 Jenkins 等 CI 工具在自动构建或测试方面的优势持肯定态度,GitHub Actions 旨在用于未来。

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

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

【问题讨论】:

像 Jenkins 这样的 CI 工具提供了许多开箱即用的插件来与各种服务集成,或者能够编写自己的插件来做你想做的事。用于前的 SCM 管道功能。 Bitbucket 管道或 Github Actions 可能有助于快速构建-测试-部署,但不认为它们提供了很大的灵活性,或者像使用 Jenkins 集成、自定义等一样容易 IMO,由于 Github Actions 在 Docker 容器上运行,我认为它们与 Github 生态系统没有太大的联系,除了工作流文件。 除了@Pavitra 所说的,因为它运行在 Docker 容器上,有些事情不像其他 CI 工具那样容易做到。即,如果您正在做的任何事情都不存在基本图像。 【参考方案1】:

几个月以来,我一直在全职使用 GitHub 操作。

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

优点:

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

缺点:

此时(2019 年 6 月)GitHub 操作(仍然?)有时存在令人惊讶的基本限制。

    没有本机缓存。 你得到 imagelayer 缓存(它是complicated),但没有别的。 对于构建人工制品,您必须滚动自己的缓存(通过 AWS、Azure 等......),这可能是很多工作。 (你可以看到hacky setup here。 令人惊讶的是,不支持来自分叉的拉取请求。 这又有点complicated,从安全的角度来看是可以理解的,但目前无法针对分叉 PR(base)的接收 repo 的秘密运行操作 a)和/或 b)针对 可能 合并分叉 PR 的结果(这就是 travis 所做的)。 对于涉及分叉的工作流程,这使得 GitHub 操作在很大程度上无法用作 CI/CD 工具。 单一平台,它只是你可以在 docker 中运行的任何东西,所以一些 Linux 发行版。这似乎不太可能改变,但可能是一个可以接受的限制。 您始终可以添加一个操作来调用其他跨平台 CI/CD 服务。 文档仍然很少。 没有太多的最佳实践或脚手架。 已发布的 GitHub 操作(至少在市场上)的质量和广度仍然很低/有限。 我们会看看这是否会成功。 没有对动作进行单元测试的好方法。 (我hacked 在一起,但我不太确定)。

【讨论】:

您可能需要更新此答案,因为 Github Actions 现在支持三个平台、YAML 语法等。【参考方案2】:

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

是的,从 2019 年 11 月开始,会稍微少一些:

见Joe Bourne的公告“Self-hosted runners for GitHub Actions is now in beta”。

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

您的环境、您的工具任何尺寸的机器或配置安全访问和网络大工作量支持

为了支持在您的工作流程中使用自托管运行器,我们扩展了使用 runs-on 键的体验。 在注册您的自托管运行器时,它们都会被赋予一个自托管的只读标签,您可以将其与 runs-on 一起使用。 这是一个例子:

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

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

【讨论】:

以上是关于GitHub Actions 与 Jenkins 等其他 CI 工具有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

GitHub Actions 完成CI CD

CI/CD1jenkins,actions,daocloud

CI/CD1jenkins,actions

Jenkins在收到GitHub webhook时不会触发构建

前端项目自动化部署——超详细教程(JenkinsGithub Actions)

如何将 Docker 与 GitHub Actions 一起使用?