首先 需要两台服务器(这里为了下面方便理解,我们约定这两台服务器地址、名称和系统)
1、gitlab 服务器 服务器A(地址10.10.10.7)(内存大于4g不然会一直死)( CentOS Linux 7 (Core))
2、springboot服务部署服务器 服务器B(地址10.10.10.8)( CentOS Linux 7 (Core))
这个比较简单,或者可以直接用官方的gitlab应该都是可以的
参考 https://www.jianshu.com/p/7e6ea273833d
添加yum源
cat> /etc/yum.repos.d/gitlab-ce.repo<< EOF
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/
gpgcheck=0
enabled=1
EOF
安装依赖包
yum install curl policycoreutils-python openssh-server
安装
yum makecache #清楚缓存
yum install gitlab-ce
更改访问地址
vim /etc/gitlab/gitlab.rb
external_url 'http://10.10.10.7:9001'
重新加载配置,启动gitlab-ce
[root@gitlab ~]# gitlab-ctl reconfigure
[root@gitlab ~]# gitlab-ctl start
之后就可以直接打开上面的url http://10.10.10.7:9001 开始访问了,然后就是修改密码,创建项目等等了,在此不赘述了(开的哪个端口别忘记打开防火墙)
gitlab-runner是安装在你的应用服务器上帮你完成自动化部署的一个工具
我是基于docker安装的所以首先服务器上要有docker,这里就不写了,因为有脚本了很简单 参考 https://cloud.tencent.com/developer/article/2061665
用docker的话可以用一个非常好用的图形化管理工具Portainer,是docker官方的,安装非常简单 两步走
(参考 https://blog.csdn.net/asenseof/article/details/107895383)
docker pull portainer/portainer
docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /mnt/docker/portainer:/data portainer/portainer
然后访问服务器地址+上面映射的端口号了http://10.10.10.8:9000,就可以了
开始安装runner
也是非常简单
1、拉取镜像,启动容器
sudo docker pull gitlab/gitlab-runner
sudo docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
2、进入容器
sudo docker exec -it gitlab-runner bash
3、注册runner
首先输入下面的命令开始注册
gitlab-runner register
输入Gitlab实例的地址
地址是你手动设置Runner区域里面的URL
> Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
http://xxx
输入token
token是你手动设置Runner区域里面的令牌
> Please enter the gitlab-ci token for this runner
xxx
输入Runner的描述
> Please enter the gitlab-ci description for this runner
[hostname] my-runner
输入与Runner关联的标签
标签是为了让后期在CI脚本中指定选择某个或者多个Runner
> Please enter the gitlab-ci tags for this runner (comma separated):
test
输入Runner的执行器
由于我们都是基于Docker,所以这里选择执行器为Docker
> Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker
设置执行器的版本
> Please enter the Docker image (eg. ruby:2.1):
alpine:latest
退出容器
exit
通过以上命令后,就创建成功runner啦,这时候我们去GitLab中我们创建Runner的区域刷新就能看到了
3、修改Runner配置文件
vim /srv/gitlab-runner/config/config.toml
找到volumes配置,修改结果为如下,分别是挂载了宿主机docker的sock文件和Maven的缓存,减少拉取Jar包的时间消耗,其中
"/home/gitlab-runner/.m2:/root/.m2"这块为Maven的Jar包存放地址,左边为宿主机目录,右边为容器内的Jar包存储路径,这个需要根据自己使用的Maven镜像而定,在volumes配置下方增加一行配置,防止Runner重复拉取镜像
pull_policy = "if-not-present"
volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock", "/home/gitlab-runner/.m2:/root/.m2"]
这个目录后面写ci文件的时候我们会讲到
最后重启Runner
docker restart gitlab-runner
1、.gitlab-ci.yml文件的编写
.gitlab-ci.yml是在git的root目录下面的一个脚本文件,用来执行自动化部署的
这里放个例子
image: docker:stable
variables:
TAG: root/app:v0.1
MAVEN_OPTS: "-Dmaven.repo.local=/root/.m2/repository"
cache:
key: dockerlayer-ci-cache
paths:
- .m2/repository
- /dafeng-official/target/*.jar
stages:
- package
- deploy
maven-package:
image: maven:3.5-jdk-8-alpine
stage: package
tags:
- build_docker
script:
- mvn clean package -Dmaven.test.skip=true $MAVEN_OPTS --settings=/root/.m2/settings.xml
cache:
key: dockerlayer-ci-cache
paths:
- dafeng-official/target/official.jar
only:
- main
build-master:
stage: deploy
tags:
- deploy_docker
cache:
key: dockerlayer-ci-cache
paths:
- .m2/repository/
- dafeng-official/target/*.jar
script:
- cd dafeng-official
- docker build -t $TAG .
- docker rm -f ohmy || true
- docker run -d --name ohmy -p 2200:2200 $TAG
only:
- main
这里注意我是用了自己的maven仓库和配置文件,这里要自己配置一下在自己的宿主机上面新建文件夹home->gitlab-runner->.m2 创建如下文件
2、docker文件的编写
我用来测试的这个项目使用了springboot 多模块的方式编写的
我的dockerfile 写在了子模块的根目录下
然后我的dockerfile内容为
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/official.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]