GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。
更多关于极狐GitLab :https://gitlab.cn 或者 DevOps 的最佳实践,可以关注文末的极狐GitLab 公众号。
CI/CD 已经成为落地 DevOps 的最佳实践手段,这一点,业界已经达成了共识,而且很多企业都在搭建企业内部的 CI/CD 系统上面花费了大量的精力和功夫,而业界也围绕 CI/CD 产生了很多工具链。下面是一些好用的 CI/CD 工具详解。
Top 1:Jenkins
排行榜首位非 Jenkins 莫属。Jenkins 的前身是诞生于 2005年Sun Microsystems公司开发的Hudson项目,距今已经有19年历史了,堪称 CI/CD 领域的“活化石”。Jenkins 在国内有很多用户,根据中国信通院发布的中国 DevOps 现状调研报告(2021、2022、2023)显示,Jenkins 在持续集成/持续交付中的使用占比,始终位居第一,使用率分别为 64.20%(2021年)、28.88%(2022年)以及12.64%(2023年),均高于第二名多个百分点。
Jenkins 如此受欢迎的原因有以下两点:
- 开源免费:Jenkins 是一款开源软件,用户可以自行下载安装使用;
- 插件机制:Jenkins 是通过插件来提供丰富多样的功能,当前的插件中心已经有超千款插件;
当然,Jenkins 也有其不足的地方:
- 插件过多:Jenkins的插件是优势也是劣势。因为插件机制灵活,所以有很多用户会自己开发插件,并推送到插件中心,就容易导致有很多插件的更新不及时,甚至有些插件已经好几年不更新,存在安全风险;
- 没有企业服务:Jenkins 在国内没有原厂服务,出现问题以后只能自己解决(查找文档、求助别人),问题解决时效性无法保证。
另外,Jenkins 只有 CI/CD 功能,没有代码托管功能,意味着它必须要和其他 SCM 工具,比如 GitHub/GitLab 进行集成才可以。
Top2:GitLab CI
GitLab 是全球知名的代码托管平台,在国内有数百万用户。GitLab CI 是其持续集成/持续交付能力,也就是说 GitLab 除了源代码托管,还有 CI/CD,是一个一体化的平台。前面提到了信通院发布的中国 DevOps 现状报告中,Jenkins 是使用率排名第一的工具,而排名第二的就是 GitLab CI 了。其使用率在 2021年为 8.86%;2022年为 7.05%。
GitLab CI 在国内用户众多的原因如下:
- 开源免费:GitLab 也是一款开源软件,用户可以免费使用;
- 私有化部署:国内企业往往都比较喜欢能够私有化部署的软件,这样可以更加“自主可控”,而 GitLab 正好能满足这一点,只需要一个命令就能安装好 GitLab,然后使用源代码托管和 CI/CD;
之前,国内用户只能去 about.gitlab.com/install 网站上去下载 GitLab 安装包,由于 GitLab 资源都托管在国外,所以下载体验不是特别好,另外 GitLab 的文档、官网均是英文的,对于很多国内开发者来说也存在一定挑战。
2021 年,以 GitLab 为上游的极狐(GitLab)成立,专门面向国内用户提供同等功能的极狐GitLab:https://dl.gitlab.cn/096ezxxi 版本(JH 版本)。极狐GitLab 版本除了做很多汉化工作外,还开发了许多与中国企业密切相关的功能,比如和飞书、钉钉、企微的集成等。另外,极狐GitLab 的所有资源都在国内,所以下载体验不错,不管是哪种方式(Omnibus、docker、Helm Chart、Operator)都可以在 https://dl.gitlab.cn/ov43wn91 下载安装。当然,也有中文文档 https://dl.gitlab.cn/xdrgyl21。
Top3 GitHub Action
GitHub Action 是 GitHub 在 2018年推出的 CI/CD 功能,和 GitLab 一样,也是通过配置 YAML 进行流水线的编写。只不过不同的是 GitHub Action 采取的是 Action marketplace 策略,用户可以在 marketplace 中查找适合自己的 Action 来完成流水线的编写。
name: learn-github-actions
run-name: ${{ github.actor }} is learning GitHub Actions
on: [push]
jobs:
check-bats-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install -g bats
- run: bats -v
GitHub Action 的优缺点也比较明显。优点是 GitHub 本身就是源代码托管平台,加上 Action 的 CI/CD 功能,用户可以在一个平台上就能完成软件编写和交付,不用重复构建工具链,另外 Action marketplace 机制也让流水线的编写变得高效、简单;缺点是:GitHub 的服务器在国外,国内访问有网络问题,就导致不管是源代码托管还是 CI/CD 体验不是很好,另外 GitHub 不能私有化部署、在国内原厂服务、文档资料以英文为主,对于国内喜欢私有化部署的企业来讲不是一个好的选择。
Top4 Tekton
随着云原生的兴起,基于云原生架构的 CI/CD 工具也在涌现,这里面比较典型的就是 Tekton。Tekton 的前身是 Knative 项目中的一部分——build-pipeline 项目,随后由由 Google 在 2018 开源。Tekton 通过定义 CRD(自定义资源定义)让用户灵活定义流水线。Tekton 有多个组件,包括 Tekton pipeline、Tekton triggers、Tekton CLI、Tekton Dashboard、Tekton Catalog 和 Tekton Hub 等。
Tekton 也各有优劣,优势在于非常灵活,用户可以通过自定义 Task 来完成 Pipeline 的编写。不足点在于有上手成本。首先需要用户去了解 Task、TaskRun、Pipeline、PipelineRun 等概念和 YAML 文件的编写。比如下面的一个 taskrun demo:
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
name: build-docker-image-run
spec:
serviceAccountName: tekton-service
taskRef:
name: build-docker-image
resources:
inputs:
- name: src
resourceRef:
name: apim-repo
outputs:
- name: image
resourceRef:
name: apim-image
params:
- name: pathToDockerFile
value: "/workspace/src"
- name: pathToContext
value: "/workspace/src"
- name: imageTag
value: v0.0.1
所以,对于熟悉云原生、熟悉 YAML 配置的开发者来说,tekton 是一种好用的 CI/CD 工具,要是不熟悉的人员,可能需要一定的学习成本。
Top5 ArgoCD
ArgoCD 是随着云原生火热发展而兴起的一款 CI/CD 工具,主要为云原生应用实现持续交付,官方定义是:声明式且面向 Kubernetes 应用的持续交付工具。
ArgoCD 是实践 GitOps 的常用工具之一(另外一个是 Flux 和极狐GitLab 的 Kubernetes Agent Server,最新版本中,极狐GitLab 也已经全面转向 Flux)。GitOps 强调对于云原生应用程序或者基础设施的变更都应该在 Git 端发起,然后利用云原生的声明式机制,变更能够自动同步到目标集群。
当然 ArgoCD 的优缺点也比较明显,优点是通过实践 GitOps 让云原生应用程序的交付和运维变得简单起来,但是缺点就是只能做 CD,也就是持续交付,没有办法做 CI,要想实现 CI,必须要依托具有源代码托管功能的工具,比如和极狐GitLab:https://dl.gitlab.cn/ytjnecto 结合就能实现完整的 CI/CD。
其他还有常用的 Circle CI、Jenkins X 等,但是和前面这几位比起来,在使用率上明显就要逊色一些。
学习极狐GitLab 的相关资料:
- 极狐GitLab 官网:https://gitlab.cn
- 极狐GitLab 官网文档:https://docs.gitlab.cn
- 极狐GitLab 论坛:https://forum.gitlab.cn/
- 极狐GitLab 安装配置:https://gitlab.cn/install
- 极狐GitLab 资源中心:https://resources.gitlab.cn/
- AI 产品驭码CodeRider:https://coderider.gitlab.cn/