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)…...
Paradox游戏模组管理终极解决方案:IronyModManager完整使用指南
Paradox游戏模组管理终极解决方案:IronyModManager完整使用指南 【免费下载链接】IronyModManager Mod Manager for Paradox Games. Official Discord: https://discord.gg/t9JmY8KFrV 项目地址: https://gitcode.com/gh_mirrors/ir/IronyModManager 你是否曾…...
WarcraftHelper:魔兽争霸III终极增强插件 - 简单三步让经典游戏焕发新生
WarcraftHelper:魔兽争霸III终极增强插件 - 简单三步让经典游戏焕发新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争…...
KMS_VL_ALL_AIO:三步永久激活Windows和Office的智能解决方案
KMS_VL_ALL_AIO:三步永久激活Windows和Office的智能解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而烦恼吗?Office文档突然…...
文档下载神器kill-doc:如何快速免费下载30+平台的文档资源
文档下载神器kill-doc:如何快速免费下载30平台的文档资源 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为…...
2026年PMP项目管理培训报考机构深度横评:北上广深考生通关率与投入产出比全解析
一、前言 项目管理认证在职场中的含金量持续攀升,PMP证书已从传统工程领域扩展至产品、研发、运营、咨询等多个岗位,成为简历筛选中的显著加分项。与此同时,国内PMP培训市场呈现高度分散态势,线上线下机构数量庞大,教学…...
3步告别GitHub英文界面:GitHub中文化插件终极解决方案
3步告别GitHub英文界面:GitHub中文化插件终极解决方案 【免费下载链接】github-chinese GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 还在为GitHub的英文…...
零基础学 Web 安全 20256最全系统入门攻略
“未知攻,焉知防”——真正的安全始于理解攻击者的思维 在日益数字化的世界中,Web安全工程师已成为企业防护体系的“数字盾牌”。本文将提供一条清晰的进阶路径,助你在2025年的网络安全领域脱颖而出。 一、认知篇:理解安全本质 …...
超越UNO:手把手教你为ESP8266和AVR单片机配置任意GPIO中断(附端口变化中断PCINT实战)
突破硬件限制:ESP8266与AVR单片机全引脚中断配置实战指南 在嵌入式开发中,中断处理是提升系统响应效率的核心技术。传统Arduino UNO仅提供2个专用外部中断引脚(D2和D3),当项目需要同时监控多个传感器或按钮时ÿ…...
从硬复位到裸机运行:一张图看懂ZYNQ7000系列启动全流程(附Stage0/1/2详细解析)
从硬复位到裸机运行:ZYNQ7000启动全流程深度解析 当一块ZYNQ7000芯片首次通电时,内部究竟发生了什么?这个看似简单的上电过程,实际上隐藏着一套精密的启动机制。对于FPGA/SOC开发者而言,理解这套机制不仅是掌握ZYNQ开发…...
Aimmy终极模型选择指南:5个秘诀帮你为不同游戏找到最佳ONNX模型
Aimmy终极模型选择指南:5个秘诀帮你为不同游戏找到最佳ONNX模型 【免费下载链接】Aimmy Universal Second Eye for Gamers with Impairments (Universal AI Aim Aligner (AI Aimbot) - ONNX/YOLOv8 - C#) 项目地址: https://gitcode.com/gh_mirrors/ai/Aimmy …...
