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
  - 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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【从零开始入门unity游戏开发之——C#篇40】C#特性(Attributes)和自定义特性

文章目录 前言一、特性&#xff08;Attributes&#xff09;基本概念二、自定义特性1、自定义特性代码示例&#xff1a;2、应用自定义特性&#xff1a;3、解释3.1 **AttributeUsage 特性**3.2 特性的命名3.3 **构造函数**&#xff1a;3.4 **属性**&#xff1a; 4、使用反射获取特…

k8s基础(2)—Kubernetes-Namespace

一、Namespace概述 名字空间 在 Kubernetes 中&#xff0c;名字空间&#xff08;Namespace&#xff09; 提供一种机制&#xff0c;将同一集群中的资源划分为相互隔离的组。 同一名字空间内的资源名称要唯一&#xff0c;但跨名字空间时没有这个要求。 名字空间作用域仅针对带有…

iOS 逆向学习 - iOS Security Features:硬件与软件多重防护体系

iOS 逆向学习 - iOS Security Features&#xff1a;硬件与软件多重防护体系 iOS 安全特性全面解析&#xff1a;构筑多层次防御体系一、iOS 的硬件安全特性1. Secure Enclave&#xff08;安全隔区&#xff09;2. Hardware Root of Trust&#xff08;硬件信任根&#xff09;3. De…

计算机网络——数据链路层-流量控制和可靠传输

一、流量控制 流量控制是指由接收方及时控制发送方发送数据的速率&#xff0c;使接收方来得及接受。 • 停止等待流量控制 • 滑动窗口流量控制 1、停止—等待流量控制 停止-等待流量控制的基本原理是发送方每发出一帧后&#xff0c;就要等待接收方的应答信号&#xff…

Zookeeper是如何保证事务的顺序一致性的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper是如何保证事务的顺序一致性的?】面试题。希望对大家有帮助&#xff1b; Zookeeper是如何保证事务的顺序一致性的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过多个机制来保证事务的顺序一…

实际开发中,常见pdf|word|excel等文件的预览和下载

实际开发中,常见pdf|word|excel等文件的预览和下载 背景相关类型数据之间的转换1、File转Blob2、File转ArrayBuffer3、Blob转ArrayBuffer4、Blob转File5、ArrayBuffer转Blob6、ArrayBuffer转File 根据Blob/File类型生成可预览的Base64地址基于Blob类型的各种文件的下载各种类型…

Qt使用CMake编译项目时报错:#undefined reference to `vtable for MainView‘

博主将.h文件和.cpp文件放到了不同的文件目录下面&#xff0c;如下图所示&#xff1a; 于是构建项目的时候就报错了#undefined reference to vtable for MainView&#xff0c;这个是由于src/view目录下的CMake无法自动moc头文件导致的&#xff0c;需要手动moc include/view目录…

会员制电商创新:开源 AI 智能名片与 2+1 链动模式的协同赋能

摘要&#xff1a;本文聚焦于电商领域会员制的关键作用&#xff0c;深入探讨在传统交易模式向数字化转型过程中&#xff0c;如何借助开源 AI 智能名片以及 21 链动模式商城小程序&#xff0c;实现对会员数据的精准挖掘与高效利用&#xff0c;进而提升企业的营销效能与客户洞察能…

第27周:文献阅读及机器学习

目录 摘要 Abstract 一、文献阅读 发现问题 研究方法 CNN-LSTM DT SVR 创新点 案例分析 数据准备 模型性能 预测模型的实现 仿真实验及分析 二、LSTM 1、基本结构 2、具体步骤 3、举例说明 4、原理理解 总结 摘要 本周阅读文献《Short-term water qua…

【机器遗忘之UNSIR算法】2023年IEEE Trans期刊论文:Fast yet effective machine unlearning

1 介绍 年份&#xff1a;2023 期刊&#xff1a;IEEE Transactions on Neural Networks and Learning Systems 引用量&#xff1a;170 Tarun A K, Chundawat V S, Mandal M, et al. Fast yet effective machine unlearning[J]. IEEE Transactions on Neural Networks and Le…

Linux-----进程处理(waitpid,进程树,孤儿进程)

目录 waitpid等待 进程树 孤儿进程 waitpid等待 Linux中父进程除了可以启动子进程&#xff0c;还要负责回收子进程的状态。如果子进程结束后父进程没有正常回收&#xff0c;那么子进程就会变成一个僵尸进程——即程序执行完成&#xff0c;但是进程没有完全结束&#xff0c;其…

Docker- Unable to find image “hello-world“locally

Docker- Unable to find image “hello-world“locally 文章目录 Docker- Unable to find image “hello-world“locally问题描述一. 切换镜像1. 编辑镜像源2. 切换镜像内容 二、 检查设置1、 重启dockers2、 检查配置是否生效3. Docker镜像源检查4. Dokcer执行测试 三、自定义…

Android配件应用默认启动与USB权限申请区别

使用效果&#xff1a; USB配件授权演示 选择USB配件默认打开应用 申请USB配件使用权限

vue2框架配置路由设计打印单

业务效果: 查询出列表后&#xff0c;点击申请单按钮&#xff0c;弹出申请表格&#xff0c;可进行打印 后端实现 控制器、服务层等省略&#xff0c;关联查出数据提供接口给前端即可 <!--获取详细信息(用于申请单打印)--><select id"selectXxxxDetail" par…

第29天:Web开发-PHP应用弱类型脆弱Hash加密Bool类型Array数组函数转换比较

#知识点 1、安全开发-原生PHP-弱类型脆弱 2、安全开发-原生PHP-函数&数据类型 3、安全开发-原生PHP-代码审计案例 一、PHP弱类型对比 1、 和 两个等号是弱比较&#xff0c;使用进行对比的时候&#xff0c;php解析器就会做隐式类型转换&#xff0c;如果两个值的类型不相等就…

在Ubuntu 18.04.6 LTS安装OpenFace流程

一、修改配置:将gcc8&#xff0c;g8作为默认选项 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 sudo update-alternatives --config gcc 选择版本&#xff0c;再查看gcc --version sudo update-alternatives --install /usr/bin/g g /usr/bin/g-…

【亚马逊云科技】基于Amazon EKS部署高可用的OceanBase的最佳实践

一、前言 随着企业业务的快速发展和数据量的不断增长&#xff0c;高性能、高可用的数据库解决方案成为了关键需求。OceanBase作为一款分布式关系型数据库&#xff0c;以其高扩展性、高可用性和高性能的特点&#xff0c;逐渐受到企业的广泛关注。然而&#xff0c;在复杂的分布式…

计算机网络:网络层知识点及习题(一)

网课资源&#xff1a; 湖科大教书匠 1、概述 网络层实现主机到主机的传输&#xff0c;主要有分组转发和路由选择两大功能 路由选择处理机得出路由表&#xff0c;路由表再生成转发表&#xff0c;从而实现分组从不同的端口转发 网络层向上层提供的两种服务&#xff1a;面向连接…

简历_熟悉缓存高并发场景处理方法,如缓存穿透、缓存击穿、缓存雪崩

系列博客目录 文章目录 系列博客目录1.缓存穿透总结 2.缓存雪崩3.缓存击穿代码总结 1.缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库。 常见的解决方案有两种&#xff1a; 缓存空对…