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

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


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


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

文章目录

  • 一、介绍
    • 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 bash

在容器中输入注册指令

gitlab-runner register

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

docker exec -it gitlab-runner bash 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 Tokenexecutor = "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: buildscript:- echo "Hello, $GITLAB_USER_LOGIN!"test-job1:stage: testscript:- echo "This job tests something"test-job2:stage: testscript:- 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 20deploy-prod:stage: deployscript:- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."

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

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

8. 作业演示2

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

stages:- maven- build- deploymaven_job:stage: maventags:- defaultonly:- masterscript:- echo "This is the first maven job"build_job:stage: buildtags:- defaultonly:- masterscript:-  echo "This is the first build job"deploy_job:stage: deploytags:- defaultonly:- masterscript:- 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.mzph.cn/news/645686.shtml

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

相关文章

「一本通 3.6 例 1」分离的路径

题目描述 为了从 F F F 个草场中的一个走到另一个&#xff0c;贝茜和她的同伴们不得不路过一些她们讨厌的可怕的树。奶牛们已经厌倦了被迫走某一条路&#xff0c;所以她们想建一些新路&#xff0c;使每一对草场之间都会至少有两条相互分离的路径&#xff0c;这样她们就有多一…

vue常用指令(v-show)

一、v-show 指令 作用: 根据真假值,切换元素的显示状态 二、代码演示 1、v-show 绑定判断条件后&#xff0c;根据布尔值决定是否显示图片 不显示图片 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><…

骨传导是哪个意思?骨传导的应用领域在哪

很多人都问我骨传导是哪个意思&#xff1f;骨传导的应用领域在哪&#xff1f;我们都知道声音能够在固体、液体、空气三种介质中传播。通常情况下&#xff0c;声音进入我们内耳的方式主要有两种&#xff1a;空气传导和骨传导&#xff0c;骨传导也就是通过固体传导。我们比较熟悉…

深度学习——pycharm远程连接

目录 远程环境配置本地环境配置&#xff08;注意看假设&#xff01;&#xff01;!这是很多博客里没写的&#xff09;步骤1步骤2步骤2.1 配置Connection步骤2.2 配置Mappings 步骤3 配置本地项目的远程解释器技巧1 pycharm中远程终端连接技巧2 远程目录技巧3 上传代码文件技巧4 …

2024.1.23力扣每日一题——最长交替子数组

2024.1.23 题目来源我的题解方法一 枚举 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2765 我的题解 方法一 枚举 每次都以两个相邻作为满足要求的循环数据&#xff0c;并且以一个布尔变量控制循环的位置 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(1) pub…

【图像拼接】论文精读:Eliminating Structure and Intensity Misalignment in Image Stitching

第一次来请先看这篇文章:【图像拼接(Image Stitching)】关于【图像拼接论文精读】专栏的相关说明,包含专栏使用说明、创新思路分享等(不定期更新) 图像拼接系列相关论文精读 Seam Carving for Content-Aware Image ResizingAs-Rigid-As-Possible Shape ManipulationAdap…

自锁设计更稳固,同为科技(TOWE)服务器电脑IEC 60320电源线

说起IEC 60320标准电源线&#xff0c;可能很多人不知道具体是什么东西&#xff0c;但要说到台式电脑电源线&#xff0c;那大家就都能耳熟能详了。IEC 60320电源线的用途十分广泛&#xff0c;包括家用电器、医疗设备、数据中心服务器、商业机械设备、自动化生产线等都是用此类电…

API网关-Apinto压缩包方式自动化安装配置教程

文章目录 前言一、Apinto安装教程1. 复制脚本2. 增加执行权限3. 执行脚本4. Apinto命令4.1 启动Apinto4.2 停止Apinto4.3 重启Apinto4.4 查看Apinto版本信息4.5 加入Apinto集群4.6 离开Apinto集群4.7 查看Apinto节点信息 5. 卸载Apinto 二、Apserver(Apinto Dashboard V3)安装教…

将文件以指定格式存储~BMP~C的实现~FAT32格式

参考&#xff1a; BMP文件学习笔记&#xff08;一&#xff09;&#xff1a; C/C语言实现.bmp文件读写_c 写入bmp-CSDN博客 U盘到底用什么格式好&#xff1f;FAT32、NTFS还是exFAT&#xff1f; - 知乎 (zhihu.com) 第一部分&#xff1a; 位图文件头 BITMAPFILEHEADER&#x…

