003.Gitlab配置runner

gitlab runner介绍

gitlab runner概述

gitlab runner是用于执行 gitlab cicd任务的工具,最终执行gitlab cicd任务的组件就是runner。

gitlab runner可以部署在Windows、Linux、Kubernetes中,可以通过包管理器、二进制、容器等方式进行部署。

gitlab runner将监听gitlab服务器上由项目中的 .gitlab-ci.yml 文件定义的作业。当作业被触发时,gitlab runner将下载代码并执行任务。
流水线的具体执行方式则是在 .gitlab-ci.yml 文件中按照一定的语法格式定义。
流水线的执行动作则由 gitlab runner 进行。

gitlab runner 有多种类型,主要有shell类型和docker类型。
shell runner是最基本的runner类型,它会在所在机器上打开一个终端,并执行作业定义的命令。
docker runner是在docker 容器中执行作业的runner类型,可以在特定的容器环境进行。

总结:GitLab Runner 是一个独立的应用程序,用于处理GitLab指派的作业。它可以运行在任何提供给它的主机上,只需要安装对应的GitLab Runner软件并注册到GitLab实例。

gitlab runner类型

shell类型的gitlab runner,通俗来说就是gitlab配置一个Linux虚拟机作为gitlab CI/CD流水线的执行机器。

通常情况下开发人员直接操作的是代码仓,即对代码仓的流水线而言,需要为代码仓配置一个执行机器。
同事devops运维人员,通常管理不止一个代码仓,甚至不止一个组,最佳建议是为一个组配置gitlab runner更加合理,管理更方便。

通常配置的 Gitlab Runner 有下面几种类型:

  • shared:共享类型
    运行整个平台项目的作业(gitlab),可用于极狐GitLab 实例中的每一个项目。
    当您有多个具有相似要求的作业时,请使用共享 runner。与其让多个 runner 闲置在许多项目中,不如让几个 runner 处理多个项目。

  • group:群组类型
    运行特定 group 下的所有项目的作业(group)。

  • specific:项目类型
    运行指定的项目作业(project),如果已经注册了一个指定 runner,可以将该 runner 分配给其他项目。
    对于现有项目,必须安装并注册它们。

如下各类型对比参考:云原生之GitLab集成Runner

特性共享runner专用runner群组runner
运行环境为整个gitLab实例共享的Runner为特定项目或组织专门配置的Runner为一组项目或组织共享的Runner
配置和管理集中配置和管理整个GitLab实例的Runner需要单独配置和管理每个项目的Runner可以集中配置和管理一组项目的Runner
资源隔离共享资源,可能会受到其他项目的影响提供独立的资源,不与其他项目共享可以集中配置和管理一组项目的Runner
安全性可能存在安全隐患,需要谨慎使用提供更高的安全性,仅用于特定项目提供一定程度的安全性
可扩展性可以共享一组Runner,减少资源需求随着项目数量增加,需要增加专用Runner可以根据一组项目的共同需求进行定制
灵活性适用于整个GitLab实例,定制性较低可以根据项目的特定需求进行定制可以根据一组项目的共同需求进行定制
使用场景适用于整个GitLab实例的通用场景适用于有严格隔离需求的敏感项目适用于一组项目共享资源的情况
部署和维护成本部署和维护整个GitLab实例的Runner需要为每个项目单独部署和维护Runner部署和维护一组Runner

提示:建议所部署的gitlab runner和gitlab版本相同,GitLab Runner 的主版本.小版本 应和GitLab 的主版本.小版本 建议保持同步。老版本GitLab Runner 可能适用于新版本的GitLab,反之亦然。但是如果存在版本差异,功能特性可能不可用或无法正常工作。。

多种不同类型的runner更详细的解释参考官方文档:管理 Runner

gitlab runner特性

