gitlab CI/CD 学习部署


最近部门的开发环境由SVN迁移到了GIT,平台是gitlab,gitlab的功能挺强大的,之前对其自动化略有所耳闻,因此就打算配置一下


gitlab CI/CD 学习部署

CI/CD 能实现什么? 自动化流程简析

CI:Continuous Integration

CD:Continuous Deployment

每当有人推送到gitlab的远程仓库时,gitlab会进行检测,当符合设定的条件时,就会触发流水线,gitlab就会自动触发配置好的任务流,比如博客的部署托管部署,本地写好对应的文档,推送到仓库中,runner就可以自动执行打包脚本,打完包之后部署到对应的服务器上,这样只要你写完blog的文字内容,推送到远端,过一会就可以看到博客页面有最新的文章出现。

目前从最基础的应用开始
将其结合到我目前工作项目中,就是能够自动的在我们开发环境ORACLE库中打一遍这次提交的sql脚本,检查其中是否有错误。如有错误,就抛出问题,前端就会显示流水线失败,从而达到提醒的目的,减少开发缺陷。

安装、注册runner

要想实现上面所说的功能,首先服务器上要安装gitlab-runner,gitlab官方给出了对应的安装文档,里面可以选择通过apt/yum在线安装。或者是通过下载符合机器架构的二进制包离线安装,文档中的安装内容很详细,这边就不再具体说明。

安装完之后执行service gitlab-runner status应该能够看到对应的服务

下面提注册runner的过程,注册runner官方也有文档,这边列图说明下

注册gitlab runner需要用到仓库的CI/CD token,token可以在 设置——CI/CD——Runner 找到(该页面只有仓库管理员才能看到)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@server-1 gitlab-runner]# gitlab-runner register  #若无权限可以用sudo 提权
Runtime platform arch=amd64 os=linux pid=30492 revision=674e0e29 version=16.2.1
Running in system-mode.

Enter the GitLab instance URL (for example, https://gitlab.com/):
{这里填上图中的URL,必填}
Enter the registration token:
{这里填上图中的令牌,必填}
Enter a description for the runner:
[server-1]:{填写描述,非必填}
Enter tags for the runner (comma-separated):
{填写标签,非必填}
Enter optional maintenance note for the runner:
{填写其他维护信息,非必填}

上面的内容填写完毕之后,就可以在刚才的页面中看到对应的runner出现在了gitlab CI/CD 管理页面中

tag设置

正常情况下,每个job 都需要配置tags,但我们这边配置不需要,因此设置了允许执行没有打tag的任务(勾选如下框即可)

.gitlab-ci.yml 配置

gitlab检测仓库中的该文件,若没有该文件,则不会触发流水线

一个比较简单的配置如下

1
2
3
4
5
6
7
8
9
10
11
stages:  # 阶段,一个任务可分不同的stage
- stage1
dev_job: # 任务,可以任务中指定在哪个阶段或者哪些阶段执行
stage: stage1 # 指定stage1阶段执行
script: # 执行的脚本
- echo "检测变更..."
- git diff --name-status ${CI_COMMIT_SHA} ${CI_COMMIT_BEFORE_SHA}
- echo "执行脚本..."
- python3 test.py
only: # 配置只有在什么时候触发
- dev # 只有在dev分支推送的时候才触发

较为完整的配置可以查阅官方文档

runner会将仓库pull到所在服务器,然后执行script中的脚本, 初始目录位置为仓库的根目录。

这样下来基本上就能实现,git仓库检测到推送事件,然后触发对应的任务流了。

参考资料

gitlab官方文档