整体步骤概括
准备两台虚拟机, 最小安装, 配置 ip 能 ping 通外网即可, 安装 docker
一台虚拟机跑 GitLab, 一台跑 GitLab runner 和 springboot 项目
将 springboot 项目打成 systemctl 系统服务
编写 GitLab.ci 自动构建你的 springboot 项目
自动构建的基本思路是当 dev 分支合并到 master 分支时, 触发构建, 自动发布, 下面是详细步骤
1. 通过 docker,docker-compose 搭建 GitLab
使用的是一个开源库
https://GitHub.com/sameersbn/docker-GitLab
这一步基本参考这个库就能搭建成功了
确定你安装好了 docker 和 docker-compose
下载官方 docker-compose 文件
wget https://raw.githubusercontent.com/sameersbn/docker-GitLab/master/docker-compose.YAML
修改两个地方
gitlab_port 就是你访问的端口地址, gitlab_host 则是你配置的虚拟机 ip 这时你的目录结构应该是这样的
cd 至 GitLab 目录下执行命令 docker-compose up 等待 docker 镜像安装完成 完成后等待几分钟 GitLab 初始化, 访问 http://yourdomain:10080, 重置密码
这里我已经建好项目了, 到此 第一步搭建 GitLab 服务已经完成接下来是第二步
2. 注册 GitLab-runner 完成项目自动构建
新建 dev 分支
checkout 你的 dev 分支, 开发只对 dev 分支操作, master 分支则用于 ci 构建
编写 GitLab-ci.YAML
- pages:
- stage: deploy
- script:
- - cd /GitLab-project/demo
- - Git pull
- - mvn package
- - systemctl restart demo
- only:
- - master
可以看到 ci 只针对 master 分支, 即 dev 分支 merge 至 master 分支时 触发构建
搭建 runner 服务器 前面说到需要准备两台服务器, 一台搭建 GitLab, 一台搭建 runner GitLab-runner 比较简单, 查一查如何安装即可, 安装完毕输入
- GitLab-ci-multi-runner register
- Please enter the GitLab-ci coordinator URL (e.g. https://GitLab.com/):
- # 这里输入你的 GitLab 域名
- # executor 输入 shell
域名和 token 在 Specific Runners 这里
注册完毕后
可以看到这里有显示, 你应该只有一个 接下来是将 springboot 项目做成系统服务 systemctl 这部分内容自己百度, 贴一下自己的 demo.service
- Description = demo[Service] WorkingDirectory = /GitLab-project/demo PrivateTmp = true Type = simple ExecStart = /usr/java / jdk1.8.0_181 - amd64 / bin / java - jar / GitLab - project / demo / target / demo - 0.0.1 - SNAPSHOT.jar - java.io.tmpdir = /GitLab-project/tmp--spring.config.location = /GitLab-project/demo / target / classes / application.YAML ExecStop = kill - 9`ps - ef | grep java | grep - v grep | grep demo | awk '{print $2}'` [Install] WantedBy = multi - user.target
GitLab-project/demo 是这个 demo 项目的路径, 在进行 ci 前 你应该 Git clone 项目至对应路径
3. 最后一步啦
现在项目的某个接口返回数据是这样的
我们修改一下
提交至 dev 分支
可以看到刚刚我们提交的请求已经出现在项目主页了, 我们合并他
选择对应的 job 查看, 已经在跑了
curl 一下
小伙伴们还不赶紧试试?
来源: https://juejin.im/post/5ba1c6d65188255c8b6ee5bc