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:
  - deploy

deploy-job:
  tags:
    - runner
  stage: deploy
  script:
    - 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: always
    image: test-project:1.0
    container_name: test-project
    ports:
      - "8080:8080"
    networks:
      - test
networks:  
  test:

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

stages:
  - deploy

deploy:
  tags:
    - runner
  stage: deploy
  script:
    - 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 测试接口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/118449.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity meta的一些常见属性

Unity会项目文件夹中的每个文件分配一个同名后缀为.meta的文件。 我们可以将meta文件理解不同文件之间的桥梁&#xff0c;通过它引擎可以管理不同文件之间的依赖关系。 使用TXT文本文件打开之后&#xff0c;大致属性如下&#xff1a; 其中常用的属性有guid、 assetBundleName以…

网络原理---网络初识

文章目录 网络发展史独立模式网络互连局域网LAN广域网WAN 网络通信基础IP地址端口号 认识协议什么是协议&#xff1f;协议分层为什么要分层&#xff1f;两种典型的分层方式&#xff1a;OSI七层TCP/IP五层 网络发展史 从我们出生以来&#xff0c;网络世界就已经纷繁错杂。我们虽…

大厂面试题-b树和b+树的理解

为了更清晰的解答这个问题&#xff0c;从三个方面来回答&#xff1a; a.了解二叉树、AVL树、B树的概念 b.B树和B树的应用场景 1.B树是一种多路平衡查找树&#xff0c;为了更形象的理解&#xff0c;我们来看这张图。 二叉树&#xff0c;每个节点支持两个分支的树结构&#xff…

阿里云二级域名绑定与宝塔Nginx反向代理配置

在阿里或者腾讯...各大域名商买好域名&#xff0c;备案解析好&#xff0c;目标URL&#xff0c;是真正的地址&#xff0c;比如一些端口&#xff0c;后者会自动填写。 注意ssl配置好&#xff0c;这里不要带反代端口

SoftwareTest4 - 咋设计一个好的测试用例

咋设计一个好的测试用例 一 . 设计测试用例的万能公式功能测试性能测试界面测试兼容性测试易用性测试安全测试案例案例1 : 对水杯设计测试用例案例 2 : 对登录页面设计测试用例 二 . 具体设计测试用例的方法2.1 等价类等价类的概念等价类的用例编写 2.2 边界值2.3 判定表2.4 场…

Rust学习日记(二)变量的使用--结合--温度换算/斐波那契数列--实例

前言&#xff1a; 这是一个系列的学习笔记&#xff0c;会将笔者学习Rust语言的心得记录。 当然&#xff0c;这并非是流水账似的记录&#xff0c;而是结合实际程序项目的记录&#xff0c;如果你也对Rust感兴趣&#xff0c;那么我们可以一起交流探讨&#xff0c;使用Rust来构建程…

国外住宅IP代理选择的8个方法,稳定的海外IP哪个靠谱?

一、国外住宅IP代理是什么&#xff1f; 代理服务器充当您和互联网之间的网关。它是一个中间服务器&#xff0c;将最终用户与他们浏览的网站分开。如果您使用国外代理IP&#xff0c;互联网流量将通过国外代理服务器流向您请求的地址。然后&#xff0c;请求通过同一个代理服务器…

【Redis】掌握篇--Redis与SSM进行整合

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Redis的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Redis与SSM的整合 1.添加Redis依赖 2…

网络安全应急响应工具(系统痕迹采集)-FireKylin

文章目录 网络安全应急响应工具(系统痕迹采集)-FireKylin1.FireKylin介绍【v1.4.0】 2021-12-20【v1.0.1】 2021-08-09 2.客户端界面Agent支持的操作系统FireKylinAgent界面使用方式比较传统方式与FireKylin比较无法可达目标的场景应用对比 3.使用教程设置语言Agent配置&#x…

掌握文件批量改名的技巧:实现跨文件夹文件统一命名及编号的实用方法“

