gitlab-cicd部署安装与具体操作
一、安装
本例中是用安装包直接在ubuntu下安装的,也可以用docker镜像。
curl -LJO https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpmrpm -i gitlab-runner_amd64.rpm
安装runner后,需要跟在runner所在服务器安装jdk和maven
安装完成后,目录/home/gitlab-runner/
二、注册Runner
1、打开gitlab项目

2、在服务器中输入:gitlab-runner register
3、出现以下提示: Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
复制第一步中的URL粘贴。
4、Please enter the gitlab-ci token for this runner
复制第一步中的token粘贴。
5、Enter a description for the Runner, you can change this later in GitLab’s UI(添加Runner描述):
6、Please enter the gitlab-ci tags for this runner (comma separated):
这个相当于runner的标识,需要认真起名,因为同一个项目可以用不同tag的runner启动。Tag不同使用的runner会变化。
7、Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
一般都选择shell。
8、注册完成

三、注意
如果多个项目用同一个服务器上安装的runner,且多个项目同时提交运行runner的时候,则会按项目提交的顺序运行具体的CICD流程,其余的项目CICD流程会处于停滞状态。
运行gitlab-ci.yml中没写tag的流程,需要如图操作。(不推荐)


四、更改cicd执行权限为root
如果不更改的话,很多命令无法执行
编辑修改 /etc/systemd/system/gitlab-runner.service 文件,将 --user 修改为 root

重启服务
执行如下命令重启 gitlab-runer 服务
systemctl daemon-reloadsystemctl restart gitlab-runner
五、gitlab-ci.yml文件ssh执行不了
如果登录失败,则在最后面加上<< remotessh
ssh root@XXXX << remotessh
六、删除runner
每一个项目都对应有一个runner,删除操作如图所示,点进需要删除runner的项目中。

七、后端项目.gitlab-ci.yml文件编写示例
在后端项目的根目录下新建一个名为.gitlab-ci.yml的文件,如图:

内容:
stages:- build- deploy- sonarqube-check#测试# 定义安装包的存放位置和Tomcat服务器的地址的变量,便于后续部署使用.
variables:CIDEMO_PACKAGE_DIR: '/home/gitlab-runner/packages'SERVER_IP_ADDRESS: 'root@192.168.0.23'SERVER_HOME_DIR: '/home/citc/test'##编译和测试
build:tags:- wgtagstage: buildbefore_script:- echo "开始打包"after_script:- echo "打包结束"script:- mvn clean package -Dmaven.test.skip=true- rm -rf $CIDEMO_PACKAGE_DIR/test.jar- cp -a target/test.jar $CIDEMO_PACKAGE_DIR/test.jarsonarqube-check:tags:- wgtagstage: sonarqube-checkvariables:SONAR_USER_HOME: "${CI_PROJECT_DIR}/.sonar" # Defines the location of the analysis task cacheGIT_DEPTH: "0" # Tells git to fetch all the branches of the project, required by the analysis taskcache:key: "${CI_JOB_NAME}"paths:- .sonar/cachescript: - mvn verify sonar:sonar -Dsonar.projectKey=test_sys_backend_hivemqclient_Aassasas1ZtbIXauvX -Dsonar.login=$SONAR_TOKENallow_failure: trueonly:- master # or the name of your main branch #打包任务:
deploy:tags:- wgtagstage: deployscript:- echo '准备将最新的jar包复制、保存到192.168.0.23服务器下.'- scp $CIDEMO_PACKAGE_DIR/test.jar $SERVER_IP_ADDRESS:$SERVER_HOME_DIR- ssh root@192.168.0.23 << remotessh- cd $SERVER_HOME_DIR#先删除容器,再删除镜像,直接删除运行中的容器的镜像会产生虚悬镜像- docker rm -f test-cicd- docker rmi -f test-cicd:1.0- docker build -t test-cicd:1.0 .- docker run -d --name test-cicd -p 1008:1088test-cicd:1.0
注意:rm -rf node_modules是删除原有的前端依赖包,rm -rf package-lock.json是删除原有的依赖版本文件,不然可能依赖下载会有问题。
九、gitlab-cicd运行结果查看

点击status

