DevOps系列文章 之 SpringBoot整合GitLab-CI实现持续集成

news2024/12/23 22:17:12

在企业开发过程中,我们开发的功能或者是修复的BUG都需要部署到服务器上去,而这部分部署操作又是重复且繁琐的工作,GitLab-CI 持续集成为我们解决了这一痛点,将重复部署的工作自动化,大大的节省了程序员们的宝贵时间。本文详细讲述了 GitLab-CI 持续集成的安装、部署、以及配置。

文中的工具包有需要的话也可以私信博主哟~

一、概述

在这里插入图片描述

1.1、什么是CI/CD

CI/CD 属于 DevOps,代表持续集成、持续交付/部署。CI/CD 自动化了传统上将新代码从提交到生产(例如构建、测试和部署)以及基础设施配置所需的大部分或全部手动人工干预。借助 CI/CD ,开发人员可以对代码进行更改,然后自动测试并推出以进行交付和部署。以实现停机时间最小化,代码发布速度更快。

1.2、持续集成(CI)

持续集成是在提交或合并代码时,自动测试每个更改,并自动启动构建。可以大大减少开发和运维人员的重复工作,可以在软件开发生命周期的更早阶段更轻松的发现并修复错误和安全问题。

1.3、持续交付(CD)

持续交付是一种软件开发实践,一般与持续集成结合使用,以自动化基础设置供应和应用程序发布过程。

一旦代码作为 CI 流程的一部分进行了测试和构建,持续交付将在最后阶段接管,以确保可以随时部署并将部署所需要的环境打包在一起。

通过持续交付,可以随时将构建的软件部署到生产环境。可以手动触发部署,也可以进行自动化部署。

二、CI/CD流水线

2.1、Pipeline

在这里插入图片描述

Pipeline 相当于构建任务,里面可以包含多个流程,如安装依赖、运行测试、编译、部署测试服务器、部署生产服务器等流程。

任何提交或合并代码都可以触发 Pipeline。

2.2、Stages

在这里插入图片描述

Stages 表示构建阶段,可以在一次 Pipeline 中定义多个 Stages。

Stages 有以下特点:

  • 所有 Stages 会按照顺序运行,即当一个 Stage 完成后,下一个 Stage 才会开始
  • 只有当所有 Stages 完成后,该构建任务 (Pipeline) 才会成功
  • 如果任何一个 Stage 失败,那么后面的 Stages 不会执行,该构建任务 (Pipeline) 失败

2.3、Jobs

在这里插入图片描述

Jobs 表示构建工作,表示某个 Stage 里面执行的工作。可以在 Stages 里面定义多个 Jobs。

Jobs 有以下特点:

  • 相同 Stage 中的 Jobs 会并行执行
  • 相同 Stage 中的 Jobs 都执行成功时,该 Stage 才会成功
  • 如果任何一个 Job 失败,那么该 Stage 失败,即该构建任务 (Pipeline) 失败

2.4、Runners

Runner 是一个在 GitLab CI/CD 管道中运行作业的应用程序。简而言之,就是由 Runner 来执行这些构建任务。

GitLab Runner 可以安装到不同的机器上,也可以在容器或 Kubernetes 集群中运行。Runner 在安装机器上处理作业,在构建任务运行期间并不会影响到 GitLab 的性能。

三、安装GitLab Runner

3.1、环境准备

创建目录

1

mkdir -p /usr/local/docker/runner

1

mkdir -p /usr/local/docker/runner/environment

下载 jdk-8u341-linux-x64.tar.gzapache-maven-3.5.3-bin.tar.gzsettings.xmldocker-compose,并将其上传至 environment 目录

1

2

3

4

5

6

7

8

$ ll

total 197168

drwxr-xr-x 2 root root      4096 Dec  3 20:13 ./

drwxr-xr-x 3 root root      4096 Dec  3 20:13 ../

-rw-r--r-- 1 root root   8799579 Dec  3 20:13 apache-maven-3.5.3-bin.tar.gz

-rw-r--r-- 1 root root  44924928 Dec  3 20:13 docker-compose

-rw-r--r-- 1 root root 148162542 Dec  3 20:13 jdk-8u341-linux-x64.tar.gz

-rw-r--r-- 1 root root     10596 Dec  4 20:13 settings.xml

settings.xml 中增加了 maven 部署的 server 节点,否则项目 deploy 时会失败

3.2、创建Dockerfile

environment目录下创建 daemon.json

1

vi /usr/local/docker/runner/environment/daemon.json

内容如下:

1

