GitLab Runner 和执行器(Executor)是 GitLab CI/CD 管道中的两个重要组成部分。理解它们之间的关系有助于更好地配置和使用 CI/CD 流水线。runer是gitlab的ci-agent对接gitlab,而执行器是接受runer下发的ci的任务来干活的。也就是说gitrunner是一个控制端,它负责去和gitlab-ci环境通信,获取任务,然后把这些任务分配给它的执行器来完成任务 Gitlab CI/CD笔记-第三天-使用主机docker in docker 进行构建并push镜像。_gitlab runner docker in docker-CSDN博客
GitLab Runner
GitLab Runner 是 GitLab CI/CD 的客户端,负责执行 CI/CD 作业(jobs)。Runner 从 GitLab 服务器接收作业,并在指定的环境中运行这些作业。Runner 可以安装在多种平台上,包括 Linux、Windows、macOS 等。
执行器(Executor)
执行器(Executor) 是 GitLab Runner 的一部分,决定了 Runner 如何执行作业。不同的执行器类型提供了不同的执行环境和功能。GitLab 提供了多种执行器类型,每种类型适用于不同的场景。
常见的执行器类型
-
Shell:
- 描述:直接在 Runner 所在的主机上执行命令。
- 适用场景:适用于简单的脚本和命令,不需要复杂的隔离环境。
- 配置示例:
sudo gitlab-runner register -n \ --url https://gitlab.example.com/ \ --registration-token REGISTRATION_TOKEN \ --executor shell \ --description "My Shell Runner"
-
Docker:
- 描述:使用 Docker 容器来执行作业。每个作业都在一个新的容器中运行。
- 适用场景:适用于需要隔离环境的作业,可以轻松地切换不同的运行环境。
- 配置示例: 如果gitrunner是直接安装在主机上的,那么gitrunner没执行一个job会在主机上启动一个docker容器来执行。
sudo gitlab-runner register -n \ --url https://gitlab.example.com/ \ --registration-token REGISTRATION_TOKEN \ --executor docker \ --description "My Docker Runner" \ --docker-image alpine:latest
-
Docker+Machine:
- 描述:结合了 Docker 和 Docker Machine,可以在需要时动态创建新的 Docker 主机。
- 适用场景:适用于大规模的 CI/CD 管道,需要动态扩展资源。
- 配置示例:
sudo gitlab-runner register -n \ --url https://gitlab.example.com/ \ --registration-token REGISTRATION_TOKEN \ --executor docker+machine \ --description "My Docker+Machine Runner" \ --docker-machine-name my-docker-machine-$RUNNER_NUM \ --docker-image alpine:latest
-
Kubernetes:
- 描述:在 Kubernetes 集群中执行作业。每个作业都在一个新的 Pod 中运行。
- 适用场景:适用于需要在 Kubernetes 集群中运行的作业。
- 配置示例:
sudo gitlab-runner register -n \ --url https://gitlab.example.com/ \ --registration-token REGISTRATION_TOKEN \ --executor kubernetes \ --description "My Kubernetes Runner" \ --kubernetes-namespace default
-
Parallel:
- 描述:允许多个作业并行执行。
- 适用场景:适用于需要并行执行多个任务的场景。
- 配置示例:
sudo gitlab-runner register -n \ --url https://gitlab.example.com/ \ --registration-token REGISTRATION_TOKEN \ --executor parallel \ --description "My Parallel Runner" \ --parallel-commands 4
在 .gitlab-ci.yml
中指定执行器
虽然 .gitlab-ci.yml
文件中的 default
块可以定义全局的执行器类型,但您也可以在特定的 job 中覆盖这些设置。
示例配置
# 全局配置
default:
image: alpine:latest
before_script:
- echo "Running in Docker"
stages:
- build
- test
- deploy
# 使用 Docker 执行器的 job
build_job:
stage: build
script:
- echo "Building the application"
- apk add --no-cache build-base
- make build
# 使用 Shell 执行器的 job
test_job:
stage: test
script:
- echo "Running tests"
- ./run_tests.sh
before_script: [] # 清除全局的 before_script
tags:
- shell
# 使用 Docker 执行器的 job
deploy_job:
stage: deploy
script:
- echo "Deploying the application"
- ./deploy.sh
解释
-
全局配置:
default
块定义了默认的 Docker 镜像和before_script
。stages
定义了 CI/CD 流水线的阶段。
-
使用 Docker 执行器的 job:
build_job
和deploy_job
使用全局配置的 Docker 执行器。
-
使用 Shell 执行器的 job:
test_job
使用shell
执行器。before_script: []
清除了全局的before_script
,以避免不必要的命令执行。tags: ["shell"]
指定了该 job 应该在带有shell
标签的 Runner 上运行。确保您有一个带有shell
标签的 Runner 配置。
配置 Runner
确保您有一个带有 shell
标签的 Runner 配置。您可以在 GitLab 的 Runner 设置中添加一个 Shell 执行器类型的 Runner,并为其分配 shell
标签。
-
注册 Shell Runner:
- 下载并安装 GitLab Runner。
- 注册一个新的 Runner,并选择
shell
作为执行器类型:sudo gitlab-runner register
- 按照提示输入必要的信息,包括
shell
作为执行器类型。 - 为 Runner 分配
shell
标签:sudo gitlab-runner tag <runner_id> shell
-
验证 Runner:
- 确保 Runner 已经成功注册并在线。
- 检查 Runner 的标签是否正确设置。
通过以上步骤,您可以在 .gitlab-ci.yml
文件中指定某个 job 使用 shell
执行器,而其他 job 继续使用全局配置的 docker
执行器。