点击具体的job则会显示执行的日志。
十、为何配置免密
1、如果gitlab-runner和部署服务的服务器不同,则使用命令切换到另外一台服务器前,必须配置免密登录,不然会导致部署失败。
2、yml文件中stage执行的顺序则是stage定义的顺序(从上到下)

3、yml文件中编写命令请先删除容器,再删除镜像,直接删除运行中的容器的镜像会产生虚悬镜像
十一、视频学习(仅供参考)
kk 2022-10-18 20-40-47-gitlab-ci-cd-后部分-整体流程_哔哩哔哩_bilibili
十二、gitlab-ci.yml配置详解
| 关键字 | 是否必须 | 描述 |
| script | 必须 | 定义Runner需要执行的脚本或命令 |
| image | 非必须 | 需要使用的docker镜像,请查阅该文档 |
| services | 非必须 | 定义了所需的docker服务,请查阅该文档 |
| stage | 非必须 | 定义了工作的场景阶段,默认是test |
| type | 非必须 | stage的别名,不赞成使用 |
| variables | 非必须 | 在job级别上定义的变量 |
| only | 非必须 | 定义哪些git引用(分支)适用该job |
| except | 非必须 | 定义了哪些git引用(分支)不适用该job |
| tags | 非必须 | 定义了哪些runner适用该job(runner在创建时会要求用户输入标签名来代表该runner) |
| allow_failure | 非必须 | 允许任务失败,但是如果失败,将不会改变提交状态 |
| when | 非必须 | 定义job什么时候能被执行,可以是on_success,on_failure,always或者manual |
| dependencies | 非必须 | 定义了该job依赖哪一个job,如果设置该项,你可以通过artifacts设置 |
| artifacts | 非必须 | 所谓工件。。就是在依赖项之间传递的东西,类似cache,但原理与cache不同 |
| cache | 非必须 | 定义需要被缓存的文件、文件夹列表 |
| before_script | 非必须 | 覆盖在根元素上定义的before_script(如果写在某一个阶段中,则在此阶段脚本执行前会执行;如果独立于每个阶段,则是在每个阶段运行前都会运行) |
| after_script | 非必须 | 覆盖在根元素上定义的after_script(如果写在某一个阶段中,则在此阶段脚本执行后会执行;如果独立于每个阶段,则是在每个阶段运行后都会运行) |
| environment | 非必须 | 定义让job完成部署的环境名称 |
| retry | 非必须 | 定义job失败后的自动重试次数 |
更多描述:gitlab-ci配置详解(二)_gitlab ci dependencies-CSDN博客
相关文章:
gitlab-cicd部署安装与具体操作
一、安装 本例中是用安装包直接在ubuntu下安装的,也可以用docker镜像。 curl -LJO https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_amd64.rpmrpm -i gitlab-runner_amd64.rpm 安装runner后,需要跟在runner所在服务器安装…...
2022高等代数上【南昌大学】
2022 高等代数 证明: p ( x ) p(x) p(x) 是不可约多项式的充要条件是对任意的多项式 f ( x ) , g ( x ) f(x), g(x) f(x),g(x),若 p ( x ) ∣ f ( x ) g ( x ) p(x) \mid f(x)g(x) p(x)∣f(x)g(x),则有 p ( x ) ∣ f ( x ) p(x) \mid f(x) p(x)∣f(x) 或 p ( x ) ∣ g (…...
文本生成类(机器翻译)系统评估
在机器翻译任务中常用评价指标:BLEU、ROGUE、METEOR、PPL。 这些指标的缺点:只能反应模型输出是否类似于测试文本。 BLUE(Bilingual Evaluation Understudy):是用于评估模型生成的句子(candidate)和实际句子(referen…...
11.7【miniob】【debug】
这里的vector是实际值,而relation是指针,所以要解引用,*$1,并在最后调用其析构函数 emplace_back 和 push_back 都是用于在容器(如 std::vector)的末尾添加元素的方法,但它们的工作方式有所不同…...
OSHI 介绍与使用
OSHI 介绍 OSHI(Operating System and Hardware Information)是一个开源的Java库,用于从操作系统和硬件层面获取系统资源的详细信息。它提供了对操作系统、硬件、CPU、内存、磁盘、网络接口等多种信息的访问,且不依赖于平台特定的…...
Hadoop生态圈框架部署(八)- Hadoop高可用(HA)集群部署
文章目录 前言一、部署规划二、Hadoop HA集群部署(手动部署)1. 下载hadoop2. 上传安装包2. 解压hadoop安装包3. 配置hadoop配置文件3.1 虚拟机hadoop1修改hadoop配置文件3.1.1 修改 hadoop-env.sh 配置文件3.3.2 修改 core-site.xml 配置文件3.3.3 修改 …...
【RocketMQ】Name Server 无状态特点及如何让 Broker Consumer Producer 感知新节点
文章目录 前言1. Name Server 无状态特点2. Name Server 地址服务3. Name Server 手动配置后记 前言 看了 《RocketMQ 消息中间件实战派(上册)》前面一点,书中代码太多容易陷入细节。 这里简单描述下 RocketMQ Name Server 无状态表现在什么…...
蓝牙定位的MATLAB程序,四个锚点、三维空间
这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念,并通过三维可视化展示了真实位置与估计位置的关系。 目录 程序描述 运…...
机器学习--绪论
开启这一系列文章的初衷,是希望搭建一座通向机器学习世界的桥梁,为有志于探索这一领域的读者提供系统性指引和实践经验分享。随着人工智能和大数据技术的迅猛发展,机器学习已成为推动技术创新和社会变革的重要驱动力。从智能推荐系统到自然语…...
Unity 设计模式-命令模式(Command Pattern)详解
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成对象,从而使得可以使用不同的请求、队列或日志请求,以及支持可撤销的操作。命令模式通常包含四个主要角色:命令(Command…...
线程信号量 Linux环境 C语言实现
既可以解决多个同类共享资源的互斥问题,也可以解决简易的同步问题 头文件:#include <semaphore.h> 类型:sem_t 初始化:int sem_init(sem_t *sem, int pshared, unsigned int value); //程序中第一次对指定信号量调用p、v操…...
karmada-descheduler
descheduler规则 karmada-descheduler 定期检测所有部署,通常是每2分钟一次,并确定目标调度集群中无法调度的副本数量。它通过调用 karmada-scheduler-estimator 来完成这个过程。如果发现无法调度的副本,它将通过减少 spec.clusters 的配…...
【热门主题】000075 探索嵌入式硬件设计的奥秘
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【热…...
Android okhttp请求
下面是一个用 OkHttp 封装的 GET 请求方法,适用于 Android 项目。该方法包括基本的网络请求、错误处理,并支持通过回调返回结果。 封装 GET 请求的工具类 添加依赖 在你的 build.gradle 文件中,确保添加了 OkHttp 的依赖: imple…...
嵌入式蓝桥杯学习4 lcd移植
cubemx配置 复制前面配置过的文件 打开cubemx,将PB8,PB9配置为GPIO-Output。 点击GENERATE CODE. 文件移植 1.打开比赛提供的文件包,点击Inc文件夹 2.点击Inc文件夹。复制fonts.h和lcd.h,粘贴到我们自己的工程文件夹的bsp中(…...
电子应用设计方案-38:智能语音系统方案设计
智能语音系统方案设计 一、引言 智能语音系统作为一种便捷、自然的人机交互方式,正逐渐在各个领域得到广泛应用。本方案旨在设计一个高效、准确、功能丰富的智能语音系统。 二、系统概述 1. 系统目标 - 实现高准确率的语音识别和自然流畅的语音合成。 - 支持多种语…...
渗透测试:网络安全的深度探索
一、引言 在当今数字化时代,网络安全问题日益凸显。企业和组织面临着来自各种恶意攻击者的威胁,他们试图窃取敏感信息、破坏系统或进行其他恶意活动。渗透测试作为一种主动的安全评估方法,能够帮助企业发现潜在的安全漏洞,提高网…...
基于SpringBoot的“小区物业管理系统”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“小区物业管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 个人信息界面图 费用信息管理…...
调试android 指纹遇到的坑
Android8以后版本 一、指纹服务不能自动 指纹服务fingerprintd(biometrics fingerprintservice),可以手动起来,但是在init.rc中无法启动。 解决办法: 1.抓取开机时kernel log ,确认我们的启动指纹服务的init.rc 文件有被init.c…...
剑指offer(专项突破)---字符串
总目录:剑指offer(专项突破)---目录-CSDN博客 1.字符串的基本知识 C语言中: 函数名功能描述strcpy(s1, s2)将字符串s2复制到字符串s1中,包括结束符\0,要求s1有足够空间容纳s2的内容。strncpy(s1, s2, n)…...
Python 闭包与装饰器
在 Python 学习中,闭包和装饰器是两个既关联又容易混淆的知识点,尤其是结合嵌套函数使用时,常常分不清执行逻辑。但其实只要抓住核心原理,再结合简单案例拆解,就能轻松掌握。 一、前置回顾:函数与局部变量的…...
隐私优先方案:OpenClaw+Qwen3-14B镜像处理敏感数据的5层防护
隐私优先方案:OpenClawQwen3-14B镜像处理敏感数据的5层防护 1. 为什么需要本地化隐私方案 去年处理一批客户调研数据时,我犯过一个致命错误——把包含联系方式的原始表格上传到某公有云AI平台进行清洗。三天后,公司邮箱突然收到匿名勒索邮件…...
飞书机器人自动化:OpenClaw调用Qwen3-4B实现会议纪要生成
飞书机器人自动化:OpenClaw调用Qwen3-4B实现会议纪要生成 1. 为什么选择OpenClawQwen3-4B做会议纪要 上个月我经历了连续三天的跨部门会议,每天手动整理会议纪要到深夜的痛苦让我开始寻找自动化解决方案。试过几款SaaS工具后,发现要么需要上…...
wUU代码混淆实战指南:使用Obfuscar构建坚不可摧的安全防线
在当今数字化时代,保护.NET应用程序的源代码安全变得尤为重要。你是否担心自己的知识产权被轻易窃取?是否希望防止竞争对手通过反编译分析你的核心业务逻辑?今天,我将为你详细介绍一款强大的开源混淆工具——Obfuscar,…...
从一次RDP爆破到全网挖矿:复盘Windows Server 3389端口的安全加固与监控策略
Windows Server 3389端口安全防御体系:从RDP爆破到挖矿攻击的全链路防护 最近处理了一起典型的服务器入侵事件:攻击者通过RDP暴力破解获取管理员权限后,在服务器上部署了挖矿程序。这种攻击模式看似简单,却暴露出许多企业在Windo…...
突破音频限制:OpenCore-Legacy-Patcher焕新老Mac音质体验
突破音频限制:OpenCore-Legacy-Patcher焕新老Mac音质体验 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当经典Mac设备升级到最新macOS系统后&am…...
嵌入式开发中静态代码扫描的必要性与实践
1. 为什么嵌入式开发需要静态代码扫描? 在嵌入式系统开发中,代码质量直接关系到产品的稳定性和安全性。由于嵌入式设备通常部署在关键基础设施、工业控制或消费电子产品中,代码缺陷可能导致严重后果。静态代码扫描作为代码质量保障的重要手段…...
强化学习反噬:模型为骗奖励毁掉生产环境
从游戏作弊到生产事故在软件测试领域,我们习惯于与确定性缺陷作斗争:空指针、内存泄漏、逻辑错误。然而,随着人工智能,特别是强化学习(Reinforcement Learning, RL)模型被集成到生产系统(如自动…...
基于合法无代码平台滥用的新型钓鱼攻击机理与防御体系研究
摘要 2026 年 3 月卡巴斯基实验室披露针对 Bubble.io 等正规无代码开发平台的恶意滥用钓鱼攻击,攻击者依托平台高信誉域名、SSL 证书与可视化开发能力,快速生成高仿真钓鱼页面,绕过传统邮件网关与终端检测,实现账号凭证、多因素认…...
P1163 银行贷款 总结与反思
提炼以下几点:1,问:C中 整型怎么转浮点数(int/ long long to double):答:直接赋值即可, eg ll N; double a N;2, 问:C中整型和浮点数怎么做加减法答:直接加减即可,自…...
