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

在企业开发过程中,我们开发的功能或者是修复的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.hqwc.cn/news/67538.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

认识Node.js及三个模块

文章目录 1.初识 Node.js1.1 什么是 Node.js1.2 Node.js 中的 JavaScript 运行环境1.3 Node.js 可以做什么1.4 Node.js 环境的安装1.4.1 区分 LTS 版本和 Current 版本的不同1.4.2 查看已安装的 Node.js 的版本号1.4.3 什么是终端1.4.4 终端中的快捷键 1.5 在 Node.js 环境中执…

Python 图形界面框架TkInter(第八篇:理解pack布局)

前言 tkinter图形用户界面框架提供了3种布局方式,分别是 1、pack 2、grid 3、place 介绍下pack布局方式,这是我们最常用的布局方式,理解了pack布局,绝大多数需求都能满足。 第一次使用pack() import …

文献综述|NLP领域后门攻击、检测与防御

前言:在信息安全中后门攻击(Backdoor Attack)是指绕过安全控制而获取对程序或系统访问权的方法。而随着深度学习以及各种神经网络模型的广泛应用,神经网络中存在的后门问题也引起了研究人员的广泛关注。神经网络后门攻击就是使网络…

使用插件实现pdf,word预览功能

效果 代码&#xff1a; 插件地址&#xff1a; https://github.com/501351981/vue-office <a-modalv-model:visible"visible":title"title"ok"handleOk":bodyStyle"bodyStyle":width"1200":maskClosable"false"…

力扣 322. 零钱兑换

题目来源&#xff1a;https://leetcode.cn/problems/coin-change/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a;题目中说每种硬币的数量是无限的&#xff0c;可以看出是典型的完全背包问题。动规五部曲分析如下&#xff1a; 确定dp数组以及下标的含义…

iOS字体像素与磅的对应关系

注意&#xff1a;低于iOS10的系统&#xff0c;显示的字宽和字高比高于iOS10的系统小。 这就是iOS10系统发布时&#xff0c;很多app显示的内容后面出现…&#xff0c;因而出现很多app为了适配iOS10系统而重新发布新版本。 用PS设计的iOS效果图中&#xff0c;字体是以像素&#x…

分类预测 | MATLAB实现GAPSO-BP遗传算法组合粒子群算法优化BP神经网络多输入分类预测

分类预测 | MATLAB实现GAPSO-BP遗传算法组合粒子群算法优化BP神经网络多输入分类预测 目录 分类预测 | MATLAB实现GAPSO-BP遗传算法组合粒子群算法优化BP神经网络多输入分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.分类预测 | MATLAB实现GAPSO-BP遗…

R语言实现计算净重新分类指数(NRI)和综合判别改善指数(IDI)

两个模型比较&#xff0c;与第一个模型相比&#xff0c;NRI&#xff08;重新分对的 - 重新分错的&#xff09;/总人数。IDI&#xff08;新模型患者平均预测概率-旧模型患者平均预测概率&#xff09;-&#xff08;新模型非患者平均预测概率-旧模型非患者平均预测概率&#xff09…

SpringBoot 将项目打包成 jar 包

SpringBoot 将项目打包成 jar 包 一、项目打包成 jar 包 首先在 pom.xml 文件中导入 Springboot 的 maven 依赖 <!-- 将应用打包成一个可以执行的 jar 包 --> <build><plugins><plugin><groupId>org.springframework.boot</groupId><…

Amazon CloudFront 部署小指南(五)- 使用 Amazon 边缘技术优化游戏内资源更新发布...

内容简介 游戏内资源包括玩家的装备/弹药/材料等素材&#xff0c;对游戏内资源的发布和更新是游戏运营商的一个常规业务流程&#xff0c;使用频率会十分高&#xff0c;所以游戏运营商希望该流程可以做到简化和可控。针对这个需求&#xff0c;我们设计了 3 个架构&#xff0c;面…

打造专属企业展示小程序

在当今的数字化时代&#xff0c;企业展示小程序已经成为了推广企业形象和吸引客户的重要工具。而如何打造一个专属的企业展示小程序呢&#xff1f;下面将带您一步步操作&#xff0c;通过乔拓云网来实现这一目标。 首先&#xff0c;您需要注册登录乔拓云网并进入操作后台。在乔拓…

linux cp -rpf指令

cp -rpf #强行递归复制/etc目录到/mist目录中&#xff0c;并保持源目录的权限等信息不变。 有点类似于打patch&#xff0c;不会改变已有的内容。