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)…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