2

3

4

5

6

7

8

{

  "registry-mirrors": [

    "https://mirror.ccs.tencentyun.com"

  ],

  "insecure-registries": [

    "192.168.110.158:5000"

  ]

}

  • registry-mirrors:为镜像加速地址,这里是使用的腾讯云的镜像加速地址。
  • insecure-registries:Docker仓库的IP。

注意:需要提前搭建Docker 私服(Docker Registry)

environment目录下创建 Dockerfile

1

vi /usr/local/docker/runner/environment/Dockerfile

内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

FROM gitlab/gitlab-runner:v11.0.2

# 修改软件源

RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources.list && \

    echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/sources.list && \

    echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/sources.list && \

    echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' >> /etc/apt/sources.list && \

    apt-get update -y && \

    apt-get clean

# 安装 Docker

RUN apt-get -y install apt-transport-https ca-certificates curl software-properties-common && \

    curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add - && \

    add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && \

    apt-get update -y && \

    apt-get install -y docker-ce

COPY daemon.json /etc/docker/daemon.json

# 安装 Docker Compose

WORKDIR /usr/local/bin

COPY docker-compose /usr/local/bin

RUN chmod +x docker-compose

# 安装 Java

RUN mkdir -p /usr/local/java

WORKDIR /usr/local/java

COPY jdk-8u341-linux-x64.tar.gz /usr/local/java

RUN tar -zxvf jdk-8u341-linux-x64.tar.gz && \

    rm -fr jdk-8u341-linux-x64.tar.gz

# 安装 Maven

RUN mkdir -p /usr/local/maven

WORKDIR /usr/local/maven

COPY apache-maven-3.5.3-bin.tar.gz /usr/local/maven

RUN tar -zxvf apache-maven-3.5.3-bin.tar.gz && \

    rm -fr apache-maven-3.5.3-bin.tar.gz

COPY settings.xml /usr/local/maven/apache-maven-3.5.3/conf/settings.xml

# 配置环境变量

ENV JAVA_HOME /usr/local/java/jdk1.8.0_341

ENV MAVEN_HOME /usr/local/maven/apache-maven-3.5.3

ENV PATH $PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

WORKDIR /

3.3、创建docker-compose

runner目录下创建 docker-compose.yml

1

vi /usr/local/docker/runner/docker-compose.yml

内容如下:

1

2

3

4

5

6

7

8

9

10

version: '3.1'

services:

  gitlab-runner:

    build: environment

    restart: always

    container_name: gitlab-runner

    privileged: true

    volumes:

      - ./config:/etc/gitlab-runner

      - /var/run/docker.sock:/var/run/docker.sock

构建启动

1

docker-compose up -d

启动后,会自动进行构建

3.4、注册Runner

需要将每一个项目都注册 Runner。

进入到我们需要注册Runner的项目

在这里插入图片描述

点击设置->CI/CD,在右侧找到Runner,点击展开

在这里插入图片描述

可以看到这个项目的 Runner 的详细信息,其中注册令牌是我们接下来注册 Runner 时必须要用到的

在这里插入图片描述

在 GitLab Runner 部署服务器上执行命令

1

docker exec -it gitlab-runner gitlab-runner register

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

# 输入 GitLab 地址

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):

http://192.168.110.158:8080/

# 输入 Gitlab-ci token

Please enter the gitlab-ci token for this runner:

78qwWqvR9xDc5_BjYpwo

# 输入 Runner 的说明

Please enter the gitlab-ci description for this runner:

[cdc79d8453ec]:

# 设置 Tag

Please enter the gitlab-ci tags for this runner (comma separated):

deploy

# 选择 runner 执行器

Registering runner... succeeded                     runner=78qwWqvR

Please enter the executor: kubernetes, docker-ssh, parallels, virtualbox, docker-ssh+machine, docker, shell, ssh, docker+machine:

shell

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

配置完后,项目中会显示一个有效可用的 runner

在这里插入图片描述

3.4、项目配置

项目中需要添加一个 .gitlab-ci.yml 文件,用于定义要运行的脚本。

3.4.1、依赖管理模块

刚刚在my-project-dependencies项目中配置了 Runner,而 my-project-dependencies 项目只需要将其部署到 Nexus私服中,所以此项目的 .gitlab-ci.yml 文件脚本内容就只需要将其deployNexus即可。

在这里插入图片描述

内容如下:

1

2

3

4

5

6

7

stages:

  - deploy

deploy:

  stage: deploy

  script:

    - /usr/local/maven/apache-maven-3.5.3/bin/mvn deploy