GitLab Runner 主要具有以下特性:

  • 并行运行多个作业。
  • 在多个服务器上使用多个令牌(甚至每个项目)。
  • 限制每个令牌的并发作业数。
  • 作业可以在以下环境运行作业:
    • 本地。
    • 使用 Docker 容器。
    • 使用 Docker 容器并通过 SSH 执行作业。
    • 在不同的云和虚拟化平台上使用弹性伸缩的 Docker 容器。
    • 连接到远程 SSH 服务器。
  • 使用 Go 语言编写并作为单个二进制文件分发,没有任何其它需求。
  • 支持 Bash、PowerShell Core 和 Windows PowerShell。
  • 适用于 GNU/Linux、macOS 和 Windows(可以运行 Docker 的几乎任何环境)。
  • 允许自定义作业运行环境。
  • 无需重启即可自动重新加载配置。
  • 易于使用的设置,支持 Docker、Docker-SSH、Parallels 或 SSH 运行环境。
  • 启用缓存 Docker 容器。
  • 轻松安装为 GNU/Linux、macOS 和 Windows 的服务。
  • 嵌入式 Prometheus 指标 HTTP 服务器。
  • 支持被监控,并将 Prometheus 指标和其他特定作业的数据传递给极狐GitLab。

GitLab Runner工作流程

GitLab Runner 的工作流程如下:

  1. 注册 Runner:首先,需要在 GitLab 中注册一个 Runner。这可以通过在 GitLab 中基于所需的不同类型,创建一个新的 Runner 配置来完成。在注册过程中,需要为 Runner 分配一个唯一的 token,用于与 GitLab 服务器进行身份验证。

  2. 安装和配置 Runner:在环境中安装 GitLab Runner,并使用注册时获得的 token 进行身份验证。安装完成后,需要通过配置文件或命令行参数对 Runner 进行配置,包括指定 Runner 的名称、token、执行器类型等信息。

提示:若使用helm环境,也可以随着部署gitlab的同时部署runner,使用默认的secret完成初始化,后期再进行注册,然后upgrade。

  1. 运行和监听:启动 GitLab Runner 后,它会连接到 GitLab 服务器,并开始监听作业的下发。Runner 会定期向 GitLab 服务器发送心跳信号,以保持连接。当有新的作业出现时,GitLab 服务器会将作业分配给可用的 Runner。

  2. 下载代码:当 Runner 接收到作业时,它会从 GitLab 服务器上获取项目的代码。这通常是通过克隆 Git 存储库或者拉取最新的代码变更来完成的。

  3. 执行作业:一旦代码下载完成,Runner 将根据作业的定义执行相应的操作。这可以是构建项目、运行测试、生成文档、打包应用程序等等。Runner 可以使用预定义的执行器(如 Shell、Docker、Kubernetes)来运行作业。

  4. 提交结果:当作业执行完成后,Runner 将结果提交回 GitLab 服务器。这包括构建日志、测试报告、生成的文件等。这些结果可以在 GitLab 的界面中查看和分析。

  5. 清理和释放资源:完成作业后,Runner 将清理执行环境,并释放使用的资源。这可以包括删除临时文件、停止容器、释放服务器资源等。

整个过程是自动化的,GitLab Runner 负责管理作业的执行和结果的提交。它可以与 GitLab CI/CD 配合使用,为开发团队提供一个强大的持续集成和持续交付平台。

通过配置不同的执行器和作业定义,可以根据项目的需求和特定的环境设置来灵活地定义和执行作业。

gitlab runner使用

gitlab runner部署

可以通过官方提供的安装包来完成,支持多种操作系统包括Linux、Windows和macOS。
安装步骤通常包括下载安装程序、安装它、然后配置一些基本参数,如GitLab服务器的URL和Runner的注册令牌。

055

本环境已在Kubernetes中以Pod(组件)的方式通过helmGitLab Runner Helm Chart部署了runner,对于runner的其他部署方式直接参考官方文档: gitlab runner安装 ,官网也直接提供了 SaaS 化的runner服务,直接订阅即可。

gitlab runner注册

在gitlab runner 15.6及之后,注册令牌和runner参数 register 被弃用,并已被身份验证令牌替代,17版本可以手动额外开启,预计 18 版本正式删除。

管理员——>设置——>CI/CD——>runner,允许runner注册令牌。

058

如下每一个类型的添加都需要配置一些基础项,如标签。
当运行 CI/CD 作业时,通过分配的标签确定要使用的 Runner。
标签是为作业过滤可用 Runner 列表的唯一方式。

  • 共享型runner
    管理员——>CICD——>runner,新建实例runner。

