Jenkins和其他CI工具(例如带有Git发行版的GitLab CI、drone.io)之间的区别是什么?在一些研究中,我只找到了GitLab社区版不允许添加Jenkins,但是GitLab企业版可以。还有其他重要的区别吗?
Jenkins和其他CI工具(例如带有Git发行版的GitLab CI、drone.io)之间的区别是什么?在一些研究中,我只找到了GitLab社区版不允许添加Jenkins,但是GitLab企业版可以。还有其他重要的区别吗?
Jenkinsfile
和 pipline 插件,这是从 Jenkins 2 开始默认支持的),但过去与代码库的耦合度要低于 GitLab CI。使用 YAML 文件来定义构建流程(最终运行纯 shell/bat)更加清晰。Jenkins 提供的插件可以帮助您可视化各种报告,例如测试结果、覆盖率和其他静态分析器。当然,您总是可以编写或使用工具来为您完成此操作,但对于 Jenkins 而言,这肯定是一个优点(特别是对于那些倾向于高度重视这些报告的管理人员而言)。最近我越来越多地使用 GitLab CI。在 GitLab 中,他们正在做出真正出色的工作,使整个体验变得有趣。我知道人们使用 Jenkins,但是当您使用并可用 GitLab CI 时,很容易开始使用 GitLab CI。即使他们花费了相当多的精力进行第三方集成,也没有任何东西能够像 GitLab CI 那样无缝集成。
写作时的一些福利:
.gitlab-ci.yml
的轻便程度)。Jenkinsfile
没有区别。您是正确的,在您的 Jenkinsfile
中,您可以使用 Groovy(+其他 Java 库)来运行代码,而 .gitlab-ci.yaml
文件将主要支持 shell,但这取决于 runner 的位置。
另一方面,您也可以从 shell 脚本中调用所有这些内容,但缺点是您正在创建机器依赖项(在我看来并不是非常透明)。 - Rik首先,截至今日,GitLab社区版可以与Jenkins完全互操作,毫无疑问。
接下来,我将分享一些成功结合Jenkins和GitLab CI的经验,并讨论您是否应该同时使用它们或仅使用其中之一以及原因。
希望这能为您自己的项目提供优质信息。
GitLab CI
GitLab CI在GitLab SCM中自然集成。 您可以使用gitlab-ci.yml
文件创建管道,并通过图形界面操纵它们。
这些管道作为代码显然可以存储在代码库中,强制执行“一切皆为代码”的实践(访问、版本控制、可重现性、可重用性等)。
GitLab CI是一个很棒的可视化管理工具:
Jenkins
Jenkins是一个很棒的构建工具。它的优势在于其众多插件。尤其是,我在使用Jenkins和其他CI或CD工具之间的接口插件方面非常幸运。这总是比重新开发两个组件之间的对话界面(可能很糟糕)更好。
可以使用groovy
脚本来实现管道即代码。
一开始听起来可能有点多余,但是将GitLab CI和Jenkins结合起来非常强大。
这种设计的另一个好处是工具之间的松耦合:
当然,这种设计需要付出代价:初始设置繁琐,并且您需要对许多工具有最低水平的了解。
出于这个原因,我不建议这样的设置,除非
如果您不处于这两种情况之一,只选择其中一个工具会更好,而不是同时使用。
GitLab CI和Jenkins都有优缺点,两者都是强大的工具。那么该如何选择呢?
答案1
选择团队(或身边人)已经掌握一定水平的工具。
答案2
如果您对CI技术完全没有经验,只需选择其中一个并开始使用。
那些正在使用GitLab但不确定是否会继续使用它的用户仍然需要记住,选择GitLab CI会意味着放弃所有CI / CD流水线。
最后的结论是:由于Jenkins具有许多插件,它的平衡略微倾向于Jenkins,但GitLab CI很快就会填补这一差距。
only
条件,它基本上允许您为merge_request
或push
构建单独的流水线(完整列表在这里)。.myTemplate:
image: node:10.14.2
script:
- npm install
- npm run test
include:
- remote: https://....
并使用它们来扩展一些工作:
test:
extends: .myTemplate
only:
refs: ["master"]
variables:
- $CI_PIPELINE_SOURCE == "push"
extends
,例如。extends:
- .pieceA
- .pieceB
请查阅官方文档了解有关多继承的更多信息。