pom.xml
在 build 下插件配置中,加入打包成镜像的依赖 dockerfile-maven-plugin
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.3.6</version>
<executions>
<execution>
<id>default</id>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>com.zhou/${project.artifactId}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
Dockerfile
在 项目根目录下创建 Dockerfile,如果运行需要调优,可以在 ENTRYPOINT 中直接加入参数
FROM openjdk:8-jdk-alpine
ARG JAR_FILE
ADD target/${JAR_FILE} /app.jar
ENTRYPOINT ["java", "-jar","/app.jar"]
# 运行带有参数的 jar 写法:ENTRYPOINT ["java","-Xms1200m","-Xmx1200m","-jar","/app.jar"]
config.toml
config.toml 是 runner 容器内部的配置文件,找到你设定的那个 runner ,将挂载文件根据你的需求与本地宿主机映射,如我的,重点要关注 volumes 那个 , 改为配置记得重启 gitlab-runner restart
concurrent = 10
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "package"
url = "http://192.168.22.5/"
token = "QLkN24326ze85Q_eJWdT"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.cache.azure]
[runners.docker]
tls_verify = false
image = "tico/docker"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock","/usr/bin/docker:/usr/bin/docker","/root/.ssh:/root/.ssh","/root/.docker/:/root/.docker/","/script:/script","/root/.m2/repository:/root/.m2/repository","/etc/maven/settings.xml:/etc/maven/settings.xml","/etc/docker/daemon.json:/etc/docker/daemon.json"]
shm_size = 0
.gitlab-ci.yml
stages:
- package
docker-build:
stage: package
image: centos:centos8
tags:
# 执行Job的服务器
- package
only:
# 只有在master分支才会执行
- master
script:
# 组名、项目名、项目版本号、项目内部指定的端口、需要映射的端口、私服账户、私服密码
- sh /script/dockerBuild.sh ci demo 1.0-SNAPSHOT 8080 9999 admin root
# cache:
# paths:
# - /root/.m2/repository/
脚本编写
yml 文件定义 Centos 8 镜像,可以在容器中 yum 方式安装所需的环境,如 JDK、Maven、Git
整体思路
- 准备一个 GitLab
- 准备一个项目,项目要分组
- 项目的 pom 文件要加入 打包到
- 运行 runner ,runner 要挂载本地的 /var/run/docker.sock 这样就可以执行宿主机的 docker 了,runner 中注册 运行环境选择 docker
- 编辑 runner 的 挂载目录
- yml 中指定镜像系统,安装所需依赖环境
- 编写测试脚本,脚本中可以mvn clean package ,将镜像打包到私有仓库,在删除本地的镜像标签,也可以运行镜像