在日常工作中&#xff0c;我们经常需要处理大量的文件&#xff0c;而这些文件的名字可能各不相同&#xff0c;给我们的管理工作带来了很大的不便。为了解决这个问题&#xff0c;今天我们为您推荐一款全新的文件批量改名工具&#xff0c;它可以帮助您在不同文件夹里的文件进行统…

操作系统复习(3)处理机调度与死锁

一、概述 1.1了解调度的层次 调度是指&#xff0c;在一个队列中&#xff0c;按照某种方法&#xff08;算法&#xff09;&#xff0c;选择一个合适的个体的过程。进程调度的功能就是按一定策略、动态地把CPU分配给处于就绪队列中的某一进程&#xff0c;并使之执行。 作业调度&…

【qemu逃逸】HWS2017-FastCP

前言 虚拟机用户名&#xff1a;root 虚拟机密码&#xff1a;无密码 本题有符号&#xff0c;所以对于设备定位啥的就不多说了&#xff0c;直接逆向设备吧。 设备逆向 在 realize 函数中设置一个时钟任务&#xff0c;并且可以看到只注册了 mmio&#xff0c;大小为 0x100000。…

小白必看!企业开源知识库管理系统优势和选择

在当今信息爆炸的时代&#xff0c;企业面临着海量的知识和信息需要管理和利用。为了提高团队的协作效率、促进知识共享和创新&#xff0c;越来越多的企业开始关注和采用开源企业知识库管理系统。这种系统为企业提供了一个集中化的平台&#xff0c;用于存储、组织和分享知识资产…

fio数据整理之二

fio数据简单抓取 上文我们完成了一些fio output数据的简单抓取&#xff0c;本文将针对抓取的数据做进一步的处理&#xff0c;输出到表格之中&#xff0c;方便我们查看&#xff0c;统计结果。 本文先使用最简单的方法创建csv档案 我们现有个基本认知&#xff0c;在csv档案中&am…

CBAM:Convolutional Block Attention Module

CBAM&#xff08;Convolutional Block Attention Module&#xff09;是一种深度学习领域的注意力机制&#xff0c;旨在增强卷积神经网络对图像特征的建模和表示能力。CBAM引入了通道和空间两种不同的注意力机制&#xff0c;使模型能够动态调整特征图的权重&#xff0c;以适应不…

MVC、MVP、MVVM区别

MVC、MVP、MVVM区别 MVC&#xff08;Model-View-Controller&#xff09; 。是一种设计模式&#xff0c;通常用于组织与应用程序的数据流。它通常包括三个组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&…

sql中的加减乘除

自学SQL网(教程 视频 练习全套)

[vmware]vmware虚拟机压缩空间清理空间

vmware中的ubuntu使用如果拷贝文件进去在删除&#xff0c;vmare镜像文件并不会减少日积月累会不断是的真实物理磁盘空间大幅度减少&#xff0c;比如我以前windows操作系统本来只有30GB最后居然占道硬盘200GB&#xff0c;清理方法有2种。 第一种&#xff1a;vmware界面操作 第二…

阿里云服务器省钱购买和使用方法(图文详解)

阿里云服务器使用教程包括云服务器购买、云服务器配置选择、云服务器开通端口号、搭建网站所需Web环境、安装网站程序、域名解析到云服务器公网IP地址&#xff0c;最后网站上线全流程&#xff0c;新手站长xinshouzhanzhang.com分享阿里云服务器详细使用教程&#xff1a; 一&am…

数学建模比赛中常用的建模提示词(数模prompt)

以下为数学建模比赛中常用的建模提示词&#xff0c;希望对你有所帮助&#xff01; 帮我总结一下数学建模有哪些预测类算法&#xff1f; 灰色预测模型级比检验是什么意思? 描述一下BP神经网络算法的建模步骤 对于分类变量与分类变量相关性分析用什么算法 前10年的数据分别是1&a…