当前位置: 首页 > news >正文

GitLab CI/CD 持续集成/部署 SpringBoot 项目

一、GitLab CI/CD 介绍

GitLab CI/CDContinuous Integration/Continuous Deployment)是 GitLab 提供的一种持续集成和持续部署的解决方案。它可以自动化软件的构建、测试和部署过程,以便开发者更快地、更频繁地发布可靠的产品。

整体过程如下图所示:

在这里插入图片描述
首先需要在目标机器上部署 Runner 服务,并注册到 gitLab 中,然后在项目中编写 .gitlab-ci.yml 文件,并执行流水线规则,当开发人员提交代码到远程仓库时,根据 .gitlab-ci.yml 文件配置信息,通知 Runner 执行相关脚本等 ,其中会涉及到几个核心特征如下:

  • Pipeline:一系列按照特定顺序执行的作业。这些作业可以被分配到不同的阶段,每个阶段都会按照定义的顺序依次执行。如果一个阶段中的所有作业成功完成,那么就会执行下一个阶段。

  • Jobs and Stages:构成 pipeline 的基本单元,每个作业都包含一系列的脚本命令。阶段则是用来组织作业的方式,它允许你控制作业的执行顺序。

  • Runners:执行作业的服务器。Runner 可以在各种环境中安装和使用,包括 Linux, Windows, Docker, Kubernetes 等。

  • Artifacts:由作业生成的文件,可以在作业结束后保留下来。你可以在之后的作业中使用这些 artifacts,或者直接从 GitLab 下载。

  • Environment and DeploymentGitLab CI/CD 允许定义多个环境,例如测试环境、预生产环境和生产环境,然后在这些环境中部署你的应用。

  • .gitlab-ci.ymlGitLab CI/CD 的配置文件,定义了 pipeline 中的所有作业和阶段。

下面通过GitLab CI/CD 持续集成/部署 SpringBoot 项目以演示整个的使用过程。

其中 SpringBoot 项目通过 docker 运行并采用 docker-compose 管理,因此需要保证服务器端环境已经部署好了 dockerdocker-compose ,由于是 java 项目,jdk 也要事先准备完成。

二、环境部署

2.1 GitLab 安装

关于 GitLab 的部署可以参考下面这篇文章:

使用 docker-compose 搭建私服 Gitlab

在这里插入图片描述

2.2 创建 SpringBoot 项目

这里先创建一个 SpringBoot 项目,并编写好测试接口:

@RestController
@RequestMapping("/test")
public class TestController {@GetMapping("/t1")public String t1(){return "this is server >>> t1 ";}}

由于采用 docker 运行,所以在项目根目录创建 Dockerfile 文件,内容如下:

FROM java:8
MAINTAINER bxc
WORKDIR /app
ADD target/test-project-0.0.1-SNAPSHOT.jar /app/app.jar
CMD ["java", "-jar", "app.jar","--spring.profiles.active=pro"]

gitlab 上创建项目 test-project

在这里插入图片描述

将刚刚创建好的 SpringBoot 项目 pushtest-project 中:

在这里插入图片描述

2.2 Runner 部署安装:

Runner 可以部署在目标机器上,也就是最终运行服务的机器上,也可以是单独的机器通过 ssh 控制目标机器部署服务。

安装 Runner

curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh" | sudo bash

在这里插入图片描述

yum install gitlab-runner

在这里插入图片描述

2.3 注册 Runner

首先到 GitLab test_project 项目下设置下的 CI/CD 下:

在这里插入图片描述

找到 Runners 点击展开:

在这里插入图片描述
在这里插入图片描述

将上面红框中的数据记录下来,等下注册时需要使用。

再次回到部署 Runner 的服务器中,执行下面指令:

gitlab-runner register

按照提示的步骤输入上述相关信息:

  • GitLab instance URLGitLab 服务器的 URL,上面图片中的第二点。
  • registration token:用于注册 Runner 的令牌,上面图片中的第三点。
  • descriptionRunner 的描述,用于在 GitLab UI 中识别你的 Runner
  • tags:用于帮助你组织和选择 Runner。当你在 .gitlab-ci.yml 文件中定义作业时,可以指定需要哪些标签的 Runner 来执行这个作业,这里我的 tags 为:runner
  • optional maintenance note:可选,主要用于记录有关 Runner 的额外信息,比如配置详情、负责维护的人、最后一次更新或维护的日期等。
  • Enter an executor:决定了 Runner 如何执行 CI/CD 作业。GitLab Runner 支持多种 Executor,包括 shell, docker, ssh, virtualbox 等,我这里选择 shell 的形式。

操作完后可以到 gitlab 上刷新页面查看是否注册成功:

在这里插入图片描述

2.4 部署 Maven

由于是基于 Maven 管理的 SpringBoot 依赖,因此需要在 Rnner 的机器上部署 Maven

