GitLab集成Runner详细版--及注意事项汇总【最佳实践】
一、背景
看到网上很多用户提出的runner问题其实实际都不是问题,不过是因为对runner的一些细节不清楚导致了误解。本文不系统性的介绍GitLab-Runner,因为这类文章写得好的特别多,本文只汇总一些常几的问题/注意事项。旨在让新手少弯路。
二、环境
- GitLab 16.11.10 官方下载地址:GitLab 16.11.10
- GitLab-Runner 16.11.4 官方下载地址:GitLab-Runner 16.11.4
- Docker Desktop 4.37 容器图形化工具 官方下载地址:Docker Desktop 4.37
特别说明
- Docker Desktop仅仅是Windows下镜像用,如有能爬楼的服务器或是非容器化安装可不安装此软件
三、GitLab准备
略。这里假设已经有了GitLab环境。本文只讲Runner集成。GitLab的安装下载包见上面的环境章节
四、GitLab-Runner下载
读者可根据实际需求选择rpm包或是镜像
- rpm包下载链接见上面的环境章节
- 镜像包请在服务器上下载或windows本地安装Docker Desktop下载
作者本文以rpm包为例
gitlab-runner-16.11.4-1.x86_64.rpm
五、GitLab-Runner安装/卸载
rpm命令安装,需要root用户,或其他用户sudo安装
rpm -ivh gitlab-runner-16.11.4-1.x86_64.rpm
# 卸载
yum erase gitlab-runner -y
特别注意【扫雷】
1、这里安装完会自动创建gitlab-runner用户
2、即时修改gitlab-runner用户的密码,避免一些安全扫描问题,特别是对安全抓得比较严的公司
linux密码修改命令
passwd <用户名>
3、root安装(含sudo)和非root安装配置文件所在目录是不一样的
4、查看配置文件路径命令
gitlab-runner list
5、root安装的(含sudo)配置文件在/etc/gitlab-runner/config.toml
6、非root安装的配置文件在/home/gitlab-runner/.gitlab-runner/config.toml
7、千万别故意用非root安装(故意踩雷),容易搞出问题
8、配置修改/etc/gitlab-runner/config.toml就行了
9、并发线程数量少了可改这个配置文件
10、有时侯没有流水线在跑,但流水线就是不动,重启一下gitlab-runner就行了(一般不会发生)
六、启动/停止
1、常规方式
sudo gitlab-runner start
sudo gitlab-runner stop
2、容器方式
- bridge网络模式
## 创建网络
docker network create gitlabnetwork## bridge网络模式
docker run -d --network gitlabnetwork --hostname=gitlab-runner1 \--name gitlab-runner --restart always \-v /app/gitlab-runner/config:/etc/gitlab-runner \-v /app/gitlab-runner/run/gitlab-runner.pid:/var/run/gitlab-runner.pid \gitlab/gitlab-runner:v16.11.4
- host主机模式
# host主机模式
docker run -d --network=host \--name gitlab-runner --restart always \-v /app/gitlab-runner/config:/etc/gitlab-runner \-v /app/gitlab-runner/run/gitlab-runner.pid:/var/run/gitlab-runner.pid \gitlab/gitlab-runner:v16.11.4
- 容器启/停
docker start ${containerID}
docker stop ${containerID}
docker restart ${containerID}
七、查看URL和注册令牌
1、共享Runner注册令牌
Admin area--》Overview--》Runners
2、群组Runner注册令牌
- 新建群组
- 进群组
设置->CICD->runner
3、专用Runner注册令牌
进入项目->设置->CICD->runner
八、GitLab-Runner注册
注册时直接指定非锁定、非保护,注册上后可在gitlab页面修改,以免后面不知所措
1、注册
注册什么类型的就使用对应类型令牌
sudo gitlab-runner register \
--non-interactive \
--executor "shell" \
--url "http://10.130.***.**:8082/" \
--registration-token "S_AfM7r*****jFyb5GSQ" \
--description "shared-runner2" \
--tag-list "check,build,deploy,test" \
--run-untagged "true" \
--locked-"false" \
--access-level "not protected"
2、效果
注册不同类型的查看页面不一样,同查看URL和注册令牌章节的节面,这里只列出共享类型页面
九、最佳实践
1、介绍
通过流水线实现check、test、package、publish
- check 自动化静态代码质量扫描(应用已集成pmd代码质量检查插件)
- test 自动化动态代码质量扫描、自动化测试(应用所有服务接口都有对应的单元测试方法)
- package 自动打包(跳过测试,避免重复测试,跳过doc、source等不必要的处理提高效率)
- publish 自动发布,可配置规则,自动或手动设定参数决定本次流水线是否发布
2、界面
3、.gitlab-ci.yml配置文件位置及内容demo
创建一个名为“.gitlab-ci.yml”的文件放在工程的根目录
自动化配置文件内容
stages:- check- test- package- publishbefore_script:- export CENTER_NAME=$(echo $CI_PROJECT_NAME| cut -d'-' -f 1)- export TARGET_RPC_SERVICE="$CENTER_NAME-***-service"- export TARGET_WEB_API="$CENTER_NAME-web-api"- export JAVA_HOME=/usr/lib/jvm/jdk-17-oracle-x64- export MAVEN_HOME=/app/maven/maven3.8.8- export PATH=$JAVA_HOME/bin:$PATH- export MAVEN_OPTS="-server -Xms256m -Xmx512m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m -Dfile.encoding=UTF-8 -Djava.net.preferIPv4Stack=true "- export ARCHIVE_HOME=/data2/app/deploy/boot- export APP_HOME=/data2/app- export CI_PROJECT_STATUS=develop- export RUNNER_IP=$(ip addr | awk '/inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g" , $2)}' | awk 'NR==1')after_script:- env > current_env.logvariables:MAVEN_CLI_OPTS: " --batch-mode"MAVEN_CLI_PROMQL_OPTS: " --batch-mode -Dgroups=promql"MAVEN_CLI_ES_HLOG_CSB_OPTS: " --batch-mode -Dgroups=hlog"MAVEN_CLI_ES_SW_OPTS: " --batch-mode -Dgroups=sw"MAVEN_CLI_SKIP_TEST_OPTS: "$MAVEN_CLI_OPTS -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dmaven.source.skip=true "checking:stage: checkscript:- echo mvn $MAVEN_CLI_OPTS pmd:check- mvn $MAVEN_CLI_OPTS pmd:check -s "$MAVEN_HOME/conf/settings.xml"- find . -type f -name pmd.xml -exec cat {} \+except:variables:- $CI_PROJECT_STATUS == "init"tags:- checktest:stage: testscript:- echo mvn --batch-mode -Dgroups=ci test- mvn --batch-mode -Dspring.profiles.active=ci -Dlog.path=/app/log/smet -Dprofile=ci -Dgroup=CI -Dnacos-addr=10.130.***.**:18848 -Dnacos-password=nacos2024ip92 -Dserver.port=8004 -Ddubbo.protocol.port=50052 -Ddubbo.application.qos-port=22223 -s "$MAVEN_HOME/conf/settings.xml" testtags:- testpackage:stage: packagescript:- mvn $MAVEN_CLI_SKIP_TEST_OPTS -s "$MAVEN_HOME/conf/settings2.xml" package- sudo find . -type f -name '*.jar.original' -exec sh -c "/bin/cp -rf \"{}\" /app/saashealth/" \;- sudo chown tomcat.tomcat /app/****health/*.jaronly:- mastertags:- packagepublish:stage: publishscript:- echo 发布开始...- echo 文件拷贝和停服务...- sudo su - tomcat -s /app/****health/publish.sh- echo 文件拷贝停服务完成!- echo 发布完成!only:- mastertags:- publish
4、自带配置检查工具
- 检查工具入口
- 校验页面
十、GitLabRunner 类型重点说明
这里旨在给各位读者扫雷---很重要
shared : 运行整个平台项目的作业(gitlab) -- 共享类
group: 运行特定group下的所有项目的作业(group) -- 分组类
specific: 运行指定的项目作业(project) -- 专享类
locked: 无法运行项目作业(specific的就会带locked标签,表示无法运行其他项目作业)
paused: 不会运行作业(手动停了就是pause,点runner数据量后面的两竖按钮)
十一、【扫雷】总结
1、root用户安装gitlab-runner
2、就算作业类型(shared、group、specific)关联了一般也会通过tag触发(匹配才触发)
3、注意配置文件位置,别因多次安装搞混淆了
4、及时修改gitlab-runner用户的默认密码
5、一定要在项目根目录创建一个名为“.gitlab-ci.yml”的文件才能看到效果
6、.gitlab-ci.yml需要语法正确,使用自带页面工具校验
7、本文着重实践。
8、想学理论的话网上这篇帖子讲得比较全面:云原生之GitLab集成Runner
相关文章:

GitLab集成Runner详细版--及注意事项汇总【最佳实践】
一、背景 看到网上很多用户提出的runner问题其实实际都不是问题,不过是因为对runner的一些细节不清楚导致了误解。本文不系统性的介绍GitLab-Runner,因为这类文章写得好的特别多,本文只汇总一些常几的问题/注意事项。旨在让新手少弯路。 二、…...

ARM发布Armv9.5架构:迈向更强性能与灵活性的新时代
2024年11月30日,ARM正式发布了其最新的Armv9.5架构,这是Arm技术发展的又一重要里程碑。从表中信息来看,Armv9.5架构的发布标志着该公司的架构系列在性能、灵活性和可扩展性方面取得了进一步突破。本次发布不仅是技术上的提升,更是…...

网络安全:路由技术
概述 路由技术到底研究什么内容 研究路由器寻找最佳路径的过程 路由器根据最佳路径转发数据包 知识点,重要OSRF,BGP1.静态路由原理 路由技术分类 静态路由和动态路由技术 静态路由:是第一代路由技术,由网络管理员手工静态写路由/路径告知路…...
Vue3 子组件向父组件传递消息(Events)
子组件向父组件传递消息(Events) 子组件可以通过 $emit 触发事件,父组件可以监听这些事件并作出响应。 子组件: <template><button click"sendMessage">Send Message to Parent</button> </tem…...
如何清理Docker的overlay2目录下的文件
清理 Docker 的 overlay2 目录下的文件需要谨慎操作,因为这些文件通常是容器的存储层,直接删除可能会导致容器无法正常运行或数据丢失。以下是清理 overlay2 目录的步骤和建议: 1. 确认文件是否可以被清理 在清理之前,确认 c7ffc13c49a43f08ef9e234c6ef9fc5a3692deda3c5d4…...

《Vue3实战教程》19:Vue3组件 v-model
如果您有疑问,请观看视频教程《Vue3实战教程》 组件 v-model 基本用法 v-model 可以在组件上使用以实现双向绑定。 从 Vue 3.4 开始,推荐的实现方式是使用 defineModel() 宏: vue <!-- Child.vue --> <script setup> co…...

数字PWM直流调速系统设计(论文+源码)
2.1 系统方案设计 2.2.1开环控制方案 采用开环方案的系统架构如图2.1所示,这种方式不需要对直流电机的转速进行检测,在速度控制时单片机只需要直接发出PWM就可以实现直流电机速度的控制。这种方式整体设计难度较低,但是无法准确得知当前的…...
Spring Boot日志处理
文章目录 Spring Boot日志处理1. 日志存入数据库(AOP)2. 日志控制台打印与写入文件(logback) Spring Boot日志处理 1. 日志存入数据库(AOP) 引入aop依赖 <dependency><groupId>org.springfram…...

vue3+Echarts+ts实现甘特图
项目场景: vue3Echartsts实现甘特图;发布任务 代码实现 封装ganttEcharts.vue <template><!-- Echarts 甘特图 --><div ref"progressChart" class"w100 h100"></div> </template> <script lang"ts&qu…...
OpenCV相机标定与3D重建(41)从 3D 物点和它们对应的 2D 图像点估算初始相机内参矩阵函数initCameraMatrix2D()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从3D-2D点对应关系中找到一个初始的相机内参矩阵。 cv::initCameraMatrix2D 是 OpenCV 库中的一个函数,用于从 3D 物点和它们对应的…...

ELK日志平台搭建 (最新版)
一、安装 JDK 1. 下载 JDK 21 RPM 包 wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm2. 安装 JDK 21,使用 rpm 命令安装下载的 RPM 包: sudo rpm -ivh jdk-21_linux-x64_bin.rpm3. 配置环境变量 编辑 /etc/profile 文件以配置 JAVA_HO…...

智能化人才招聘系统是怎样的?
随着企业规模的扩大和业务范围的拓展,人才招聘成为了企业发展的关键环节。然而,市面上的人才招聘系统琳琅满目,质量参差不齐,许多企业发现,并非所有系统都能满足他们的需求,特别是智能化的需求。今天&#…...

电脑主机后置音频插孔无声?还得Realtek高清晰音频管理器调教
0 缘起 一台联想电脑,使用Windows 10 专业版32位,电脑主机后置音频插孔一直没有声音,所以音箱是接在机箱前面版的前置音频插孔上的。 一天不小心捱到了音箱的音频线,音频线头断在音频插孔里面了,前置音频插孔因此用不…...
记一次音频无输出的解决方案
啊啊啊,刷个抖音就发现个死电脑死都不出声,捣鼓了一天才解决 打开wav文件时,提示错误找不到音频播放设备 0xc00d36fa 起初以为是声卡坏了,就到官网下载、更新了声卡驱动。无用什么驱动精灵也检测了,但也测不出啥来。…...

初学stm32 --- FSMC驱动LCD屏
目录 FSMC简介 FSMC框图介绍 FSMC通信引脚介绍 FSMC_NWE 的作用 FSMC_NWE 的时序关系 FSMC_NOE 的含义 FSMC_NOE 的典型用途 FSMC_NOE 的时序关系 使用FSMC驱动LCD FSMC时序介绍 时序特性中的 OE ILI9341重点时序: FSMC地址映射 HADDR与FSMC_A关系 LCD的…...

Scala_【4】流程控制
第四章 分支控制if-else单分支双分支多分支返回值嵌套分支 For循环控制包含边界不包含边界循环守卫循环步长嵌套循环循环返回值 While循环Break友情链接 分支控制if-else 单分支 双分支 多分支 返回值 嵌套分支 For循环控制 Scala也为for循环这一常见的控制结构提供了非常多的…...
mysql带自动递增列的表删除数据后如何重置递增值
mysql带自动递增列的表删除数据后如何重置递增值 在 MySQL 中,如果你删除了表中的数据,自动递增列的值 不会自动重置。如果你希望在删除数据后重新设置自动递增列的值,可以使用以下几种方法: 1. 使用 ALTER TABLE 重置自动递增值…...

[CTF/网络安全] 攻防世界 simple_php 解题详析
题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 代码解读 $a$_GET[a]; 从HTTP GET请求参数中获取一个名为a的变量,并将其赋值给变量a。符号用于禁止错误输出,如果不存在参数a则会将变量a设置为NULL。 $b$_GET[b];…...
Android 第三方框架:网络框架:OkHttp:源码分析:缓存
文章目录 概述磁盘缓存 类结构 InternalCache接口DiskLruCahce.Entry内部类DiskLruCahce.Snapshot内部类DiskLruCahce.Editor内部类DiskLruCahce类Cahce.Entry内部类Cahce类总结概述 不存在内存缓存,只存在磁盘缓存 磁盘缓存 磁盘缓存 类结构 主要InternalCache接口、Dis…...

大数据新视界 -- Hive 集群搭建与配置的最佳实践(2 - 16 - 13)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...

aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...

路由基础-路由表
本篇将会向读者介绍路由的基本概念。 前言 在一个典型的数据通信网络中,往往存在多个不同的IP网段,数据在不同的IP网段之间交互是需要借助三层设备的,这些设备具备路由能力,能够实现数据的跨网段转发。 路由是数据通信网络中最基…...

【Zephyr 系列 16】构建 BLE + LoRa 协同通信系统:网关转发与混合调度实战
🧠关键词:Zephyr、BLE、LoRa、混合通信、事件驱动、网关中继、低功耗调度 📌面向读者:希望将 BLE 和 LoRa 结合应用于资产追踪、环境监测、远程数据采集等场景的开发者 📊篇幅预计:5300+ 字 🧭 背景与需求 在许多 IoT 项目中,单一通信方式往往难以兼顾近场数据采集…...

篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...
十二、【ESP32全栈开发指南: IDF开发环境下cJSON使用】
一、JSON简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,具有以下核心特性: 完全独立于编程语言的文本格式易于人阅读和编写易于机器解析和生成基于ECMAScript标准子集 1.1 JSON语法规则 {"name"…...