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

news2024/12/30 1:01:45

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


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


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

文章目录

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

注:以下说明只针对建立group组且未授权root权限的用户
由于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的配置文件,我们先创建一个文件夹用于后续挂载使用

mkdir -p /data/gitlab-runner/config

在这里插入图片描述

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

docker pull gitlab/gitlab-runner:v15.6.0

在这里插入图片描述
在这里插入图片描述

运行容器

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

在这里插入图片描述

查看运行的容器

docker ps | grep gitlab

在这里插入图片描述

进入容器查看查看版本

docker exec -it gitlab-runner bash
gitlab-runner -v

在这里插入图片描述

3. Token获取

在gitlab的平台Runner中找到对应的URL地址和Token复制准备好,以备后续注册使用
主菜单–Admin–Runner
在这里插入图片描述
如图将其复制下来
在这里插入图片描述
RuUyXm9kDKxRLkeeCLXv

4. 注册

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

4.1 交互式注册

4.1.1 注册指令

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

docker exec -it gitlab-runner

在容器中输入注册指令

gitlab-runner register

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

docker exec -it gitlab-runner gitlab-runner register

在这里插入图片描述

注:如果直接食用注册命令报错

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

可尝试后缀加入–clt

4.1.2 Gitlab-Url

根据提示填写gitlab的URL地址,确保容器能够访问到该地址
此IP地址就是gitlab服务的地址,如我的gitlab服务器地址为172.30.0.224