下载 maven 包 :

https://maven.apache.org/download.cgi

在这里插入图片描述

将下载的安装包上传至服务器中,这里我是 /opt/maven

解压安装包:

tar -zxvf apache-maven-3.9.5-bin.tar.gz

conf/settings.xml 增加阿里镜像源:

<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>
</mirror>

在这里插入图片描述

maven 命令添加到环境变量中:

vi /etc/profile

追加以下内容:

export MAVEN_HOME=/opt/maven/apache-maven-3.9.5
export PATH=$MAVEN_HOME/bin:$PATH

刷新配置

source /etc/profile

测试查看maven版本

mvn -v

在这里插入图片描述

三、测试 Runner 是否正常

SpringBoot 项目根目录创建 .gitlab-ci.yml 文件,先测试下打印 hello world,内容如下:

stages:- deploydeploy-job:tags:- runnerstage: deployscript:- echo "hello world"

提交代码至远程仓库:

git add .
git commit -m 'ci'
git push

在这里插入图片描述

gitlab 中刷新查看:

在这里插入图片描述

这里绿色的对号表示已经执行成功了 .gitlab-ci.yml 中的定义,可以点击进去查看:

在这里插入图片描述

点击 deploy-job 可以查看执行结果:

在这里插入图片描述

四、CI/CD 持续集成/部署 SpringBoot 项目

由于是采用 docker-compose 管理运行 SpringBoot 项目,这里在根目录创建 docker-compose.yml ,内容如下:

version: '2.0'services:test-project:restart: alwaysimage: test-project:1.0container_name: test-projectports:- "8080:8080"networks:- test
networks:  test:

修改 .gitlab-ci.yml 文件,增加打包部署的脚本:

stages:- deploydeploy:tags:- runnerstage: deployscript:- pwd- mvn clean package- docker-compose down- docker build -t test-project:1.0  .- docker-compose up -d

提交至远程仓库:

在这里插入图片描述

gitlab 中查看:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

点击可以看到运行的日志:

在这里插入图片描述

如果在打包镜像的时候报下面错误:

Couldn’t connect to Docker daemon at http+docker://localhost - is it running?

在安装 Runner 的时候会默认创建一个 gitlab-runner 用户,该用户需要有操作 docker 的权限 :

gitlab-runner 用户授权:

sudo usermod -aG docker gitlab-runner

重启 docker

sudo systemctl restart docker

然后再重新运行流水线。

流水线运行结束后到机器上docker ps 查看是否有 test-project 容器:

在这里插入图片描述

容器已经启动了,可以通过浏览器访问测试接口:

http://ip:8080/test/t1

在这里插入图片描述
成功访问!

下面再创建一个测试接口 t2

@RestController
@RequestMapping("/test")
public class TestController {@GetMapping("/t1")public String t1(){return "this is server >>> t1 ";}@GetMapping("/t2")public String t2(){return "this is server >>> t2 ";}}

提交代码到远程仓库:

在这里插入图片描述

等待流水线构建成功:

在这里插入图片描述

访问 t2 测试接口:

http://ip:8080/test/t2

在这里插入图片描述

成功访问到 t2 测试接口。

相关文章:

GitLab CI/CD 持续集成/部署 SpringBoot 项目

一、GitLab CI/CD 介绍 GitLab CI/CD&#xff08;Continuous Integration/Continuous Deployment&#xff09;是 GitLab 提供的一种持续集成和持续部署的解决方案。它可以自动化软件的构建、测试和部署过程&#xff0c;以便开发者更快地、更频繁地发布可靠的产品。 整体过程如…...

第二证券:政策效应逐步显现 A股修复行情有望持续演绎

上星期&#xff0c;A股商场延续企稳反弹的态势&#xff0c;上证指数震荡上涨0.43%&#xff1b;沪深两市日均成交额回升至8700亿元左右&#xff1b;北向资金近一个月初次转为周净买入5.57亿元。 安排观点一起认为&#xff0c;在稳增加、稳预期相关政策持续发力&#xff0c;上市…...

sql逻辑优化

