这篇文章,主要介绍如何在Linux服务器中部署gitlab-runner实现CICD流水线。
目录
一、gitlab-runner
1.1、前提条件
gitlab-runner是gitlab提供的一个执行器,通过**【gitlab + gitlab-runner】**可以实现项目的自动化构建和部署,即:CICD。所以阅读这篇文章之前,请先确保你已经安装好了GitLab代码仓库的服务。
gitlab-runner会访问GitLab代码仓库,拉取代码,然后对代码进行构建、打包、部署等一系列的操作,这些操作是在你的工程中的**【gitlab-ci.yml】**配置文件中指定的。
1.2、下载gitlab-runner安装包
这里我们通过手动下载安装包的方式来部署gitlab-runner,首先去官网下载对应版本的gitlab-runner,官网地址:
官网下载地址:【https://gitlab.cn/docs/runner/install/bleeding-edge.html#download-any-other-tagged-release】
可以选择自己对应系统的版本,我这里选择的是**【gitlab-runner-linux-amd64】**安装包:
下载完成之后,就可以在下载目录里面看到一个**【gitlab-runner-linux-amd64】**文件,如下所示:
1.3、上传服务器
安装包(其实这个是可执行文件)下载完成之后,可以使用文件传输工具将其上传到Linux服务器上面,例如:我是上传到了【/home/gitlab-runner】目录下面,如下所示:
上传成功之后,需要修改一下可执行文件的访问权限,执行下面命令:
bash
# 进入文件上传目录下
cd /home/gitlab-runner
# 修改访问权限
chmod +x ./gitlab-runner-linux-amd64
修改成功之后,此时,可以看到gitlab-runner-linux-amd64文件名称会变颜色。
1.4、获取token
gitlab-runner要想访问到GitLab代码仓库,那么必须获取到访问GitLab的token密钥,这个token可以在GitLab里面获取。首先进入项目仓库中,选择Settings下的CICD选项,如下:
接着在打开的界面中,找到Runners区域,点击Expend按钮,如下所示:
在展示的内容区域里面,找到New project runner按钮,点击右侧的三个小圆点,在弹出框中,复制这个token,记住这个token,后续注册runner的时候要使用到。
1.5、注册runner
拿到token之后,就可以注册runner服务了,执行下面的命令,就可以注册runner服务,注册命令如下所示:
cs
# 首先进入执行文件目录
cd /home/gitlab-runner
# 执行注册命令
# 后端项目(注册maven镜像的runner)
./gitlab-runner-linux-amd64 register \
--non-interactive \
--url "这里写你GitLab的访问地址" \
--registration-token "这里就是要填写前面获取到的token啦" \
--executor "docker" \
--docker-image maven:latest \
--description "runner的描述信息,可以自己写,例如:docker-runner" \
--maintenance-note "维护备注,相当于备注,自己填就可以" \
--tag-list "给runner加个标签,随便填,例如:docker,maven" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
# 执行注册命令
# 前端项目(注册node镜像的runner)
./gitlab-runner-linux-amd64 register \
--non-interactive \
--url "这里写你GitLab的访问地址" \
--registration-token "这里就是要填写前面获取到的token啦" \
--executor "docker" \
--docker-image node:16 \
--description "runner的描述信息,可以自己写,例如:npm-runner" \
--maintenance-note "维护备注,相当于备注,自己填就可以" \
--tag-list "给runner加个标签,随便填,例如:docker,npm" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
上面命令中,中文内容根据自己的实际情况填写,另外,需要注意的是,我这里使用的是docker执行的流水线任务,所以你必须确保你的服务器已经安装了docker环境。
上面命令中,有一个属性要特别注意了,那就是【--docker-image】这个属性,这个属性是指定当前runner采用哪个镜像执行流水线任务的。
- 【maven:latest】:如果你是Maven项目,那么可以使用maven镜像执行流水线任务。
- 【node:16】:如果你是前端node项目,那么可以使用node镜像执行流水线任务。
runner可以注册很多个,后端项目会单独使用一个runner,前端项目会单独使用一个runner,所以前后端项目至少要注册了个runner服务。
1.6、查看配置文件
runner注册成功之后,此时就可以在【/etc/gitlab-runner/conf.toml】配置文件中,查看到runner的注册配置信息,可以查看一下这个配置文件。
cs
# 查看 gitlab-runner 配置文件
cat /etc/gitlab-runner/config.toml
结果如下所示:
注意:默认情况下,conf.toml配置文件中流水线并发执行的数量设置的是【1】个,也就是说,同一时间内,只能处理一个pipeline流水线,其他的流水线就必须等待执行,你就会看到其他流水线处于**【pending】**状态,等待流水调度执行。
cs
This job has not started yet
This job is in pending state and is waiting to be picked by a runner
这个情况下,你可以修改【conf.toml】配置文件中的**【concurrent】**属性值,将其设置成你需要的数值,我是设置成了【10】个,也就是说,可以同时执行10个pipeline流水线任务。
1.7、service启动文件
为了方便管理gitlab-runner服务,我是通过service文件来统一管理gitlab-runner服务,首先在**【/etc/systemd/system】目录下,创建一个【gitlab-runner.service】**文件,然后写入下面的启动命令,如下所示:
cs
[Unit]
Description=GitLab Runner
ConditionFileIsExecutable=/home/gitlab-runner/gitlab-runner-linux-amd64
After=syslog.target network.target
[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/home/gitlab-runner/gitlab-runner-linux-amd64 "run" "--working-directory" "/home/gitlab-runner/work" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--user" "gitlab-runner"
Restart=always
RestartSec=120
EnvironmentFile=-/etc/sysconfig/gitlab-runner
[Install]
WantedBy=multi-user.target
- 注意:--user是指定用户的,我是创建了一个gitlab-runner的用户,如果你没有创建,那么可以先创建一个用户。
1.8、刷新服务
创建或者修改了service服务,必须重新加载service配置信息,执行下面命令:
cs
# 刷新服务
systemctl daemon-reload
1.9、启动服务
刷新服务之后,就可以启动服务了,执行下面命令:
cs
# 启动服务
systemctl restart gitlab-runner.service
执行命令之后,可以在执行下面的命令,查看是否启动成功:
cs
# 查看服务启动状态
systemctl status gitlab-runner.service -l
1.10、启用runner服务
runner注册并且启动成功之后,进入GitLab项目仓库里面,找到CICD下的Runners区域,此时,就会出现我们刚刚注册成功的runner服务,然后可以给当前项目启用这个runner即可。
接着,就可以正常支持pipeline流水线任务了,如下图所示:
到此,Linux服务器中部署gitlab-runner实现CICD流水线就完成啦。
综上,这篇文章结束了,主要介绍如何在Linux服务器中部署gitlab-runner实现CICD流水线。