持续集成的工作原理是将小的代码块推送到Git仓库中托管的应用程序代码库中,并且每次推送时,都要运行一系列脚本来构建、测试和验证代码更改,然后再将其合并到主分支中。

持续交付和部署相当于更进一步的CI,可以在每次推送到仓库默认分支的同时将应用程序部署到生产环境。

这些方法使得可以在开发周期的早期发现bugs和errors,从而确保部署到生产环境的所有代码都符合为应用程序建立的代码标准。

本文主要介绍如何使用Ubuntu服务器来部署属于自己团队的专属GitLab平台以及使用GitLab CI/CD流水线实现自动打包并部署

为了照顾对linux不熟悉的用户,本文主要使用宝塔面板来进行操作,尽量避免使用命令行等,争取全部可视化,下面介绍主要流程

前期准备

  • 一台Ubuntu服务器(最基本的)

  • 安装宝塔面板,有一键安装脚本 wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh 12f2c1d72

  • 安装docker(目前国内可能访问不了,只能自己想办法解决,这里不提供方案,也可以在宝塔内安装)

安装GitLab

安装完宝塔后进入主页,提示的推荐安装先不装,直接关掉,然后进入面板设置改一下面板入口,用户名密码等(默认的没法记)

然后点左边的docker,点这个页面的软件商店,直接搜索gitlab,然后下载

image-20241103185938324

下载后会让填一些基础信息,ip那填写服务器ip即可,然后点击配置

image-20241103190117388

到这之后它会开始拉取镜像,静静等待下载完成

等下载完之后会开始运行和部署,因为还要做一些配置工作,所以可以先在容器管理处停止掉,然后点击管理

image-20241103190349304

在管理界面,点击更多设置,首先把端口映射更改掉

image-20241103190626999

然后在最下面的环境变量处添加一行代码GITLAB_OMNIBUS_CONFIG=external_url 'http://你的ip:16380'

image-20241103190547433

这里解释下为什么要这样做,由于我们会把gitlab部署在docker里,如果不指定他的external_url的话,复制git clone地址的时候域名会是docker id,用git命令根本就没法克隆,虽然我们也可以自己修改成ip,但对于需要登陆之类的场景就会很尴尬,所以直接制定好url,这样在系统里直接点击克隆项目就是自己服务器地址了,如果有域名的还可以用Nginx配置域名,这里我就不搞了,直接ip访问也无所谓

到这之后点击保存,然后重新运行即可启动(启动非常慢,大约需要十分钟)

等待的时候可以到软件商店界面,把这个应用添加到主页,顺便记录下密码

image-20241103191214470

image-20241103191240576

等待一段时间之后直接输入上图中的访问地址进入,然后使用root和密码进行登录即可进入

image-20241104214151778

部署GitLab Runner

首先编写docker-compose文件,也不用命令行,用宝塔面板的docker->模板编排->添加,输入以下代码

1
2
3
4
5
6
7
8
9
version: '3.8'
services:
gitlab-runner:
image: gitlab/gitlab-runner:latest
container_name: gitlab-runner
restart: always
volumes:
- ./config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock # 这一行是固定写法 不要随便改

然后再从容器编排页面点击添加容器编排,选择刚才创建的模板,命名为gitlab-runner

然后需要在gitlab上进行注册

点击左下角的管理员

image-20241104214254422

然后按照以下顺序获得注册信息

image-20241104214352530

然后再点显示安装注册说明,获取url,如下图所示

在这里插入图片描述

然后打开宝塔的docker管理界面,在列表中选择刚创建的gitlab-runner镜像,右侧有个终端按钮,点击进入(选bash就行),然后输入以下命令

1
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
23
24
25
26
27
28
29
30
31
32
# 01 首先,会要求填写url
> Enter the GitLab instance URL (for example, https://gitlab.com/):
# 填刚才拿到的url

# 02 然后,要求填写令牌
> Enter the registration token:
# 填刚才拿到的token

# 03 填写描述
> Enter a description for the runner:
# 随便写,之后可以到设置页面更改

# 04 填写标签 ,分隔
> Enter tags for the runner (comma-separated):
default_runner # 这个要填一个标签名,之后可以修改

# 05 填写可选说明
> Enter optional maintenance note for the runner:
# 随便写或不写 之后可改

# 06 选择执行器 如果不会选 就选docker
> Enter an executor: custom, docker, shell, ssh, virtualbox, docker-autoscaler, docker+machine, instance, docker-windows, parallels, kubernetes:
docker # 输入docker并回车

# 07 选择默认镜像(docker选项会有这一步,默认镜像仅当.gitlab-ci.yml没有指定时才生效)
> Enter the default Docker image (for example, ruby:2.7):
docker::27.3.1
# 根据自己的docker版本来写

# 提示创建成功!
> Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

注册好之后,还需要更改一个很重要的配置文件才能够使用,这里需要知道容器的配置被映射到了系统的哪个目录,使用宝塔的话需要点击docker->管理->数据存储卷,然后查看etc/gitlab-runner对应的地址,我的机器地址是

1
/www/server/panel/data/compose/c426ceb28b964172b6fff1f95ed27bbe/config

然后在宝塔面板的文件管理中进入这里面,双击编辑config.toml文件

然后把对应行更改为下文所示(默认应该只有个/cache)

1
volumes = ["/var/run/docker.sock:/var/run/docker.sock","/cache","/root/.m2:/root/.m2"]

这里解释下为什么要这样做,gitlab-runner持续部署使用的也是docker的方式,他会把仓库打包好的内容拉一个docker来运行,所以需要调用本机的docker来进行,docker提供了被操控的功能,借助的就是docker.sock这个文件,这里就是把这个文件的地址映射到gitlab-runner这个容器里面,让这个容器能够操作docker本身,理解起来可能比较困难, 但只要记住需要就行了,然后后面的.m2文件是为了后面部署springboot项目准备的maven仓库缓存位置,不然每次重新部署都要重新下载依赖,会非常缓慢

然后再从最下面添加一行

1
pull_policy = "if-not-present"

这行的意义是不用每次部署都重新拉一个新docker,有能用的就用旧的,反正也是为了部署更快

最后的效果应该是这样

image-20241104220436714

然后回到gitlab的管理界面,这时应该就有一个能用的runner显示着了,这是再点击对应runner的修改,该一项设置

image-20241104220555078

image-20241104220609372

这下runner就大功告成了

如何使用部署好的流水线自动集成部署一个SpringBoot项目

查看本博客的下一篇文章