一.背景
之前期望把开发和部署分开,在上篇文章maven项目容器化运行之3-优雅的利用Jenkins和maven使用docker插件调用远程docker构建服务并在1Panel中运行-CSDN博客已经实现了。主要思路是开发配置了pom文件,但是不管docker镜像打包。提交代码库后,Jenkins定时获取最新的代码,然后利用maven的dockerfile-maven-plugin插件,实现远程调用docker构建镜像。但是我们的项目一般都是父子工程,当我需要构建镜像的工程是子工程时,一直报错“No plugin found for prefix 'dockerfile' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories”。
二.具体修改
1.问题发现
之前的工程都是正确的,肯定插件这些都能下载。可能是Jenkins运行是在父工程目录运行引起的错误。我在本机开始测试,在父工程目录运行“mvn clean install dockerfile:build”确实会报错。于是我手动cd到子工程目录,再运行,就没有报错了。所以,我需要指定指运行我需要构建镜像的子工程。
2.maven只运行某个子工程
mvn clean install dockerfile:build -pl mine-starter
就是在命令最后添加 -pl [子工程名称] 就好了。
3.Jenkins的设置
本来我的主工程是要构建的,目的是把程序要最新的代码构建并deploy到maven局域网私库。所以,我又新建了一个Jenkins的构建任务mine-starter-image,构建命令就是设置的上面那个步骤的命令,没有设置定时构建。然后,我在主工程构建任务里面添加了,构建之后就触发新任务mine-starter-image。
三.总结
母子工程时,要构建子工程镜像,估计是问题还是出在dockerfile文件是在子工程目录里面产生的。通过添加一个Jenkins任务,去只构建镜像子工程,设置在主工程构建任务之后触发,就实现我们的目标了。