本次配置全部都是基于docker的环境进行。
其中使用了gitlab
、gitlib-ci
、docker
、spring boot
、maven
等技术。
请首先安装docker
。
背景
使用spring boot 开发 短信发送程序,并自建gitlab作为代码版本管理,使用gitlab-ci作为持续CI/CD工具。
所有工具运行在docker之上。
下面提到的
git.sdibt.com是我配置的gitlab域名,请自行替换。
sms 是maven project name,请自行替换。
一、Gitlab 配置
docker stop gitlab && docker rm gitlab
docker run --detach \ --hostname git.sdibt.com \ --publish 443:443 \ --publish 80:80 \ --publish 22:22 \ --name gitlab \ --restart always \ --env 'GITLAB_TIMEZONE=Beijing' \ --volume "$PWD"/srv/gitlab/config:/etc/gitlab \ --volume "$PWD"/srv/gitlab/logs:/var/log/gitlab \ --volume "$PWD"/srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce
其中GITLAB_TIMEZONE=Beijing 使用了 ruby on rails 的时区设置。通过--volume 将配置放在容器外,便于以后升级。
二、GitlabRunner配置
从project中获取注册Runner的token
注册runner所需url、token获取页面截图
请用上图所示的url、token 替换下面提到的url、token
1、启动runner
docker run -d --name gitlab-runner-dockersock \ --restart always \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$PWD"/srv/gitlab-runner/config:/etc/gitlab-runner \
gitlab/gitlab-runner:alpine
将docker.sock挂载到Runner中,将配置文件保存在"$PWD"/srv/gitlab-runner/config
2、注册runner
docker exec -it gitlab-runner-dockersock gitlab-runner register -n \ --url http://gitlab.8dat.com/ci \ --registration-token bfab7e07b5e57c1e0ac2dc37ff4475 \ --tag-list=dockersock,docker \ --description "dockersock" \ --docker-privileged=true \ --docker-pull-policy="if-not-present" \ --docker-image "docker:latest" \ --docker-volumes /var/run/docker.sock:/var/run/docker.sock \ --docker-volumes /root/m2:/root/.m2 \ --executor docker
给runner设置了tag后,可以在.gitlab-ci.yml中指定job运行的runner。tag一般是用来区分不同类型的runner,或标志特定配置的runner。
生成的配置文件 cat /etc/gitlab-runner/config.toml
,如下所示:
[[runners]]
name = "dockersock"
url = "http://git.sdibt.com/ci"
token = "bfab7e07b5e57c1e0ac2dc37ff4475"
executor = "docker"
[runners.docker]
tls_verify = false
image = "docker:latest"
privileged = true
disable_cache = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache","/root/m2:/root/.m2"]
pull_policy = "if-not-present"
[runners.cache]
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache","/root/m2:/root/.m2"]
中增加了/root/m2:/root/.m2
,避免maven每次都下载jar包,提高效率。
pull_policy = "if-not-present"
避免docker 镜像每次都pull
3、可以运行docker的maven镜像
dockerhub
上的maven镜像并不能执行docker命令,导致我们无法使用docker build 等命令。所以我们自己制作一个docker_maven镜像。
FROM maven:alpine
RUN apk add --no-cache \
ca-certificates \
curl \
openssl
ENV DOCKER_BUCKET get.docker.com
ENV DOCKER_VERSION 1.12.5
ENV DOCKER_SHA256 0058867ac46a1eba283e2441b1bb5455df846144f9d9ba079e97655399d4a2c6
RUN set -x \
&& curl -fSL "https://${DOCKER_BUCKET}/builds/Linux/x86_64/docker-${DOCKER_VERSION}.tgz" -o docker.tgz \
&& echo "${DOCKER_SHA256} *docker.tgz" | sha256sum -c - \
&& tar -xzvf docker.tgz \
&& mv docker/* /usr/local/bin/ \
&& rmdir docker \
&& rm docker.tgz \
&& docker -v
docker build -t docker-maven:alpine .
得到镜像文件。
三、项目配置
pom.xml配置
smsorg.springframework.bootspring-boot-maven-plugincom.spotifydocker-maven-plugin0.4.12${project.build.finalName}openjdk:alpine["java", "-jar", "/${project.build.finalName}.jar"]/${project.build.directory}${project.build.finalName}.jar
.gitlab-ci.yml配置
image: docker-maven:alpineservices:
- redis:3-alpine#Maven 阿里云镜像before_script:
- rm -rf /root/.m2/settings.xml - echo -e "<?xml version=\""1.0\"" encoding=\""UTF-8\""?>alimavenaliyun mavenhttp://maven.aliyun.com/nexus/content/groups/public/central" > /root/.m2/settings.xml# 定义 stagesstages:
- test - build# 定义 jobstest app:
stage: test
script:
- echo "I am test job"
- mvn test# 定义 jobbuild app:
stage: build
tags:
- dockersock
script:
- mvn -Dmaven.test.skip=true clean package docker:build
查看镜像
docker images | grep sms
镜像已经躺好了。
作者:大罗马的太阳
链接:https://www.jianshu.com/p/c1effc3179be