gitlab runner 安装、注册、配置、使用

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文章目录

  • 一、介绍
    • [1. 类型](#1. 类型)
    • [2. 状态](#2. 状态)
    • [3. 原理](#3. 原理)
    • [4. 部署方式](#4. 部署方式)
    • [5. 运行方式](#5. 运行方式)
  • [二、Docker中部署Gitlab Runner](#二、Docker中部署Gitlab Runner)
    • [1. 环境](#1. 环境)
    • [2. 安装](#2. 安装)
    • [3. Token获取](#3. Token获取)
    • [4. 注册](#4. 注册)
      • [4.1 交互式注册](#4.1 交互式注册)
        • [4.1.1 注册指令](#4.1.1 注册指令)
        • [4.1.2 Gitlab-Url](#4.1.2 Gitlab-Url)
        • [4.1.3 Runner-Token](#4.1.3 Runner-Token)
        • [4.1.4 Runner的名称](#4.1.4 Runner的名称)
        • [4.1.5 Runner-Tag](#4.1.5 Runner-Tag)
        • [4.1.6 Runner-Maintenance](#4.1.6 Runner-Maintenance)
        • [4.1.7 Runner-Executor](#4.1.7 Runner-Executor)
        • [4.1.8 Runner-Executor-Version](#4.1.8 Runner-Executor-Version)
        • [4.1.9 重启Runner](#4.1.9 重启Runner)
        • [4.1.10 查看list](#4.1.10 查看list)
      • [4.2 非交互式注册](#4.2 非交互式注册)
        • [4.2.1 进入容器](#4.2.1 进入容器)
        • [4.2.2 注册](#4.2.2 注册)
    • [5. 配置](#5. 配置)
    • [6. 命令使用](#6. 命令使用)
      • [6.1 注册指令](#6.1 注册指令)
      • [6.2 列举运行程序](#6.2 列举运行程序)
      • [6.3 验证runner是否连接](#6.3 验证runner是否连接)
      • [6.4 注销runner](#6.4 注销runner)
        • [6.4.1 用令牌注销](#6.4.1 用令牌注销)
        • [6.4.2 用名称注销](#6.4.2 用名称注销)
        • [6.4.3 注销所有runner](#6.4.3 注销所有runner)
    • [7. 作业演示1](#7. 作业演示1)
      • [7.1 项目文件](#7.1 项目文件)
      • [7.2 流程定义文件](#7.2 流程定义文件)
    • [8. 作业演示2](#8. 作业演示2)
  • [三、K8S中部署Gitlab Runner](#三、K8S中部署Gitlab Runner)
    • [1. 环境](#1. 环境)
    • [2. 安装](#2. 安装)
    • [3. 注册](#3. 注册)
    • [4. 配置](#4. 配置)
    • [5. 使用](#5. 使用)

一、介绍

Gitlab Runner作为一个开源的项目,使用Go语言编写,可运行在不同系统重

Gitlab Runner用于运行作业并将结果发给gitlab服务器

Gitlab Runner与Gitlab CI结合使用,Gitlab CI是gitlab的开源持续集成服务,用于协调作业

Gitlab Runner的版本安装时应注意与Gitlab版本尽量同步以防版本差异导致报错

1. 类型

Gitlab Runner包含三种类型,分别对应三种不同情况(或者说是作用范围)

Shared:共享类型,运行整个平台的项目的作业(gitlab)

Group:项目组类型,运行特定group下的所有项目的作业(group)

Specific:项目类型,运行指定的项目作业(project)

不同的类型有对应的token,可到对应的位置获取

区别在于左上角的名称不一样,平台-Admin Area,组-组名,项目-项目名称

平台Runner

组Runner

项目Runner

这里可以看到gitlab的url和token

本篇在平台类型注册runner,即使用平台类型的token进行注册runner

2. 状态

Gitlab Runner有两种状态,locked和paused

locked:无法运行项目作业

paused:不会运行作业

3. 原理

gitlab-runner注册到gitlab,gitlab中的代码更新时gitlab就会通知gitlab-runner,gitlab-runner拉取本地最新代码后执行.gitlab-ci.yaml文件定义的脚本,具体的脚本可参考官网

4. 部署方式

gitlab-runner支持多种部署方式,如本地Windows部署、容器Docker中部署、K8S集群中以pod形式部署

本篇尝试以docker容器部署及k8s集群中部署

5. 运行方式

gitlab-runner可以选择以什么执行器来运行,如docker、kubernetes、shell等

在注册时可以选择一种执行器来指定,本篇以docker为例

注:

由于gitlab账号并不是管理员权限,仅对group具备maintainer权限,所以gitlab-runner使用group作为绑定方式

绑定关系:gitlab--gitlab-runner--创建pod运行gitlab-runner中的stages

但是,我们安装gitlab后,使用的账号为root权限,没有权限限制,故,此步骤省略无需绑定

注:为避免注册失败或后续runner不可用,gitlab-runner与gitlab最好不要安装在相同的服务器

如果只是测试环境,可在同一台进行尝试,遇到问题再解决,一般不会出问题

本篇gitlab服务在woker2节点,runner即将安装的位置为master主节点

二、Docker中部署Gitlab Runner

1. 环境

系统版本:Linux---centos

docker版本:24.0.7

gitlab版本:gitlab/gitlab-ce:15.6.0-ce.0

gitlab-runner版本:gitlab-runner:v15.6.0

注:gitlab-runner的版本号和gitlab的略有差异,runner的版本需加v前缀方可使用

2. 安装

为了挂载runner的配置文件,我们先创建一个文件夹用于后续挂载使用

l 复制代码
mkdir -p /data/gitlab-runner/config

拉取gitlab-runner镜像,尽量与gitlab版本保持一致

l 复制代码
docker pull gitlab/gitlab-runner:v15.6.0


运行容器

l 复制代码
docker run -itd --restart always --name gitlab-runner \
-v /data/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:v15.6.0

查看运行的容器

l 复制代码
docker ps | grep gitlab

进入容器查看查看版本

l 复制代码
docker exec -it gitlab-runner bash
l 复制代码
gitlab-runner -v

3. Token获取

在gitlab的平台Runner中找到对应的URL地址和Token复制准备好,以备后续注册使用

主菜单--Admin--Runner

如图将其复制下来

RuUyXm9kDKxRLkeeCLXv

4. 注册

可通过gitlab-runner register命令进行交互式注册,也可通过命令行一次性将参数配置进行注册

4.1 交互式注册

4.1.1 注册指令

首先进入容器,如果当前就在容器内可省略,gitlab-runner为容器名

l 复制代码
docker exec -it gitlab-runner

在容器中输入注册指令

l 复制代码
gitlab-runner register

或者直接在进入容器的命令后面加上注册指令可直接进入并开始注册

l 复制代码
docker exec -it gitlab-runner gitlab-runner register
4.1.2 Gitlab-Url

根据提示填写gitlab的URL地址,确保容器能够访问到该地址

此IP地址就是gitlab服务的地址,如我的gitlab服务器地址为172.30.0.224

l 复制代码
http://172.30.0.222/
4.1.3 Runner-Token

根据提示填写runner的Token,我们之前复制的是平台类型的共享型token,粘贴到这里

l 复制代码
RuUyXm9kDKxRLkeeCLXv
4.1.4 Runner的名称

根据提示填写Runner的描述信息,也就是runner的名称,会在Gitlab界面显示并可修改,可不填

l 复制代码
gr01
4.1.5 Runner-Tag

根据提示填写Runner的Tag信息,会在Gitlab的界面显示并可修改,可不填

后续作业可通过tag指定在哪个runner上面运行构建

l 复制代码
01
4.1.6 Runner-Maintenance

根据提示填写用户权限备注,可不填

l 复制代码
root
4.1.7 Runner-Executor

根据提示选择Runner使用的执行器种类并填写,建议docker

l 复制代码
docker
4.1.8 Runner-Executor-Version

根据提示填写docker镜像版本来运行job(可在.gitlab-ci.yml中修改需要的image)

l 复制代码
docker:latest

执行完以上内容即可生成一个runner的配置文件,位置为/etc/gitlab-runner/config.toml

由于我们创建runner

容器时挂载了目录,该文件会同步出现在我们创建的本地挂载目录中/data/gitlab-runner/config/config.toml

4.1.9 重启Runner
l 复制代码
gitlab-runner restart
4.1.10 查看list
l 复制代码
gitlab-runner list

注册失败

复制代码
ERROR: Registering runner... failed                 runner=RuUyXm9k status=couldn't execute POST against http://172.30.0.222/api/v4/runners: Post "http://172.30.0.222/api/v4/runners": dial tcp 172.30.0.222:80: connect: connection refused
PANIC: Failed to register the runner.  

原因:

创建gitlab服务的时候使用的是自注册的证书,在gitlab-runner节点无法识别,将gitlab上的证书下载到gitlab-runner节点,并在注册时执行命令

l 复制代码
gitlab-runner register --tls-ca-file 证书路径

4.2 非交互式注册

除了上面的提示信息进行填充参数注册,也可使用一次性参数填充注册

4.2.1 进入容器
l 复制代码
docker exec -it 容器名 /bin/bash
4.2.2 注册

在容器中执行以下命令即可完成注册,如果在容器外,需添加--non-interacitive,下方已加,如已进入容器可省略此参数

l 复制代码
gitlab-runner register \
--non-interactive \
--url "http://ip:30021" \
--registration-token "xxxxxxxx" \
--executor "docker" \
--docker-image maven:latest \
--description "runner-test01" \
--tag-list "runner-test" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"

token和url需要在gitlab的runner界面获取

executor是执行器,表示runner中pipeline以什么方式运行,支持多种类型的执行器

docker-image表示runner中pipeline以哪个镜像为基础来执行executor

tag-list表示runner的tag,后续作业可通过tag指定在哪个runner上面运行构建

runner注册成功后会出现在gitlab的CICD界面

5. 配置

生成的配置文件config.toml中的参数解释如下

l 复制代码
concurrent =1 #可并行运行作业的数量,0表示无限制
check_interval = 0 #检查新作业的时间间隔,0表示默认3秒

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

[[runners]]
	name = "my runner" #Runner名称
	url = "http://ip/" #gitlab server地址
	token = "asdfjasldkjtelsjsdfl" #Runner Token
	executor = "docker" #Runner的执行器,表示runner中pipeline以什么方式运行,支持多种类型的执行器
	[runners.custom_build_dir] #允许用户为作业定义自定义构建目录
	[runners.cache] #分布式缓存目录
		[runners.cache.s3]
		[runners.cache.gcs]
		[runners.cache.azure] 

配置runner是通过修改此配置文件,文件修改后不需要重启,每隔五分钟(也有说三秒的)gitlab-runner会检查配置是否修改并重新加载

注册完成后runner为锁定状态,需要使用时可右边点编辑然后锁定到当前项目取消勾选,将运行未标记的作业勾选即可运行

6. 命令使用

gitlab-runner命令汇总

6.1 注册指令

默认交互模式下使用即在容器内使用,非交互模式需添加--non-interactive

l 复制代码
gitlab-runner register

6.2 列举运行程序

列举保存在配置文件中的所有运行程序

l 复制代码
gitlab-runner list

6.3 验证runner是否连接

检查注册的runner是否可以正常连接,不能验证gitlab服务是否在使用runner

l 复制代码
gitlab-runner verify

6.4 注销runner

取消已注册的runner

l 复制代码
gitlab-runner unregister
6.4.1 用令牌注销

使用令牌注销已注册的runner

l 复制代码
gitlab-runner unregister --url http://gitlab.xxxx.com/ --token xxxxx
6.4.2 用名称注销

使用名称注销,同名则删除第一个

l 复制代码
gitlab-runner unregister --name runner名称
6.4.3 注销所有runner

直接注销所有runner

l 复制代码
gitlab-runner unregister --all-runners

7. 作业演示1

如何使用Runner来进行项目代码的打包等作业

首先需要有一个项目代码,然后再项目代码根目录需要有一个.gitlab-ci.yml文件用来定义CICD流程

主要是这个.gitlab-ci.yml文件

模拟:

7.1 项目文件

项目代码就一个文件index.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>CICD测试</title>
</head>
<body>
<h1>Gitlab CICD 测试!!!</h1>
</body>
</html>

7.2 流程定义文件

.gitlab-ci.yml

yaml 复制代码
build-job:
  stage: build
  script:
    - echo "Hello, $GITLAB_USER_LOGIN!"

test-job1:
  stage: test
  script:
    - echo "This job tests something"

test-job2:
  stage: test
  script:
    - echo "This job tests something, but takes more time than test-job1."
    - echo "After the echo commands complete, it runs the sleep command for 20 seconds"
    - echo "which simulates a test that runs 20 seconds longer than test-job1"
    - sleep 20

deploy-prod:
  stage: deploy
  script:
    - echo "This job deploys something from the $CI_COMMIT_BRANCH branch."

build阶段启动一个作业,输出一段文本,test阶段并行启动两个作业,分别输出一段文本,deploy阶段启动一个作业,输出一段文本,三个阶段模拟构建、测试、部署流程

将项目推送到gitlab后,后续任意提交内容都可触发流水线执行,当然也可以手动执行,项目中的CICD,选择运行流水线即可执行

8. 作业演示2

同样的,在项目的根目录中创建一个.gitlab-ci.yml文件并填充内容

yaml 复制代码
stages:
  - maven
  - build
  - deploy
  
maven_job:
  stage: maven
  tags:
    - default
  only:
    - master
  script:
    - echo "This is the first maven job"
    
build_job:
  stage: build
  tags:
    - default
  only:
    - master
  script:
    -  echo "This is the first build job"

deploy_job:
  stage: deploy
  tags:
    - default
  only:
    - master
  script:
    - echo "This is the first deploy job"

https://blog.csdn.net/yejingtao703/article/details/83065591

https://blog.csdn.net/zyy247796143/article/details/123842374

三、K8S中部署Gitlab Runner

1. 环境

系统版本:Linux---centos

集群版本:k8s--1.23.0

docker版本:24.0.7

gitlab版本:gitlab/gitlab-ce:14.0.0-ce.0

gitlab-runner版本:gitlab-runner:14.0.1-ce.0

2. 安装

安装方式有多种

3. 注册

4. 配置

5. 使用

https://www.jianshu.com/p/fd00a9cc87ef

https://zhuanlan.zhihu.com/p/441581000

https://blog.csdn.net/yejingtao703/article/details/83065591

https://blog.csdn.net/zyy247796143/article/details/123842374

https://zhuanlan.zhihu.com/p/630393918

https://blog.csdn.net/qq_37084490/article/details/126478452

https://www.jianshu.com/p/0ca2174e34ad

https://www.cnblogs.com/tcy1/p/16320660.html


感谢阅读,祝君暴富!

相关推荐
Jeanyia2 天前
GitLab 配套 Git 常用命令
git·gitlab
极小狐2 天前
极狐GitLab 补丁版本:19.2.1、19.1.3、19.0.5
网络·安全·gitlab·极狐gitlab·安全更新·补丁版本
rustfs3 天前
GitLab 如何与 RustFS 集成?
分布式·rust·gitlab
郝亚军5 天前
gitlab常用命令
gitlab
xixingzhe28 天前
Java 使用 GitLab4J 实现 WebHook
gitlab
童槿顏丶10 天前
GitLab部署到Linux
linux·运维·gitlab
InfinitePlus10 天前
Gitlab docker版本安装
docker·容器·gitlab
进击切图仔10 天前
GitLab 新用户创建与项目授权操作指南
gitlab
技术小结-李爽11 天前
【工具】git与gitee和gitlab和github等等有什么区别?
git·gitee·gitlab
xiaoxiangsiyan12 天前
GitLab CI/CD 自托管(EE 企业版)+ Kubernetes Runner 集群 + ArgoCD(GitOps 部署)
运维·网络·ci/cd·容器·kubernetes·gitlab·argocd