转载自公众号:飞翔的代码
公司里一直使用gitlab来管理代码,刚好gitlab提供了gitlab-ci+runner来执行自动化脚本,结合这两个功能正好可以实现代码提交后自动构建
原理:gitlab-runner注册到gitlab,当向gitlab提交代码时,gitlab通知runner程序,runner程序在本地拉取最新代码,执行.gitlab-ci.yml
文件中定义的脚本
需要先搭建好gitlab,参照前段时间发布的 超快搭建Gitlab
gitlab-runner安装和配置
先准备好以下文件
apache-maven-3.8.6-bin.tar.gz
maven安装包,版本不一定非要一模一样docker-compose
docker-compose可执行文件jdk-8u221-linux-x64.tar.gz
jdk8,版本不一定非要一模一样
创建好目录
1 | cd /usr/local |
将准备好的3个文件放到build目录下
在build目录下创建Dockerfile
,内容如下:
1 | # 这个版本要和gitlab版本兼容,要不然可能会出些BUG,这个gitlab-runner官网上能找到 |
继续在build目录下创建entrypoint.sh
,这是容器启动时的入口脚本,主要是启动docker和gitlab-runner,内容如下:
1 | #!/bin/sh |
继续创建daemon.json
,这是docker的配置文件,主要是设置docker镜像源到国内,提高docker拉取镜像的速度,内容如下:
1 | { |
docker-compose.yml
1 | cd .. |
docker-compose.yml内容如下:
1 | version: '3.1' |
再创建settings.xml
,这是maven的配置文件,可以配置中央仓库,内容如下:
1 | <?xml version="1.0" encoding="UTF-8"?> |
最后再创建一个空的配置文件,如果不创建在启动时容器里会一直报错说配置文件不存在
1 | mkdir config |
至此全部文件已经准备完毕,执行docker-compose up -d
即可自动构建gitlab-runner镜像并启动容器
gitlab-runner配置
进入gitlab后台,找到需要自动构建的仓库,复制仓库的settings
->CI/CD
->Runners
中的地址和token,下面要用到
容器启动成功后,进入gitlab-runner这个容器
1 | docker exec -it gitlab-runner bash |
进入容器后,开始注册runner到gitlab
1 | gitlab-ci-multi-runner register |
执行上面的命令后,会要求填写一些参数,分别如下:
- Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
- 这个上面从gitlab后台复制的地址
- Please enter the gitlab-ci token for this runner:
- 这个填上面从gitlab后台复制的token
- Please enter the gitlab-ci description for this runner:
- 随便填一个描述的说明文字
- Please enter the gitlab-ci tags for this runner (comma separated):
- 填写tag,在之后的.gitlab-ci.yml中任务可以指定不同tag的ci来执行
- Please enter the executor: docker, shell, virtualbox, docker+machine, docker-ssh+machine, kubernetes, docker-ssh, parallels, ssh:
- 这一步一般填shell,有时候也会填docker,填docker表示.gitlab-ci.yml中构建脚本在指定的docker镜像中执行
到这里runner已经注册到gitlab了,接下来就可以编写.gitlab-ci.yml
了
.gitlab-ci.yml
在项目中根目录下创建.gitlab-ci.yml
文件,内容如下:
1 | # 定义构建步骤 |
docker配置
上面.gitlab-ci.yml
中有写到docker/oa-admin/build这样的目录,这是项目的docker镜像和容器配置相关的文件,现在就来创建这些目录和相应的文件
在项目根目录创建docker/oa-admin/build目录
在docker/oa-admin目录下创建docker-compose.yml
1 | version: '3.1' |
在docker/oa-admin/build目录下创建Dockerfile
1 | FROM openjdk:8-jre |
到这算是全部搞好了,提交代码到master分支,在gitlab后台打开项目的仓库,点击CI/CD
->Pipelines
能够看到正在构建的任务,在这里可以看到该任务构建的进度和日志
构建完成后,可以在runner那台服务器上docker ps
查看到一个运行中的项目容器
步骤比较多,动手做一遍,清楚过程后,会发现gitlab-ci可以做更多事
v1.5.2