Enter the GitLab instance URL (for example, https://gitlab.com/):
http://172.30.0.222/

在这里插入图片描述

4.1.3 Runner-Token

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

Enter the registration token:
RuUyXm9kDKxRLkeeCLXv

在这里插入图片描述

4.1.4 Runner的名称

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

Enter a description for the runner:
[5befda15d9b2]: gr01

在这里插入图片描述

4.1.5 Runner-Tag

根据提示填写Runner的Tag信息,会在Gitlab的界面显示并可修改,可不填
后续作业可通过tag指定在哪个runner上面运行构建

Enter tags for the runner (comma-separated):
01

在这里插入图片描述

4.1.6 Runner-Maintenance

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

Enter optional maintenance note for the runner:
root

在这里插入图片描述

4.1.7 Runner-Executor

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

docker
4.1.8 Runner-Executor-Version

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

docker:latest

执行完以上内容即可生成一个runner的配置文件,位置为/etc/gitlab-runner/config.toml
由于我们创建runner
容器时挂载了目录,该文件会同步出现在我们创建的本地挂载目录中/data/gitlab-runner/config/config.toml

4.1.9 重启Runner
gitlab-runner restart
4.1.10 查看list
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节点,并在注册时执行命令

gitlab-runner register --tls-ca-file 证书路径

4.2 非交互式注册

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

4.2.1 进入容器
docker exec -it 容器名 /bin/bash
4.2.2 注册

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

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中的参数解释如下

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

gitlab-runner register

6.2 列举运行程序

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

gitlab-runner list

6.3 验证runner是否连接

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

gitlab-runner verify

6.4 注销runner

取消已注册的runner

gitlab-runner unregister
6.4.1 用令牌注销

使用令牌注销已注册的runner

gitlab-runner unregister --url http://gitlab.xxxx.com/ --token xxxxx
6.4.2 用名称注销

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

gitlab-runner unregister --name runner名称
6.4.3 注销所有runner

直接注销所有runner

gitlab-runner unregister --all-runners

7. 作业演示1

如何使用Runner来进行项目代码的打包等作业
首先需要有一个项目代码,然后再项目代码根目录需要有一个.gitlab-ci.yml文件用来定义CICD流程
主要是这个.gitlab-ci.yml文件
模拟:

7.1 项目文件

项目代码就一个文件index.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

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文件并填充内容

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


感谢阅读,祝君暴富!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1408762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GitLab升级版本(任意用户密码重置漏洞CVE-2023-7028)

目录 前言漏洞分析影响范围查看自己的GitLab版本升级路程 升级过程13.1.1113.8.8 - 14.0.1214.3.614.9.5 - 16.1.6 前言 最近GitLab发了个紧急漏洞需要修复&#xff0c;ok接到命令立刻着手开始修复&#xff0c;在修复之前先大概了解一下这个漏洞是什么东西 漏洞分析 1、组件…

免费的 UI 设计资源网站 Top 8

今日与大家分享8个优秀的免费 UI 设计资源网站。这些网站的资源包括免费设计材料站、设计工具、字体和其他网站&#xff0c;尤其是一些材料站。它们是免费下载的&#xff0c;材料的风格目前很流行&#xff0c;适合不同的项目。非常适合平面设计WEB/UI设计师收藏&#xff0c;接下…

.git 文件夹结构解析

.git 文件夹结构解析 在这篇文章就让我们来看看这个 Git 仓库里的文件分别都是用来干什么的&#xff0c;以及在执行了相关的 Git 命令后这些文件会如何响应。 hooks&#xff08;钩&#xff09;&#xff1a;存放一些shell脚本info&#xff1a;存放仓库的一些信息logs&#xff…

1分钟部署幻兽帕鲁联机服务,PalWorld服务器搭建教程(阿里云)

1分钟部署幻兽帕鲁联机服务&#xff0c;PalWorld服务器搭建教程 最近这游戏挺火&#xff0c;很多人想跟朋友联机&#xff0c;如果有专用服务器&#xff0c;就不需要房主一直开着电脑&#xff0c;稳定性也好得多。 概述 幻兽帕鲁是Pocketpair开发的一款开放世界生存制作游戏&…

Linux系统Shell脚本编程之条件语句

一、条件测试 Shell 环境根据命令执行后的返回状态值 " $? " 来判断是否执行成功&#xff0c;当返回值为0时表示成功&#xff0c;否则表示失败或异常&#xff08;非0值&#xff09;。使用专门的测试工具 test 命令&#xff0c;可以对特定条件进行测试&#xff0c;并…

金融OCR领域实习日志(一)

一、OCR基础 任务要求&#xff1a; 工作原理 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是指电子设备&#xff08;例如扫描仪或数码相&#xff09;检查纸上打印的字符&#xff0c;经过检测暗、亮的模式肯定其形状&#xff0c;而后用…

先进车辆驾驶舱系统的强大网络安全协议

近年来&#xff0c;车辆驾驶舱系统发展迅速&#xff0c;融入了导航、娱乐和车辆性能监控系统等先进技术。随着驾驶舱变得更加互联和依赖软件&#xff0c;它们也变得更容易受到网络安全威胁。实施强大的网络安全协议对于保护驾驶员和乘客以及保持车辆运行的完整性至关重要。 本…

支付宝推出新年“五福节”活动,新增四大AI玩法;大型语言模型综合指南

&#x1f989; AI新闻 &#x1f680; 支付宝推出新年“五福节”活动&#xff0c;新增四大AI玩法 摘要&#xff1a;支付宝宣布今年的“集五福”活动升级为“五福节”&#xff0c;新增了四大AI玩法&#xff1a;飙戏小剧场、时空照相馆、会说话红包和大家来找福。用户可以通过拼…

uniapp canvas做的刮刮乐解决蒙层能自定义图片

最近给湖南中烟做元春活动&#xff0c;一个月要开发4个小活动&#xff0c;这个是其中一个难度一般&#xff0c;最难的是一个类似鲤鱼跃龙门的小游戏&#xff0c;哎&#xff0c;真实为难我这个“拍黄片”的。下面是主要代码。 <canvas :style"{width:widthpx,height:hei…

c语言-枚举和联合体

文章目录 前言一、枚举类型1.1 枚举类型的定义1.2 枚举类型的使用1.3 枚举的优点 二、联合体类型2.1 联合体类型的定义2.2 联合体类型的特点2.3 联合体大小的计算 总结 前言 本篇文章介绍c语言中的枚举类型和联合体类型 一、枚举类型 1.1 枚举类型的定义 枚举类型和结构体类…

【C++干货铺】C++中的四种类型转换

个人主页点击直达&#xff1a;小白不是程序员 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 C语言中的类型转换 为什么C需要四种类型转化 C强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast RTTI C语言中的类型转换 在C语言中&…

2023 IoTDB Summit:中核武汉核电运行技术股份有限公司主管工程师方华建《IoTDB在核电数字化转型过程的应用实践》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

ERP读书笔记20240125-1

ERP&#xff08;Enterprise Resource Planning&#xff0c;企业资源计划&#xff09;的发展经历了从 MRP&#xff08;Material Requirements Planning&#xff0c;物料需求计划&#xff09;到 MRP2&#xff08;Manufacturing Resources Planning&#xff0c;制造资源计划&#…

OpenCV-26 拉普拉斯算子

一、拉普拉斯算子概念及其推导 索贝尔算子是模拟一阶导数&#xff0c;一阶导数越大的地方说明变化越剧烈&#xff0c;越有可能是边缘。 但是如果我们对f&#xff08;t&#xff09;求二阶导数呢&#xff1f; 可以发现边缘处的二阶导数 0&#xff0c;因此&#xff0c;我们可以利…

跟着cherno手搓游戏引擎【10】使用glm窗口特性

修改ImGui层架构&#xff1a; 创建&#xff1a; ImGuiBuild.cpp&#xff1a;引入ImGui #include"ytpch.h" #define IMGUI_IMPL_OPENGL_LOADER_GLAD//opengl的头文件需要的定义&#xff0c;说明使用的是gald #include "backends/imgui_impl_opengl3.cpp" …

C++力扣题目56--合并区间 738--单调递增的数字 968--监控二叉树

56. 合并区间 力扣题目链接(opens new window) 给出一个区间的集合&#xff0c;请合并所有重叠的区间。 示例 1: 输入: intervals [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2: 输入: interv…

Netty的解码器和编码器

链路图 一个完整的RPC请求中&#xff0c;netty对请求数据和响应数据的处理流程如下图所示 网络线路中传输的都是二进制数据&#xff0c;之后netty将二进制数据解码乘POJO对象&#xff0c;让客户端或者服务端程序处理。 解码的工具称为解码器&#xff0c;是一个入站处理器InBo…

分布式应用程序设计项目管理

1. 项目的定义 项目是一种特定的、新颖的行动&#xff0c;目的是以有条不紊、逐步的方式构建一个尚未存在确切对应物的未来现实。它是对精心制定的需求的回应&#xff0c;旨在满足业主的需要。项目包括一个可能是物理或智力的目标&#xff0c;并且需要使用给定的资源来执行一系…

Gold-YOLO(NeurIPS 2023)论文与代码解析

paper&#xff1a;Gold-YOLO: Efficient Object Detector via Gather-and-Distribute Mechanism official implementation&#xff1a;https://github.com/huawei-noah/Efficient-Computing/tree/master/Detection/Gold-YOLO 存在的问题 在过去几年里&#xff0c;YOLO系列已经…

某马头条——day10

热文章数据查询 分布式任务调度xxl-job 概述 环境搭建 docker化部署 docker run -p 3306:3306 --name mysql57 \ -v /opt/mysql/conf:/etc/mysql \ -v /opt/mysql/logs:/var/log/mysql \ -v /opt/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDroot\ -d mysql:5.7 dock…