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.workflow
s 的可视化编辑器可能是特别是建模 CI/CD 和一般工作流的好方法。
需要一些时间来适应,但概括性很好。
GitHub 操作可以做的不仅仅是 CI!基本上整个 API 作为输入和输出触手可及。
缺点:
此时(2019 年 6 月)GitHub 操作(仍然?)有时存在令人惊讶的基本限制。
-
没有本机缓存。
你得到 image 和 layer 缓存(它是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 工具有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
CI/CD1jenkins,actions,daocloud
Jenkins在收到GitHub webhook时不会触发构建