1.分页 通常使用每页条数及第一页作为参数 开发接口 GetMapping("/querySystemList") public List<SystemAduit> querySystemList(RequestParam("keyword") String keyword,RequestParam(name "offset", defaultValue "0") i…...

【数据结构】树与二叉树(一):树(森林)的基本概念:父亲、儿子、兄弟、后裔、祖先、度、叶子结点、分支结点、结点的层数、路径、路径长度、结点的深度、树的深度

文章目录 5.1 树的基本概念5.1.1 树的定义树有序树、无序树 5.1.2 森林的定义5.1.3 树的术语1. 父亲&#xff08;parent&#xff09;、儿子&#xff08;child&#xff09;、兄弟&#xff08;sibling&#xff09;、后裔&#xff08;descendant&#xff09;、祖先&#xff08;anc…...

2024 Android Framework学习大纲之基础理论篇

2024 Android Framework学习大纲之基础理论篇 受到当前经济影响&#xff0c;互联网越来越不景气了,因此Android App开发也是越来越不景气&#xff0c;中小型公司越来越偏向跨平台开发&#xff0c;比如Flutter&#xff0c;这样能节省成本&#xff0c;笔者也曾经是一名6年多工作经…...

【深度学习】Yolov8 区域计数

git&#xff1a;https://github.com/ultralytics/ultralytics/blob/main/examples/YOLOv8-Region-Counter/readme.md 很长时间没有做yolov的项目了&#xff0c;最近一看yolov8有一个区域计数的功能&#xff0c;不得不说很实用啊。 b站&#xff1a;https://www.bilibili.com/vid…...

Windows 系统服务器部署jar包时,推荐使用winsw,将jar包注册成服务,并设置开机启动。

一、其他方式不推荐的原因 1、Spring Boot生成的jar包&#xff0c;可以直接用java -jar运行&#xff0c;但是前提是需要登录用户&#xff0c;而且注销用户后会退出程序&#xff0c;所以不可用。 2、使用计划任务&#xff0c;写一个bat处理文件&#xff0c;里面写java -jar运行…...

npm 包管理

1. 命令 // 查看是否登录 npm who am i // 登录&#xff1a;输入用户名、密码、邮箱、一次性登录密码&#xff08;邮箱接收&#xff09; npm login // 创建 npm init // 快速创建 npm init -y // 发包 npm publish // 发包&#xff08;开源&#xff09; npm publish --access …...

力扣370周赛 -- 第三题(树形DP)

该题的方法&#xff0c;也有点背包的意思&#xff0c;如果一些不懂的朋友&#xff0c;可以从背包的角度去理解该树形DP 问题 题解主要在注释里 //该题是背包问题树形dp问题的结合版&#xff0c;在树上解决背包问题 //背包问题就是选或不选当前物品 //本题求的是最大分数 //先转…...

GPT学习笔记

百度的文心一言 阿里的通义千问 通过GPT能力&#xff0c;提升用户体验和产品力 GPT的出现是AI的iPhone时刻。2007年1月9日&#xff0c;第一代iPhone发布&#xff0c;开启移动互联网时代。新一轮的产业革命。 GPT模型发展时间线&#xff1a; Copilot - 副驾驶 应用&#xf…...

Apex的addError()显示的消息中实现换行

直接用‘<br/>’是无效的&#xff0c;因为addError默认不转义HTML符号&#xff0c;如果需要转义&#xff0c;应该将第二个参数escape设置为false。不过即使设置了也只对classic页面生效&#xff0c;lightning页面还是无法转义。 官方文档&#xff1a; 参考资料&#xf…...

STM32中微秒延时的实现方式

STM32中微秒延时的实现方式 0.前言一、裸机实现方式二、FreeRTOS实现方式三、定时器实现&#xff08;通用&#xff09;4、总结 0.前言 最近在STM32驱动移植过程中需要用到微秒延时来实现一些外设的时序&#xff0c;由于网上找到的驱动方法良莠不齐&#xff0c;笔者在实现时序过…...

2005-2021年全国各省家庭承包耕地面积和家庭承包耕地流转总面积数据(无缺失)

2005-2021年全国各省家庭承包耕地面积和家庭承包耕地流转总面积数据 1、时间&#xff1a;2005-2021年 2、来源&#xff1a;农村经营管理统计NB 3、指标&#xff1a;家庭承包经营耕地面积、家庭承包耕地流转总面积&#xff08;单位&#xff1a;亩&#xff09; 4、范围&#…...

【六、http】go的http的客户端重定向

一、http的重定向 重定向过程&#xff1a;客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器–》客户浏览器发现是302响应&#xff0c;则自动再发送一个新的http请求&#xff0c;请求url是新的location地址----》服务器根据此请求寻…...

AI:61-基于深度学习的草莓病害识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…...

idea文件比对

idea文件比对 1.项目内的文件比对2.项目间的文件比对3. 剪切板对比4. 版本历史(不同分支和不同commit)对比 1.项目内的文件比对 在项目中选择好需要比对的文件(类)&#xff0c;然后选择Compare Files Mac下的快捷键是Commandd&#xff0c; 这样的比对像是git冲突解决一样 …...

重磅发布|美创科技新一代 数据安全管理平台(DSM Cloud)全新升级

重磅发布 新一代 数据安全管理平台&#xff08;DSM Cloud&#xff09; 美创科技新一代 数据安全管理平台&#xff08;简称&#xff1a;DSM Cloud&#xff09;全新升级&#xff0c;正式发布。 在业务上云飞速发展过程中&#xff0c;快速应对数据激增&#xff0c;同时有效保障数…...

比SAM小60倍的分割一切模型:MobileSAM

1 MobileSAM SAM就是一类处理图像分割任务的通用模型。与以往只能处理某种特定类型图片的图像分割模型不同&#xff0c;SAM可以处理所有类型的图像。 在SAM出现前&#xff0c;基本上所有的图像分割模型都是专有模型。比如&#xff0c;在医学领域&#xff0c;有专门分割核磁图…...

版本控制系统-SVN

SVN Apache Subversion 通常被缩写成 SVN&#xff0c;是一个开放源代码的版本控制系统。 官网&#xff1a;https://subversion.apache.org 资料&#xff1a;https://svnbook.red-bean.com、https://www.runoob.com/svn/svn-tutorial.html 下载&#xff1a;https://sourceforg…...

【电路笔记】-串联RLC电路分析

串联RLC电路分析 文章目录 串联RLC电路分析1、概述2、瞬态响应3、AC响应4、RCL和CLR配置5、结论 电阻器 、电感器 (L) 和电容器 © 是电子器件中的三个基本无源元件。 它们的属性和行为已在交流电阻、交流电感和交流电容文章中详细介绍。 在本文中&#xff0c;我们将重点讨…...

大数据毕业设计选题推荐-家具公司运营数据分析平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…...

【触想智能】工业显示器上市前的检测项目分享

工业显示器在上市前&#xff0c;需要做一项重要的工作&#xff0c;那就是工业显示器出厂前的产品可靠性检测。 工业显示器选择的测试项目相比商用端更为严格&#xff0c;常见的性能测试项目包括高温老化、防尘防水、电磁静电干扰、防摔防撞等&#xff0c;在工业级应用领域&…...

Vue使用epubjs电子书

npmjs: https://www.npmjs.com/package/epubjs 在线电子书转换器 安装&#xff1a; npm i epubjs 简单封装&#xff1a; src/hooks/ import Epub from "epubjs"; import type { Book, Rendition } from epubjs import type { BookOptions } from epubjs/types…...

python机器学习——决策树

决策树 # 模块导入 from sklearn.tree import ExtraTreeRegressor as ETR, DecisionTreeRegressor as DTRExtraTreeRegressor和DecisionTreeRegressor是scikit-learn库中的两种回归模型&#xff0c;用于拟合和预测连续型目标变量。 决策树是一种基于树结构的机器学习算法&…...

__attribute__((__used__)) 和 __attribute__((__section__(“*“ “*“)))的使用

见&#xff1a;haproxy代码 C语言注册函数和调用函数&#xff0c;便于模块化开发和编程。 #include <stdio.h>#ifdef __APPLE__ #define HA_SECTION(s) __attribute__((__section__("__DATA, " s))) #define HA_SECTION_START(s) __asm("…...

webgoat-(A1)SQL Injection

SQL Injection (intro) SQL 命令主要分为三类&#xff1a; 数据操作语言 &#xff08;DML&#xff09;DML 语句可用于请求记录 &#xff08;SELECT&#xff09;、添加记录 &#xff08;INSERT&#xff09;、删除记录 &#xff08;DELETE&#xff09; 和修改现有记录 &#xff…...

Flink的API分层、架构与组件原理、并行度、任务执行计划

Flink的API分层 Apache Flink的API分为四个层次&#xff0c;每个层次都提供不同的抽象和功能&#xff0c;以满足不同场景下的数据处理需求。下面是这四个层次的具体介绍&#xff1a; CEP API&#xff1a;Flink API 最底层的抽象为有状态实时流处理。其抽象实现是Process Functi…...

Transformer:开源机器学习项目,上千种预训练模型 | 开源日报 No.66

huggingface/transformers Stars: 113.5k License: Apache-2.0 这个项目是一个名为 Transformers 的开源机器学习项目&#xff0c;它提供了数千种预训练模型&#xff0c;用于在文本、视觉和音频等不同领域执行任务。该项目主要功能包括&#xff1a; 文本处理&#xff1a;支持…...

Corel VideoStudio 会声会影2024剪辑中间的视频怎么删 剪辑中音乐太长怎么办

我很喜欢视频剪辑软件Corel VideoStudio 会声会影2024&#xff0c;因为它使用起来很有趣。它很容易使用&#xff0c;但仍然给你很多功能和力量。视频剪辑软件Corel VideoStudio 会声会影2023让我与世界分享我的想法&#xff01;“这个产品的功能非常多&#xff0c;我几乎没有触…...

数据结构初阶---复杂度的OJ例题

复杂度的OJ例题 一、消失的数字1.思路一2.思路二3.思路三 二、旋转数组1.思路一2.思路二3.思路三 一、消失的数字 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(N)时间内完成吗&#xff1f; 链接&#xff1a;力扣&…...