序言

在SpringBoot项目部署的时候,我了解到了Jib插件的强大,这个插件可以快速构建镜像发布到我们的镜像仓库当中去。于是我打算在毕设当中加上这个功能,并且整合到github actions中去。

阻碍

在单体地狱的项目中,我们使用jib插件十分的方便,只需要在项目文件夹下运行命令:mvn complie jib:build就可以完成镜像的构建并且推送到仓库。详情见:jib-maven-plugin构建镜像
可是这种方法在SpringCloud这种多模块化项目当中肯定是无法实现的。假设当前maven工程是父子结构的,有两个子工程A和B,其中A是二方库,提供一个jar包,里面是接口类和Bean类,B是springboot应用,并且B的源码中用到了A提供的接口和Bean;上述父子结构的maven工程是常见的工程结构,此时如果要将B构建成Docker镜像,在B的目录下执行mvn compile jib:build显然是不行的,因为没有编译构建A,会导致B的编译失败;

解决办法

此时最好的做法就是将jibmvn构建的生命周期绑定,修改B的pom.xml文件,加入executions节点;
父工程目录下执行mvn package,此时maven会先编译构建整个工程,然后再将B工程的构建结果制作成镜像;

实例

一、目录结构

image.png
这是我的SpringCloud项目的目录结构,我们需要修改的内容为需要发布到仓库的服务的pom文件,例如:
image.png

二、通过<executions>节点绑定生命周期

    <plugin>
        <groupId>com.google.cloud.tools</groupId>
        <artifactId>jib-maven-plugin</artifactId>
        <version>1.8.0</version>
    <!-- executions   start-->
        <executions>
            <execution>
                <id>build-image</id>
                <phase>package</phase>
                <goals>
                    <goal>build</goal>
                </goals>
            </execution>
        </executions>
    <!-- executions   end-->
        <configuration>
            <from>
                <image>registry.cn-hangzhou.aliyuncs.com/yhhu/jdk8</image>
            </from>
            <to>
                <image>registry.cn-hangzhou.aliyuncs.com/2shop/user_provider</image>
            </to>
            <container>
                <useCurrentTimestamp>true</useCurrentTimestamp>
                <args>
                    <arg>--spring.profiles.active=prod</arg>
                </args>
            </container>
            <allowInsecureRegistries>true</allowInsecureRegistries>
        </configuration>
    </plugin>

三、与github actions整合,实现push后自动构建镜像

github action文件如下:

name: Cloud CI
on:
  push:
    branches:
      - master
  pull_request:
jobs:
  push_docker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Set up JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8
          server-id: registry.cn-hangzhou.aliyuncs.com
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - name: Build
        run: mvn package -q -B -V
        env:
          MAVEN_USERNAME: ${{secrets.DOCKER_USERNAME}}
          MAVEN_PASSWORD: ${{secrets.DOCKER_PASSWORD}}

完全整合demo

yhuihu/shop_api

版权声明:本文为yhhu原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/yhhu/p/12167261.html