GitLab CI/CD实现项目自动化部署
1 GitLab CI/CD介绍
-
GitLab CI/CD 是 GitLab 中集成的一套用于软件开发的持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)工具。这套系统允许开发团队自动化软件交付流程,从代码变更的检测、构建、测试到最终部署到生产环境的整个过程。
-
持续集成(CI)
- 每次代码推送至版本控制系统(如GitLab仓库),系统自动进行构建和测试。这确保了代码变更能够快速集成到主分支,同时发现并修复集成错误。
-
持续交付(CD)
- 在持续集成的基础上,进一步自动化将已验证的代码变更交付到一个预生产或生产准备就绪的环境中。这个阶段可能包括更复杂的测试套件、性能测试等,确保软件随时可以部署到生产环境,但实际部署可能需要人工审批。
-
持续部署(CD)
- 在持续交付的基础上,将交付过程完全自动化,无需人工干预即可将通过所有测试的代码直接部署到生产环境。这意味着每次代码变更经过测试后都能快速安全地到达用户手中。
2 GitLab CI/CD 与 GitLab Runner
-
GitLab CI/CD 是一套集成在GitLab平台中的服务,负责管理软件开发生命周期中的构建、测试和部署等流程。它通过读取项目中的 .gitlab-ci.yml 配置文件来定义各种任务(Jobs)和流程(Pipelines),从而实现持续集成和持续部署的目标。
-
GitLab Runner 则是实现这些CI/CD流程的实际工作者或执行引擎。它是单独部署的一个程序,可以安装在不同的操作系统(如Linux、macOS、Windows)上,并与GitLab实例进行注册和绑定。一旦有新的提交触发了GitLab CI/CD流程,GitLab会调度已注册的Runner来执行.gitlab-ci.yml中定义的任务。
-
简单来说,GitLab CI/CD是计划者和协调者,负责定义何时以及如何执行任务,而GitLab Runner则是具体执行这些任务的实体。Runner可以是共享的(服务于多个项目)或者专属的(仅为单一项目服务),并且可以根据项目需求配置不同的执行环境(例如使用Docker容器来隔离构建环境)。
3 GitLab Runner
- 官网介绍
3.1 安装
- 以Centos为例
- gitlab-runner安装包下载,在Package栏搜索gitlab-runner,可以下载这个版本 el/7/x86_64/gitlab-runner-16.6.0-1.x86_64.rpm
- 安装命令如下
-
# 安装sudo rpm -ivh gitlab-runner-16.6.0-1.x86_64.rpm # 查看是否安装成功gitlab-runner -h
3.2 注册
- 注册前需要先从gitlab服务器获取token。
- 在主页面的Projects中找到 Configure GitLab
- 找到CI/CD中的Runners
- 找到token保存下来
- 注册
-
# 注册runnersudo gitlab-runner register - 注册过程中需要填入一些信息,Token就是上面复制的那个,具体如下

- 注册完刷新gitlab页面,可以看到有一个Runner实例。
- 如果找不到这个界面,可以这样访问 http://192.168.206.137/admin/runners

-
- 点击编辑

- 勾选Run untagged jobs,然后保存。

3.3 编写流水线脚本
- 首先在gitlab中创建一个项目,然后新建一个文件

- 文件名为 .gitlab-ci.yml,脚本内容就写一个最简单的测试脚本。

- 脚本内容如下
-
build:stage: buildscript:- echo "start build"test:stage: testscript:- echo "start test"deploy:stage: deployscript: - echo "start deploy" - 保存提交后会自动触发CI/CD流程,在Build中找到Pipelines。

- 可以看到步骤全部通过

- 点击Passed可以看到详细流程

- 点击build,就是build的执行过程