项目结构图如下:

在这里插入图片描述

提交my-project-dependencies项目,可以在GitLab看到我们刚刚创建的流水线

在这里插入图片描述

如果状态一直在运行中,在设置里面的 Runner 中,勾选运行没有标签的作业

在这里插入图片描述

3.4.2、通用模块

my-project-common通用模块,也需要注册Runner,这里就不重复赘述了,参考上文。

通用模块持续集成步骤:

在这里插入图片描述

  • 清理
  • 打包

.gitlab-ci.yml 文件内容如下:

1

2

3

4

5

6

7

stages:

  - deploy

deploy:

  stage: deploy

  script:

    - /usr/local/maven/apache-maven-3.5.3/bin/mvn clean deploy

提交my-project-common通用模块,可以在Nexus中看到上传的jar,持续集成成功。

在这里插入图片描述

在这里插入图片描述

3.4.3、服务模块

my-project-server项目服务模块,同样需要注册Runner。

项目服务模块持续集成步骤:

在这里插入图片描述

  • 打包构建Docker镜像
  • 推送Docker仓库
  • 运行容器
  • 清理虚悬镜像

.gitlab-ci.yml 文件内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

stages:

  - build

  - push

  - run

  - clean

build:

  stage: build

  script:

    - /usr/local/maven/apache-maven-3.5.3/bin/mvn clean package -Dmaven.test.skip=true

    - cp target/my-project-server-1.0.0-SNAPSHOT.jar docker

    - cd docker

    - docker build -t 192.168.110.158:5000/my-project-server .

push:

  stage: push

  script:

    - docker push 192.168.110.158:5000/my-project-server

run:

  stage: run

  script:

    - cd docker

    - docker-compose down

    - docker-compose up -d

clean:

  stage: clean

  script:

    - docker rmi $(docker images -q -f dangling=true)

docker 仓库地址更改为自己的IP

提交my-project-server项目服务模块,查看构建结果

在这里插入图片描述

第一次最后一个步骤构建失败,是因为没有可删除的虚悬镜像,导致删除失败,这个不影响

构建成功,访问查询所有用户接口:

http://IP:8899/sys-user/get/all

在这里插入图片描述

可以访问Docker仓库,可以看到刚刚持续集成推送的镜像

1

2

$ curl 192.168.110.158:5000/v2/_catalog

{"repositories":["my-project-server"]}

到这里,项目的持续集成就完成啦!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

群晖 NAS 十分精准的安装 Mysql 远程访问连接

文章目录 1. 安装Mysql2. 安装phpMyAdmin3. 修改User 表4. 本地测试连接5. 安装cpolar6. 配置公网访问地址7. 固定连接公网地址 转载自cpolar极点云文章:群晖NAS 安装 MySQL远程访问连接 群晖安装MySQL具有高效、安全、可靠、灵活等优势,可以为用户提供一…

C++初阶之一篇文章教会你queue和priority_queue(理解使用和模拟实现)

queue和priority_queue(理解使用和模拟实现) 什么是queuequeue的使用1.queue构造函数2.empty()3.size()4.front()5.back();6.push7.emplace8.pop()9.swap queue模拟实现什么是priority_queuepriority_queue的使用1.priority_queue构造函数1.1 模板参数 C…

如何切换goland之中的版本号(升级go 到1.20)

go 安装/版本切换_go 切换版本_云满笔记的博客-CSDN博客 用brew就行: echo export PATH"/opt/homebrew/opt/go1.20/bin:$PATH" >> ~/.zshrc

无涯教程-Perl - scalar函数

描述 此函数强制EXPR的判断在标量context中进行,即使它通常在列表context中也可以使用。 语法 以下是此函数的简单语法- scalar EXPR返回值 此函数返回标量。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -wa (1,2,3,4); b (10,20,30,40);c ( a, b ); prin…

如何与 Anheuser-Busch 建立 EDI 连接?

Anheuser-Busch 于 1852 年创立,总部位于美国密苏里州圣路易斯市,出产的百威啤酒(Budweiser)名扬世界,深受各国消费者喜爱。推进数字化转型,科技赋能降费增效。在诸多举措之中,可以看到 EDI 的身影,借助 ED…

Java智慧工地APP源码带AI识别

智慧工地为建筑全生命周期赋能,用创新的可视化与智能化方法,降低成本,创造价值。 一、智慧工地APP概述 智慧工地”立足于互联网,采用云计算,大数据和物联网等技术手段,针对当前建筑行业的特点,…

