pom.xml

在 build 下插件配置中,加入打包成镜像的依赖 dockerfile-maven-plugin

  1. <plugin>
  2. <groupId>com.spotify</groupId>
  3. <artifactId>dockerfile-maven-plugin</artifactId>
  4. <version>1.3.6</version>
  5. <executions>
  6. <execution>
  7. <id>default</id>
  8. <goals>
  9. <goal>build</goal>
  10. </goals>
  11. </execution>
  12. </executions>
  13. <configuration>
  14. <repository>com.zhou/${project.artifactId}</repository>
  15. <tag>${project.version}</tag>
  16. <buildArgs>
  17. <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
  18. </buildArgs>
  19. </configuration>
  20. </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

整体思路

  1. 准备一个 GitLab
  2. 准备一个项目,项目要分组
  3. 项目的 pom 文件要加入 打包到
  4. 运行 runner ,runner 要挂载本地的 /var/run/docker.sock 这样就可以执行宿主机的 docker 了,runner 中注册 运行环境选择 docker
  5. 编辑 runner 的 挂载目录
  6. yml 中指定镜像系统,安装所需依赖环境
  7. 编写测试脚本,脚本中可以mvn clean package ,将镜像打包到私有仓库,在删除本地的镜像标签,也可以运行镜像