力扣1027. 最长等差数列

动态规划 思路&#xff1a; 可以参考力扣1218. 最长定差子序列目前不清楚公差&#xff0c;可以将序列最大最小值找到&#xff0c;公差的范围是 [-(max - min), (max - min)]&#xff0c;按公差递增迭代遍历求出最长等差数列&#xff1b; class Solution { public:int longest…

Mybatis-SqlSessionFactory/多数据源

下面的代码演示了发送一个HTTP请求到Controller&#xff0c;如果key“dev”&#xff0c;则查询dev数据库&#xff0c;否则查询默认的数据库 Resourceprivate SqlSessionFactory sqlSessionFactory;Resourceprivate DataSource defaultDataSource;Resourceprivate XXXMapper xxx…

go语言下划线、变量和常量

1、下划线 “_”是特殊标识符&#xff0c;用来忽略结果。 1.1. 下划线在import中 在Golang里&#xff0c;import的作用是导入其他package。import 下划线&#xff08;如&#xff1a;import hello/imp&#xff09;的作用&#xff1a;当导入一个包时&#xff0c;该包下的文件里…

IDEA 创建maven项目没有src

环境&#xff1a; IntelliJ IDEA 2022.3.3 (Ultimate Edition) JDK 17 Windows 11 10.0 Maven 3.9.5 创建maven项目的时候没有src目录 试过网上说的重新配置maven库&#xff0c;增加vm-options&#xff0c;并没有什么用。直到我看见了 正常创建就好了。

[计算机提升] 清理系统盘的前期准备

5.1 清理系统盘的前期准备 5.1.1 系统盘之殇&#xff1a;为什么系统盘会越来越大 在windows系统中&#xff0c;系统盘一般是C盘&#xff0c;随着电脑使用时间变长&#xff0c;系统盘会变得越来越大。而系统盘通常在安装系统时已经固定好了&#xff0c;如果系统盘的剩余空间太…

【前端基础--1】

为后面爬虫打基础 使用Visual Studio Code&#xff08;VS Code&#xff09; https://code.visualstudio.com/#alt-downloads 网页基础 创建一个html网页 新建一个文件 文件名后缀.html 书写网页模板 html:5 回车键&#xff08;或者Tab键&#xff09;英文感叹号! 回…

接收邮件触发器

无代码自动化-接收邮件触发器-做的最好的是make.com。数环通和集简云在这方面差了很多&#xff0c;我考虑主要原因应该是国内没有用邮件的习惯&#xff0c;都是微信来微信去。 2024年1月25日的观察结果 集简云 有邮件触发器&#xff0c;但是它获取的邮件信息很少。 我最关心…

深入解析MySQL数据库锁机制

目录 引言 一、锁的基本概念 1. 共享锁和排它锁 2. 行锁和表锁 二、MySQL锁的类型 1. 共享锁&#xff08;Shared Lock&#xff09; 2. 排它锁&#xff08;Exclusive Lock&#xff09; 3. 意向共享锁&#xff08;Intention Shared Lock&#xff09; 4. 意向排它锁&…

【动态规划】【map】【C++算法】1289. 下降路径最小和 II

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 map LeetCode1289. 下降路径最小和 II 给你一个 n x n 整数矩阵 grid &#xff0c;请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下降路径 定义为&#xff1a;从 grid 数组中的每一行选择一个数字&#xff0c;…

Qt防止创建窗口抢焦点

问题是&#xff0c;当我在 Qt 中打开一个新窗口时&#xff0c;它会自动窃取前一个应用程序的焦点。 有什么办法可以防止这种情况发生吗&#xff1f; setAttribute(Qt::WA_ShowWithoutActivating);这会强制窗口不激活。即使有Qt::WindowStaysOnTopHint flag 出处&#xff1a; S…

什么是超融合?

文章标题 前言一、超融合是什么&#xff1f;二、超融合原理2.1、超融合三大组件2.2、超融合和传统架构对比2.3、传统方案和超融合软件架构与资源管理模式对比 三、 超融合与SDS、分布式存储关系3.1、SDS是什么 &#xff1f;3.2、分布式存储是什么&#xff1f;3.3、超融合是什么…