Apipost接口自动化控制器使用详解

测试人员在编写测试用例以及实际测试过程中,经常会遇到两个棘手的问题: •稍微复杂一些的自动化测试逻辑,往往需要手动写代码才能实现,难以实现和维护 •测试用例编写完成后,需要手动执行,难以接入自动化体…

对比学习论文综述总结

第一阶段:百花齐放(18-19中) 有InstDisc(Instance Discrimination)、CPC、CMC代表工作。在这个阶段方法模型都还没有统一,目标函数也没有统一,代理任务也没有统一,所以说是一个百花齐放的时代 1 判别式代理任务---个体判别任务 1.1 Inst Dict---一个编码器+一个memory…

springboot结合element-ui实现增删改查,附前端完整代码

实现功能 前端完整代码 后端接口 登录,注册,查询所有用户,根据用户名模糊查询,添加用户,更新用户,删除用户 前端 注册,登录,退出,用户增删改查,导航栏&#…

关于单行文本input和多行文本textarea唤起自动完成功能

若不要自动完成功能,则增加 autocomplete"off" 属性到控件或窗体中,默认 autocomplete"on" 处于开启状态。 实测过程中,单行文本可以有自动完成功能,多行文本无论如何实验都不行。查了查资料,MDN…

算法提高-线段树

线段树 线段树和树状数组线段树的五个操作单点修改(不需要懒标记)要求的答案就是我们要维护的属性,不需要维护其他的属性帮助我们获得答案要求的答案还需要其他属性去维护 区间修改(需要懒标记,pushdown)有…

小爱同学今日起开启邀请测试, 小米Al 大模型团队整装待发

在小米雷军年度演讲中,小米宣布未来将在技术研发上投入超过200亿元人民币,并预计在2023年达到这一目标。除此之外,雷军还强调了5G技术在小米发展中的重要性,称其为必要标准,并预测小米将进入世界前十的位置。 雷军还透…

配置 yum/dnf 置您的系统以使用默认存储库

题目 给系统配置默认存储库,要求如下: YUM 的 两 个 存 储 库 的 地 址 分 别 是 : ftp://host.domain8.rhce.cc/dvd/BaseOS ftp://host.domain8.rhce.cc/dvd/AppStream vim /etc/yum.repos.d/redhat.repo [base] namebase baseurlftp:/…

釉面陶瓷器皿SOR/2016-175标准上架亚马逊加拿大站

亲爱的釉面陶瓷器皿和玻璃器皿制造商和卖家,亚马逊加拿大站将执行SOR/2016-175法规。这是一份新的法规,规定了含有铅和镉的釉面陶瓷器和玻璃器皿需要满足的要求。让我们一起来看一看,为什么要实行SOR/2016-175法规?这是一个保护消…

Unity游戏源码分享-中国象棋Unity5.6版本

Unity游戏源码分享-中国象棋Unity5.6版本 项目地址: https://download.csdn.net/download/Highning0007/88215699

linux系统服务学习(一)Linux高级命令扩展

文章目录 Linux高级命令(扩展)一、find命令1、find命令作用2、基本语法3、*星号通配符4、根据文件修改时间搜索文件☆ 聊一下Windows中的文件时间概念?☆ 使用stat命令获取文件的最后修改时间☆ 创建文件时设置修改时间以及修改文件的修改时间…

母牛的故事

一、题目 有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛? Input 输入数据由多个测试实例组成,每个测试实例占一行,包…

11 个 Python 编码习惯

让你成为糟糕程序员的 11 个 Python 编码习惯 简介 Python 因其简洁性和可读性而备受推崇,但即使是最有经验的程序员也可能会陷入影响代码质量的习惯中。 在本博客中,我们将探讨 10 种常见的编码习惯,它们会降低您作为 Python 程序员的效率。…

深入探析设计模式:工厂模式的三种姿态

深入探析设计模式:工厂模式的三种姿态 1. 简单工厂模式1.1 概念1.2 案例1.3 优缺点 2. 抽象工厂模式2.1 概念2.2 案例:跨品牌手机生产2.3 优缺点 3. 超级工厂模式3.1 概念3.2 案例:动物园游览3.3 优缺点 4. 总结 欢迎阅读本文,今天…

windows10和linux18.04中配置mmhuman3d

分类:动作捕捉 github地址:https://github.com/open-mmlab/mmhuman3d 所需环境: Windows10,CUDA11.6,conda 4.13.0,Visual Studio 2017; Ubuntu18.04,conda22.9.0,CUDA11…