【CICD】GitLab Runner 和执行器(Executor

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 提供了多种执行器类型,每种类型适用于不同的场景。

常见的执行器类型

  1. Shell

    • 描述:直接在 Runner 所在的主机上执行命令。

    • 适用场景:适用于简单的脚本和命令,不需要复杂的隔离环境。

    • 配置示例

      sudo gitlab-runner register -n \
        --url https://gitlab.example.com/ \
        --registration-token REGISTRATION_TOKEN \
        --executor shell \
        --description "My Shell Runner"
      
  2. 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
      
  3. 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
      
  4. 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
      
  5. 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

解释

  1. 全局配置

    • default 块定义了默认的 Docker 镜像和 before_script
    • stages 定义了 CI/CD 流水线的阶段。
  2. 使用 Docker 执行器的 job

    • build_jobdeploy_job 使用全局配置的 Docker 执行器。
  3. 使用 Shell 执行器的 job

    • test_job 使用 shell 执行器。
    • before_script: [] 清除了全局的 before_script,以避免不必要的命令执行。
    • tags: ["shell"] 指定了该 job 应该在带有 shell 标签的 Runner 上运行。确保您有一个带有 shell 标签的 Runner 配置。

配置 Runner

确保您有一个带有 shell 标签的 Runner 配置。您可以在 GitLab 的 Runner 设置中添加一个 Shell 执行器类型的 Runner,并为其分配 shell 标签。

  1. 注册 Shell Runner

    • 下载并安装 GitLab Runner。

    • 注册一个新的 Runner,并选择 shell 作为执行器类型:

      sudo gitlab-runner register
      
    • 按照提示输入必要的信息,包括 shell 作为执行器类型。

    • 为 Runner 分配 shell 标签:

      sudo gitlab-runner tag <runner_id> shell
      
  2. 验证 Runner

    • 确保 Runner 已经成功注册并在线。
    • 检查 Runner 的标签是否正确设置。

通过以上步骤,您可以在 .gitlab-ci.yml 文件中指定某个 job 使用 shell 执行器,而其他 job 继续使用全局配置的 docker 执行器。

相关推荐
Algorithm15768 小时前
mac上使用docker搭建gitlab
macos·docker·gitlab
极小狐1 天前
GitLab 如何跨版本升级?
gitlab·devsecops·devops·极狐gitlab·安全合规
xixingzhe22 天前
gitlab角色、权限
gitlab
Source、2 天前
gitlab和jenkins连接
运维·gitlab·jenkins
公西雒4 天前
关于在GitLab的CI/CD中用docker buildx本地化多架构打包dotnet应用的问题
ci/cd·docker·gitlab·qemu·dotnet
todoitbo4 天前
gitlab-runner中搭建nvm、nrm以及优化maven打包
java·gitlab·maven
Hi202402175 天前
Gitlab自动化相关脚本
运维·自动化·gitlab
极小狐5 天前
极狐GitLab 签约足下科技,加速国产智驾操作系统的发展与普及
gitlab·devsecops·devops·极狐gitlab·安全合规
小蜜蜂爱编程5 天前
gitlab ci/cd搭建及使用笔记
笔记·ci/cd·gitlab