当前位置: 首页 > news >正文

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问题其实实际都不是问题&#xff0c;不过是因为对runner的一些细节不清楚导致了误解。本文不系统性的介绍GitLab-Runner&#xff0c;因为这类文章写得好的特别多&#xff0c;本文只汇总一些常几的问题/注意事项。旨在让新手少弯路。 二、…...

ARM发布Armv9.5架构:迈向更强性能与灵活性的新时代

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

网络安全:路由技术

概述 路由技术到底研究什么内容 研究路由器寻找最佳路径的过程 路由器根据最佳路径转发数据包 知识点&#xff0c;重要OSRF,BGP1.静态路由原理 路由技术分类 静态路由和动态路由技术 静态路由&#xff1a;是第一代路由技术&#xff0c;由网络管理员手工静态写路由/路径告知路…...

Vue3 子组件向父组件传递消息(Events)

子组件向父组件传递消息&#xff08;Events&#xff09; 子组件可以通过 $emit 触发事件&#xff0c;父组件可以监听这些事件并作出响应。 子组件&#xff1a; <template><button click"sendMessage">Send Message to Parent</button> </tem…...

如何清理Docker的overlay2目录下的文件

清理 Docker 的 overlay2 目录下的文件需要谨慎操作,因为这些文件通常是容器的存储层,直接删除可能会导致容器无法正常运行或数据丢失。以下是清理 overlay2 目录的步骤和建议: 1. 确认文件是否可以被清理 在清理之前,确认 c7ffc13c49a43f08ef9e234c6ef9fc5a3692deda3c5d4…...

《Vue3实战教程》19:Vue3组件 v-model

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

数字PWM直流调速系统设计(论文+源码)

2.1 系统方案设计 2.2.1开环控制方案 采用开环方案的系统架构如图2.1所示&#xff0c;这种方式不需要对直流电机的转速进行检测&#xff0c;在速度控制时单片机只需要直接发出PWM就可以实现直流电机速度的控制。这种方式整体设计难度较低&#xff0c;但是无法准确得知当前的…...

Spring Boot日志处理

文章目录 Spring Boot日志处理1. 日志存入数据库&#xff08;AOP&#xff09;2. 日志控制台打印与写入文件&#xff08;logback&#xff09; Spring Boot日志处理 1. 日志存入数据库&#xff08;AOP&#xff09; 引入aop依赖 <dependency><groupId>org.springfram…...

vue3+Echarts+ts实现甘特图

项目场景&#xff1a; vue3Echartsts实现甘特图;发布任务 代码实现 封装ganttEcharts.vue <template><!-- Echarts 甘特图 --><div ref"progressChart" class"w100 h100"></div> </template> <script lang"ts&qu…...

OpenCV相机标定与3D重建(41)从 3D 物点和它们对应的 2D 图像点估算初始相机内参矩阵函数initCameraMatrix2D()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 从3D-2D点对应关系中找到一个初始的相机内参矩阵。 cv::initCameraMatrix2D 是 OpenCV 库中的一个函数&#xff0c;用于从 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 包&#xff1a; sudo rpm -ivh jdk-21_linux-x64_bin.rpm3. 配置环境变量 编辑 /etc/profile 文件以配置 JAVA_HO…...

智能化人才招聘系统是怎样的?

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

电脑主机后置音频插孔无声?还得Realtek高清晰音频管理器调教

0 缘起 一台联想电脑&#xff0c;使用Windows 10 专业版32位&#xff0c;电脑主机后置音频插孔一直没有声音&#xff0c;所以音箱是接在机箱前面版的前置音频插孔上的。 一天不小心捱到了音箱的音频线&#xff0c;音频线头断在音频插孔里面了&#xff0c;前置音频插孔因此用不…...

记一次音频无输出的解决方案

啊啊啊&#xff0c;刷个抖音就发现个死电脑死都不出声&#xff0c;捣鼓了一天才解决 打开wav文件时&#xff0c;提示错误找不到音频播放设备 0xc00d36fa 起初以为是声卡坏了&#xff0c;就到官网下载、更新了声卡驱动。无用什么驱动精灵也检测了&#xff0c;但也测不出啥来。…...

初学stm32 --- FSMC驱动LCD屏

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

Scala_【4】流程控制

第四章 分支控制if-else单分支双分支多分支返回值嵌套分支 For循环控制包含边界不包含边界循环守卫循环步长嵌套循环循环返回值 While循环Break友情链接 分支控制if-else 单分支 双分支 多分支 返回值 嵌套分支 For循环控制 Scala也为for循环这一常见的控制结构提供了非常多的…...

mysql带自动递增列的表删除数据后如何重置递增值

mysql带自动递增列的表删除数据后如何重置递增值 在 MySQL 中&#xff0c;如果你删除了表中的数据&#xff0c;自动递增列的值 不会自动重置。如果你希望在删除数据后重新设置自动递增列的值&#xff0c;可以使用以下几种方法&#xff1a; 1. 使用 ALTER TABLE 重置自动递增值…...

[CTF/网络安全] 攻防世界 simple_php 解题详析

题目描述&#xff1a;小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 代码解读 $a$_GET[a]; 从HTTP GET请求参数中获取一个名为a的变量&#xff0c;并将其赋值给变量a。符号用于禁止错误输出&#xff0c;如果不存在参数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)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...