# 使用总结
通过前面的分享,我已经在自己的环境中安装了gitlab-runner和jenkins,我以前用的是脚本全自动部署,所有操作都是由shell执行器完成,并没有涉及docker执行器。然后今天我就分享下,对于gitlab-runner执行器的一点认识。
## jenkins和gitlab-ci
有读者有疑惑,为什么先用gitlab-ci而不是jenkins,我这里就来简单对比下,gitlab的流水线和jenkins的流水线。
1. 安装和配置:
- GitLab CI:作为GitLab的一部分,安装简单,配置也较简单。
- Jenkins:独立工具,安装和配置较复杂,需要配置各种插件和环境。
2. 使用难度:
- GitLab CI:配置简单,YAML格式的配置文件,易上手,学习曲线平稳。
- Jenkins:功能强大,但配置繁琐,需要编程来实现较复杂的任务,学习曲线较陡。
3. 与源码管理的结合:
- GitLab CI:原生集成了Git,非常易于与GitLab仓库结合,可以自动检测仓库更改并运行流水线。
- Jenkins:可以结合各种源码管理工具,但需要手动配置触发器来检测更改。
4. 可扩展性:
- GitLab CI:可以安装GitLab Runner来扩展,支持与Kubernetes集成,较易于水平扩展。
- Jenkins:本身支持分布式部署,有大量插件可以连接不同环境,扩展性高但复杂。
5. 预置环境和资产:
- GitLab CI:没有预置的环境或资产,每次运行流水线时会创建独立环境。
- Jenkins:有丰富的预置环境、凭证、缓存等资产,可以重复使用,但也增加了管理难度。
那么到底如何选择:
GitLab CI简单易用,但功能略少,扩展和管理也相对简单。适用于中小型项目。
Jenkins功能强大,但较复杂,需要投入更多时间去管理与扩展。适用于大型项目。
两者可以很好地结合使用,例如使用GitLab CI进行 daily build,使用Jenkins进行发布管理。
总之个人开发者或者小团队来讲可以选择gitlab的流水线足够使用,而规模大一点就根据实际选择gitlab或者jenkins流水线,结合使用。
## gitlab-runner执行器
就是一种程序,它可以在GitLab CI/CD中执行构建、测试和部署等任务。它可以在不同的操作系统上运行,如Linux、Windows和macOS等。
执行器列表已经锁定,不再发展或接受新执行器,以下为执行器种类:
代码语言:javascript复制 SSH
Shell
Parallels
VirtualBox
Docker
Docker Autoscaler (alpha)
Docker Machine (auto-scaling)
Kubernetes
Instance (alpha)
Custom
目前一般使用ssh、hell和docker以及k8s,简单来说就是执行远程命令、脚本、以及镜像操作和部署到k8s的作用。
对于这些具体的介绍可以直接上官网查看:
代码语言:javascript复制 https://docs.gitlab.cn/runner/executors/#i-am-not-sure
## 怎么选择
注册的时候,要选择那些执行器呢,就得根据你的流水线里面任务用到了那些,如果只是shell脚本那就选shell,如果用到了docker操作那就选docker。
注册的时候默认只能选择一种执行器类型,但是在.gitlab-ci.yml文件中,我们可以为不同的job指定不同的执行器。所以,我们可以在同一个CI/CD流水线中,使用shell执行器构建应用,使用docker执行器部署应用。
代码语言:javascript复制
build:
stage: build
script:
- npm install
- npm run build
deploy:
stage: deploy
image: nginx:stable-alpine
script:
- mv /dist /usr/share/nginx/html
only:
- test
- build job使用shell执行器,通过npm构建Vue应用。
- deploy job使用docker执行器,部署dist目录到Nginx容器中。
所以,注册GitLab Runner时,执行器类型的选择并不影响我们在.gitlab-ci.yml文件中为不同job指定不同的执行器。我们可以通过为job指定:
- script使用shell执行器
- image使用docker执行器
## 疑问
1. 那么同一个项目中需要注册两个gitlab-runner吗?
可以注册两个,也可以一个项目用一个runner。但注册多个GitLab Runner有个好处,就是这样可以避免资源竞争和冲突,保证项目的稳定性和可靠性。
注册额外的Runner类型通常出于以下目的:
. 隔离执行环境。例如注册shell Runner用于构建,docker Runner用于部署,以隔离构建环境和生产环境。
. 并行处理更多job。如果一个Runner的job队列太长,可以注册更多Runner来提高CI流水线的处理能力。
. 不同机器资源。例如在服务器上注册docker Runner,在个人电脑上注册shell Runner。
2. 那为什么注册的时候还要选择执行器类型?注册GitLab Runner时让我们选择执行器类型,似乎与一个Runner可以处理不同执行器类型的job相矛盾。
这主要出于两个原因:
. 默认执行器。虽然一个Runner可以处理不同执行器类型的job,但是在注册时选择的执行器类型会成为该Runner的默认执行器。也就是,如果一个job未指定image或script,该Runner会使用默认执行器来运行。
. 优化环境。选择不同的执行器类型,可以为该Runner优化不同类型job的运行环境。例如:
- 选择shell,该Runner会默认安装GIT、OpenSSH、Build Essentials等,方便处理script类型的job。
- 选择docker,该Runner会默认支持Docker命令,方便pull和run各种镜像,以处理image类型的job。
今天的分享就到这,祝学习顺利!