054

  • 项目型runner
    进行具体项目里,如myapp,然后 CICD ,然后Runner,新建项目 runner 。

055

  • 群组型runner
    进行具体群组里,如mygroup,然后 构建 ,然后Runner,新建群组 runner 。

057

也可以如下从项目界面最右下角调整到群组runner。

056

提示:specific runners、group runners、shared runners本质上都代表着一台可以运行脚本或者执行操作的机器,只是对于不同仓库的可视情况不同。它们的注册方式都一样,只是所使用的token不同。

gitlab runner配置

helm 部署gitlab runner后,在对应的Pod里存在如下配置文件:

  • 查看配置
    进入相应的runner pod,然后查看相应的配置。
[root@master01 gitlab]# kubectl -n gitlab exec -ti mygitlab-gitlab-runner-cd75cb646-bfrkf -- bash
mygitlab-gitlab-runner-cd75cb646-bfrkf:/$ cat /home/gitlab-runner/.gitlab-runner/config.toml 
concurrent = 10                                     # 可并行运行作业的数量,0 表示不限制
check_interval = 3                                  # 检查新作业的时间间隔
log_level = "info"
connection_max_age = "15m0s"
shutdown_timeout = 0

[session_server]                                    # 允许用户与作业进行交互
  session_timeout = 1800

[[runners]]                                         # 如果有多个 runners,就会有多个 [[runners]]
  name = "mygitlab-gitlab-runner-cd75cb646-bfrkf"   # Runner 名称
  url = "https://gitlab.linuxsb.com"                # gitlab 的地址
  id = 8
  token = "t1_tUxnJGLxhHAYuk4GCjkE"                 # gitlab 上的 token
  token_obtained_at = 2025-03-02T09:15:33Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "kubernetes"                           # Runner 的执行器
  [runners.custom_build_dir]                        # 允许用户为作业定义自定义构建目录
  [runners.cache]                                   # 分布式缓存目录
    MaxUploadedArchiveSize = 0
    [runners.cache.s3]
      AccessKey = "lQvK6Hu4hRAqSCB7F8rDhSPXZ3aFYyF2JSjOtckxUVktwPlx6sYN7fI2Rj4uiqQU"
      SecretKey = "VN5BA773SYBCwFJu9CZzVTQ0rEcHL7xjn6osDbYgKMp50oW1FIqubOIKFOrTMPCE"
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.kubernetes]
    host = ""
    bearer_token_overwrite_allowed = false
    image = ""
    namespace = "gitlab"
    namespace_overwrite_allowed = ""
    namespace_per_job = false
    node_selector_overwrite_allowed = ""
    node_tolerations_overwrite_allowed = ""
    pod_labels_overwrite_allowed = ""
    service_account_overwrite_allowed = ""
    pod_annotations_overwrite_allowed = ""
    [runners.kubernetes.init_permissions_container_security_context]
      [runners.kubernetes.init_permissions_container_security_context.capabilities]
    [runners.kubernetes.build_container_security_context]
      [runners.kubernetes.build_container_security_context.capabilities]
    [runners.kubernetes.helper_container_security_context]
      [runners.kubernetes.helper_container_security_context.capabilities]
    [runners.kubernetes.service_container_security_context]
      [runners.kubernetes.service_container_security_context.capabilities]
    [runners.kubernetes.volumes]
    [runners.kubernetes.dns_config]
  • 移出runner
    若需要移出runner,可在图形界面删除,也可通过如下方式进行移除。
mygitlab-gitlab-runner-cd75cb646-bfrkf:/$ gitlab-runner list
Runtime platform                                    arch=amd64 os=linux pid=8603 revision=3153ccc6 version=17.7.0
Listing configured runners                          ConfigFile=/home/gitlab-runner/.gitlab-runner/config.toml
mygitlab-gitlab-runner-cd75cb646-bfrkf              Executor=kubernetes Token=t1_tUxnJGLxhHAYuk4GCjkE URL=https://gitlab.linuxsb.com

mygitlab-gitlab-runner-cd75cb646-bfrkf:/$ gitlab-runner unregister --url https://gitlab.linuxsb.com --token t1_tUxnJGLxhHAYuk4GCjkE

提示:runner更多的配置参考: runner高级配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木二_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值