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

时间:2018-10-23 15:59:02

标签: git jenkins github continuous-integration github-actions

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

我对诸如詹金斯(Jenkins)这样的CI工具对自动构建或测试的好处持乐观态度,GitHub Actions旨在将其用于将来。

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

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

2 个答案:

答案 0 :(得分:1)

我已经全职使用GitHub行动了几个月。

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

优势:

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

缺点:

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

  1. 没有本地缓存​​。 您将获得图像层缓存(它是complicated),但除此之外没有其他。 对于构建文物,您必须滚动自己的缓存(通过AWS,Azure等。。。),这可能需要很多工作。 (您会看到一个hacky setup here
  2. 令人惊讶的是,不支持来自分叉的拉取请求。 从安全的角度来看,它还是有点complicated,并且可以理解,但是当前无法对叉PR(基)的接收回购的秘密运行动作a)和/或对< em>可能合并fork PR的结果(这是travis的工作)。 对于涉及派生的工作流,这使得GitHub动作在很大程度上不能用作CI / CD工具。
  3. 单一平台,就是您可以在docker中运行的任何平台,因此请发行Linux版本。这似乎不太可能改变,但可能是可以接受的限制。 您始终可以添加操作来调用其他跨平台的CI / CD服务。
  4. 文档仍然很少。 最佳做法或脚手架的方式不多。
  5. (至少在市场上)已发布的GitHub操作的质量和广度仍然很低/有限。 我们将看看这是否成功。
  6. 没有一种对单元测试进行测试的好方法。 (我hacked在一起,但我不太确定)。

答案 1 :(得分:1)

  

在GitHub上具有存储库并使用外部CI工具具有巨大的好处,即无需重写整个CI流程即可将存储库移至另一个Git存储库平台(甚至本地)。   借助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”中的文档。