流水线使用浅谈

2023-10-30 19:15:15 浏览数 (1)

# 使用总结

通过前面的分享,我已经在自己的环境中安装了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。

今天的分享就到这,祝学习顺利!

0 人点赞