gitlab-ci docker maven 自动化流水线部署 springboot多模块项目

一、准备

首先 需要两台服务器(这里为了下面方便理解,我们约定这两台服务器地址、名称和系统)
1、gitlab 服务器 服务器A(地址10.10.10.7)(内存大于4g不然会一直死)( CentOS Linux 7 (Core))
2、springboot服务部署服务器 服务器B(地址10.10.10.8)( CentOS Linux 7 (Core))

二、配置gitlab服务器

这个比较简单,或者可以直接用官方的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、并注册

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

四、编写.gitlab-ci.yml、docker文件

1、.gitlab-ci.yml文件的编写
.gitlab-ci.yml是在git的root目录下面的一个脚本文件,用来执行自动化部署的
gitlab-ci docker maven 自动化流水线部署 springboot多模块项目_第1张图片
这里放个例子

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 创建如下文件
gitlab-ci docker maven 自动化流水线部署 springboot多模块项目_第2张图片
2、docker文件的编写
我用来测试的这个项目使用了springboot 多模块的方式编写的
我的dockerfile 写在了子模块的根目录下
gitlab-ci docker maven 自动化流水线部署 springboot多模块项目_第3张图片
然后我的dockerfile内容为

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/official.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

五、测试使用

然后基本上就是提交代码到dev 合并到main分支上,触发流水线
gitlab-ci docker maven 自动化流水线部署 springboot多模块项目_第4张图片
显示上面的样式就是完成了

你可能感兴趣的:(笔记,gitlab,ci,docker,springboot)