GitLab集成Runner详细版--及注意事项汇总【最佳实践】

news2025/1/7 7:25:32

一、背景

    看到网上很多用户提出的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
  - publish

before_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.log

variables:
  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: check
  script:
    - 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:
    - check

test:
  stage: test
  script:
    - 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" test
  tags:
    - test

package:
  stage: package
  script:
    - 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/*.jar
  only:
    - master
  tags:
    - package

publish:
  stage: publish
  script:
    - echo 发布开始...
    - echo 文件拷贝和停服务...
    - sudo su - tomcat -s /app/****health/publish.sh
    - echo 文件拷贝停服务完成!
    - echo 发布完成!
  only:
    - master
  tags:
    - 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

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

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

相关文章

Spring Boot 中 RabbitMQ 的使用

目录 引入依赖 添加配置 Simple&#xff08;简单模式&#xff09; 生产者代码 消费者代码 ​编辑 Work Queue&#xff08;工作队列&#xff09; 生产者代码 消费者代码 Publish/Subscribe&#xff08;发布/订阅&#xff09; 生产者代码 消费者代码 Routing&#x…

【linux基础I/O(1)】文件描述符的本质重定向的本质

目录 前言1. 理解C语言的文件接口2. 操作文件的系统调用接口2.1 open函数详解2.2 close函数详解2.3 write函数详解2.4 read函数详解 3. 文件描述符fd详解4. 文件描述符的内核本质5. 怎样理解Linux下一切皆文件?6. 理解输出输入重定向7. 重定向的系统调用8. 总结 前言 “在Lin…

全面解析 Node-RED:功能、Docker 部署与实战示例

言简意赅的讲解Node-RED解决的痛点 Node-RED 是一个基于流的编程工具&#xff0c;专为物联网&#xff08;IoT&#xff09;应用而设计。它通过可视化的编程界面&#xff0c;使开发者能够轻松地连接各种硬件设备、API 以及在线服务&#xff0c;构建复杂的应用流程。本文将详细介…

2、pycharm常用快捷命令和配置【持续更新中】

1、常用快捷命令 Ctrl / 行注释/取消行注释 Ctrl Alt L 代码格式化 Ctrl Alt I 自动缩进 Tab / Shift Tab 缩进、不缩进当前行 Ctrl N 跳转到类 Ctrl 鼠标点击方法 可以跳转到方法所在的类 2、使用pip命令安装request库 命令&#xff1a;pip install requests 安装好了…

2025-01-04 Unity插件 YodaSheet1 —— 插件介绍

文章目录 1 介绍2 工作原理2.1 ScriptableObject -> YadeSheetData2.2 YadeDatabase 存储多个 YadeSheetData 3 用途4 缺点5 推荐 1 介绍 ​ Yade 提供类似于 Excel 或者 Google Sheets 的表格编辑器&#xff0c;可以轻松地在 Unity 编辑器中 编辑&#xff0c;搜索&#xf…

用 C++ 创建控制台计算器

本文内容 先决条件创建应用项目验证新应用是否生成并运行编辑代码 显示另外 5 个 C 程序员通常从在命令行上运行的“Hello, world!”应用程序开始。 你将以本文为起点&#xff0c;逐步进阶&#xff0c;加深学习难度&#xff1a;计算器应用。 先决条件 在 Visual Studio 中…

IDEA 撤销 merge 操作(详解)

作为一个开发者&#xff0c;我们都知道Git是一个非常重要的版本控制工具&#xff0c;尤其是在协作开发的过程中。然而&#xff0c;在使用Git的过程中难免会踩一些坑&#xff0c;今天我来给大家分享一个我曾经遇到的问题&#xff1a;在使用IDEA中进行merge操作后如何撤销错误的合…

限时特惠,香港服务器,低至53元/年

家人们谁懂啊&#xff01;香港服务器这价格简直逆天了&#xff0c;居然比内地的还便宜&#xff01;就拿阿里云来说&#xff0c;人家最低配置的服务器&#xff0c;价格都很难做到这么亲民。 最低配的就不说了&#xff0c;2 核 4G 的配置&#xff0c;应对日常业务稳稳当当&#x…

EF Core配置及使用

Entity Framework Core是微软官方的ORM框架。 ORM&#xff1a;Object Relational Mapping。让开发者用对象操作的形式操作关系数据库。 EF Core是对于底层ADO.NET Core的封装&#xff0c;因此ADO.NET Core支持的数据库不一定被EF Core支持。 代码创建数据库Code First 建实…

GPT分区 使用parted标准分区划分,以及相邻分区扩容

parted 是一个功能强大的命令行工具&#xff0c;用于创建和管理磁盘分区表和分区。它支持多种分区表类型&#xff0c;如 MBR&#xff08;msdos&#xff09;、GPT&#xff08;GUID Partition Table&#xff09;等&#xff0c;并且可以处理大容量磁盘。parted 提供了一个交互式界…

【mybatis-plus问题集锦系列】使用mybatis实现数据的基础增删改查

使用mybatis实现数据的基础增删改查,简单的增删改查操作方法步骤 代码实现 pom.xml <dependencies><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.…

tlias项目实战笔记

一个小项目写了一个多月&#xff0c;在考试周穿插&#xff0c;终于能有时间来写个小总结了&#xff0c;废话少说&#xff0c;我们直接来步入正题。 一、项目开发规范 1.开发风格Restful 案例是基于当前最为主流的前后端分离模式进行开发。 在前后端分离的开发模式中&#xff…

Arduino Uno简介与使用方法

目录 一、Arduino Uno概述 1. 硬件特性 2. 开发环境 二、Arduino Uno的基本使用方法 1. 硬件连接 2. 软件编程 三、Arduino Uno编程基础 1. 基本语法 2. 常用函数 四、Arduino Uno应用举例 1. LED闪烁 2. 温度检测 3. 超声波测距 五、Arduino Uno的扩展与应用 1…

go 模拟TCP粘包和拆包,及解决方法

1. 什么是 TCP 粘包与拆包&#xff1f; 粘包&#xff08;Sticky Packet&#xff09; 粘包是指在发送多个小的数据包时&#xff0c;接收端会将这些数据包合并成一个数据包接收。由于 TCP 是面向流的协议&#xff0c;它并不会在每次数据发送时附加边界信息。所以当多个数据包按顺…

新能源电动汽车动力电池技术

新能源电动汽车动力电池技术是新能源汽车发展的核心之一&#xff0c;以下是动力电池技术的一些关键方面&#xff1a; 技术进展 能量密度提升&#xff1a;近年来&#xff0c;动力电池的能量密度有了显著提升&#xff0c;从2010年的100Wh/kg提高到2024年的300Wh/kg。能量密度的…

仓颉笔记——windows11安装启用cangjie语言,并使用vscode编写“你好,世界”

2025年1月1日第一篇日记&#xff0c;大家新年好。 去年就大致看了一下&#xff0c;感觉还不错&#xff0c;但一直没上手&#xff0c;这次借着元旦的晚上安装了一下&#xff0c;今年正式开动&#xff0c;公司众多的应用国产化正等着~~ 第一步&#xff1a;准备 官网&#xff1a;…

JVM对象内存结构

1对象内存结构说明 注意&#xff1a; 如果对象为数组对象&#xff0c;在对象头后面有4字节存储数组长度&#xff1b; 1.1对象头 对象头分为Mark Word和Class Pointer两部分&#xff1b; Mark Word&#xff1a;对象基础信息 32位操作系统中占4字节&#xff0c;64位操作系统中占8…

doris:基于 Arrow Flight SQL 的高速数据传输链路

Doris 基于 Arrow Flight SQL 协议实现了高速数据链路&#xff0c;支持多种语言使用 SQL 从 Doris 高速读取大批量数据。 用途​ 从 Doris 加载大批量数据到其他组件&#xff0c;如 Python/Java/Spark/Flink&#xff0c;可以使用基于 Arrow Flight SQL 的 ADBC/JDBC 替代过去…

算法题(25):只出现一次的数字(三)

审题&#xff1a; 该题中有两个元素只出现一次并且其他元素都出现两次&#xff0c;需要返回这两个只出现一次的数&#xff0c;并且不要求返回顺序 思路: 由于对空间复杂度有要求&#xff0c;我们这里不考虑哈希表。我们采用位运算的方法解题 方法&#xff1a;位运算 首先&#…

HTML——75. 内联框架

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>内联框架</title><style type"text/css">iframe{width: 100%;height: 500px;}</style></head><body><!--iframe元素会创建包含…