1、安装Gitlab、Gitlab-Runner
新建docker-compose.yml文件
version: '3'
services:
gitlab:
image: gitlab/gitlab-ce:latest
restart: always
container_name: "gitlab"
ports:
- "80:80"
- "2222:22"
- "2443:443"
volumes:
- /srv/gitlab/config:/etc/gitlab
- /srv/gitlab/logs:/var/log/gitlab
- /src/gitlab/data:/var/opt/gitlab
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.0.0.171'
gitlab_rails["time_zone"] = "Asia/Shanghai"
gitlab_rails["gitlab_ssh_host"] = "http://192.0.0.171"
gitlab_rails["gitlab_shell_ssh_port"] = 2222
nginx["listen_port"] = 80
gitlab-runner:
container_name: gitlab-runner
image: gitlab/gitlab-runner:latest #7
restart: always
extra_hosts:
- "somehost:192.0.0.171"
volumes:
- /srv/gitlab-runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
- /data/.m2/:/.m2/
environment:
pull_policy: if-not-present
docker-compose.yml目录下使用docker-compose启动
docker-compose up -d
启动成功后,根据自己的ip+端口即可访问自己的gitlab,自己注册登录即可。
2、配置Gitlab-Runner
2.1、进入Gitlab-Runner容器内
docker exec -it gitlab-runner bash
2.2、注册runner
gitlab-runner register
2.3、输入Gitlab实例的地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.0.0.171/
2.4、输入token
token查看位置
Please enter the gitlab-ci token for this runner:
3eJL3283UYjJGp9WxvZG
2.5、输入Runner的描述
Please enter the gitlab-ci description for this runner:
[5ab09191e6bf]: my-runner
2.6、输入与Runner关联的标签
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag
Registering runner... succeeded runner=3eJL3283
2.7、输入Ruuner的执行者
Please enter the executor: docker, docker-ssh, parallels, ssh, virtualbox, custom, docker+machine, docker-ssh+machine, kubernetes, shell:
docker
2.8、指定docker版本
Please enter the default Docker image (e.g. ruby:2.6):
alpine:latest
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
2.9、修改runner配置
vim /srv/gitlab-runner/config/config.toml
添加下面的内容,重启runner
# 分别是挂载了宿主机的docker和配置Maven的缓存,提高效率
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock", "/usr/share/maven/ref/:/.m2/"]
# 防止Runner重复拉取镜像
pull_policy = "if-not-present"
注册成功之后,我们可以看到注册的runner
3、创建SpringBoot项目测试CICD
直接新建一个springboot项目,写个简单的测试方法即可。
3.1、项目根目录创建个Dockerfile
FROM openjdk:8-jdk
COPY target/*.jar test.jar
ENV PORT 5000
EXPOSE $PORT
ENTRYPOINT ["java","-Dserver.port=${PORT}","-jar","test.jar"]
3.2、项目根目录创建.gitlab-ci.yml文件
image: docker:latest #1
variables: #2
DOCKER_DRIVER: overlay2
# DOCKER_HOST: tcp://172.17.193.109:2375 # docker host,本地可不写
MAVEN_CLI_OPTS: -s /root/config/settings.xml --batch-mode
TAG: root/test-springboot:v0.1 # 镜像名称
cache: #3
paths:
- .m2/repository
services: #4
- docker:dind
stages: #5
- package
- deploy
- run
maven-package: #6
image: f-maven-v1.0:latest
tags:
- my-tag
stage: package
script:
- mvn clean package -e -Dmaven.test.skip=true
artifacts:
paths:
- target/*.jar
build-master: #7
tags:
- my-tag
stage: deploy
script:
- docker build -t $TAG .
only:
- master
run-master: #8
stage: run
script:
- docker rm -f test || true
- docker run -d --name test -p 5000:5000 $TAG
only:
- master
tags:
- my-tag
这里自己改了个maven镜像,Dockerfile如下
FROM maven:3.6.0-jdk-8-alpine
COPY settings.xml /usr/share/maven/ref
RUN mkdir -p /usr/share/maven/ref/repository
RUN chmod 777 /usr/share/maven/ref/repository
settings.xml:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>/usr/share/maven/ref/repository</localRepository>
<mirrors>
<mirror>
<id>aliyun-nexus</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
<mirror>
<id>CN</id>
<name>OSChina Central</name>
<url>http://maven.oschina.net/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
3.3、项目上传到gitlab
gitlab里面新建项目,按步骤上传即可。
打开流水线就可以看到我们的打包部署流程。
3.4、自动CICD测试
第一次运行可能会比较慢,要拉取镜像和依赖包什么的,静静等待即可。
点击任务节点可以看到日志。
最终看到这个日志说明打包部署成功了。
项目的容器也正常启动了。
项目的测试方法访问也没有问题。
欢迎关注个人公众号