- 至此,GitLab-CI/CD 自动化部署的流程就通了。可以把 .gitlab-ci.yml 脚本中的内容修改为实际要执行的命令,这样每一次提交代码后,就会自动触发编译、测试、发布步骤。
4 项目演示
- 比较简单的自动化部署流程为:编译、测试、打包和发布。本项目就主要演示下如何实现自动化的编译、测试和发布。
- 现在创建一个项目,文件结构如下
- ├── .gitlab-ci.yml
├── main.cpp
├── README.md
└── test.sh
- ├── .gitlab-ci.yml
- .gitlab-ci.yml 内容如下
-
# 编译build:stage: buildscript:- echo "start build"- g++ main.cpp -o gitlabcicd_test# 指定生成的可执行程序存放目录为当前目录artifacts:paths:- gitlabcicd_test# 测试test:stage: testscript:- echo "start test"- chmod 0777 test.sh# 测试- ./test.sh# 发布deploy:stage: deployscript: - echo "start deploy"# 模拟发布流程- cp gitlabcicd_test package1
-
- mian.cpp 中输出一个打印。
- test.sh 中运行生成的可执行程序。
- 工程写完后,push到gitlab仓库中,会自动触发cicd流程。
- 在项目中找到 Build,点击Pipelines。
- 可以看到,自动化编译、测试、发布流程成功了
- 点击一个进去,在控制台会有详细打印
- 进到GitLab Runner服务器对应目录下,可以看到自动化编译、测试、发布已经完成。
相关文章:
GitLab CI/CD实现项目自动化部署
1 GitLab CI/CD介绍 GitLab CI/CD 是 GitLab 中集成的一套用于软件开发的持续集成(Continuous Integration)、持续交付(Continuous Delivery)和持续部署(Continuous Deployment)工具。这套系统允许开发团队…...
阿里云调整全球布局关停澳洲云服务器,澳洲服务器市场如何选择稳定可靠的云服务?
近日,阿里云宣布将关停澳大利亚地域的数据中心服务,这一决定引发了全球云计算行业的广泛关注。作为阿里云的重要海外市场之一,澳洲的数据中心下架对于当地的企业和个人用户来说无疑是一个不小的挑战。那么,在阿里云调整全球布局的…...
排序(二)——快速排序(QuickSort)
欢迎来到繁星的CSDN,本期内容包括快速排序(QuickSort)的递归版本和非递归版本以及优化。 一、快速排序的来历 快速排序又称Hoare排序,由霍尔 (Sir Charles Antony Richard Hoare) ,一位英国计算机科学家发明。霍尔本人是在发现冒泡排序不够快…...
<数据集>穿越火线cf人物识别数据集<目标检测>
数据集格式:VOCYOLO格式 图片数量:3440张 标注数量(xml文件个数):3440 标注数量(txt文件个数):3440 标注类别数:1 标注类别名称:[person] 使用标注工具:labelImg 标注规则:对…...
a+=1和a=a+1的区别
文章目录 a1 和a a1的区别一、实例代码二、代码解释三、总结 a1 和a a1的区别 一、实例代码 public class Test {public static void main(String[] args) {byte a 10; // a a 1; // a (byte) (a 1);a 1;System.out.println(a);} }上面的对变量a进行加一操作时&a…...
设计模式使用场景实现示例及优缺点(结构型模式——桥接模式)
结构型模式 桥接模式(Bridge Pattern) 桥接模式(Bridge Pattern)是一种结构型设计模式,其主要目的是“将抽象与实现解耦,使得两者可以独立地变化”。这种模式通过提供抽象化和实现化之间的桥接结构&#…...
Spring——自动装配Bean
自动装配是Spring满足bean依赖的一种方式 Spring会在上下文中自动寻找,并自动给bean装配属性 在Spring中有三种装配的方式: 1. 在xml中显示配置 2. 在java中显示配置 3. 隐式的自动装配bean【重要】 测试 记得创建Cat、Dog、People类 public clas…...
云端典藏:iCloud中个人收藏品目录的智能存储方案
云端典藏:iCloud中个人收藏品目录的智能存储方案 在数字化生活不断推进的今天,个人收藏品的管理也趋向于电子化和云端化。iCloud作为苹果公司提供的云服务,为个人收藏品目录的存储和管理提供了一个安全、便捷、跨设备的解决方案。本文将详细…...
安全开发基础篇-数据溢出
上一节我们简单讲解了多语言的数据类型,我们只需要知道这个概念,并且在不同语言有不同的规矩就好。这节讲数据溢出,严格说应该是字符串溢出和整数溢出。 在软件开发中,字符串和整数溢出漏洞是常见的安全问题,它们可能…...
Scanner工具类
扫描控制台输入 1.nextLine nextLine() 方法会扫描输入流中的字符,直到遇到行末尾的换行符 \n,然后将该行的内容作为字符串返回,同时,nextLine() 会将 Scanner 对象的位置移动到下一行的开头,以便下一次读取数据时从下…...
springboot3 集成GraalVM
目录 安装GraalVM 配置环境变量 Pom.xml 配置 build包 测试 安装GraalVM Download GraalVM 版本和JDK需要自己选择 配置环境变量 Jave_home 和 path 设置setting.xml <profile><id>graalvm-ce-dev</id><repositories><repository><id&…...
HumanoidBench——模拟仿人机器人算法有未来
概述 论文地址:https://arxiv.org/pdf/2403.10506 仿人机器人具有类似人类的外形,有望在各种环境和任务中为人类提供支持。然而,昂贵且易碎的硬件是这项研究面临的挑战。因此,本研究开发了使用先进模拟技术的 HumanoidBench。该基…...
实现前端用户密码重置功能(有源码)
引言 密码重置功能是任何Web应用程序中至关重要的一部分。当用户忘记密码时,密码重置功能可以帮助他们安全地重设密码。本文将介绍如何使用HTML、CSS和JavaScript(包括Vue.js)来实现前端的密码重置功能。 1. 项目结构 首先,我们…...
《双流多依赖图神经网络实现精确的癌症生存分析》| 文献速递-基于深度学习的多模态数据分析与生存分析
Title 题目 Dual-stream multi-dependency graph neural network enables precise cancer survival analysis 《双流多依赖图神经网络实现精确的癌症生存分析》 01 文献速递介绍 癌症是全球主要的死亡原因,2020年约有1930万新发癌症病例和近1000万癌症相关死亡…...
【Hive SQL 每日一题】在线峰值人数计算
文章目录 测试数据需求说明需求实现 测试数据 -- 创建 user_activity 表 DROP TABLE IF EXISTS user_activity ; CREATE TABLE user_activity (user_id STRING,activity_start TIMESTAMP,activity_end TIMESTAMP );-- 插入数据 INSERT INTO user_activity VALUES (user1, 2024…...
谷粒商城学习笔记-18-快速开发-配置测试微服务基本CRUD功能
文章目录 一,product模块整合mybatis-plus1,引入依赖2,product启动类指定mapper所在包3,在配置文件配置数据库连接信息4,在配置文件中配置mapper.xml映射文件信息 二,单元测试1,编写测试代码&am…...
机器学习库实战:DL4J与Weka在Java中的应用
机器学习是当今技术领域的热门话题,而Java作为一门广泛使用的编程语言,也有许多强大的机器学习库可供选择。本文将深入探讨两个流行的Java机器学习库:Deeplearning4j(DL4J)和Weka,并通过详细的代码示例帮助…...
MongoDB教程(一):Linux系统安装mongoDB详细教程
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、Ubuntu…...
leetcode74. 搜索二维矩阵
给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。…...
Redis 布隆过滤器性能对比分析
redis 实现布隆过滤器实现方法: 1、redis 的 setbit 和 getbit 特点:对于某个bit 设置0或1,对于大量的值需要存储,非常节省空间,查询速度极快,但是不能查询整个key所有的bit,在一次请求有大量…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...







