io.fabric8使用
为了使jenkins能运行mvn命令就能实现容器的build,remove,run,使用了io.fabric8这款插件,
运行mvn clean package docker:build 报错
failed: stat /var/lib/docker/tmp/docker-builder455335933/opt: no such file or directory
一般是dokcerfile的问题
去target目录下才发现
文件路径是 target\docker\blogapi\tmp
,里面有一个docker-build.tar
这个tmp目录是临时挂载卷在/var/lib/docker/tmp/
也就是报的错误的路径,
因为dockerfile里面的COPY和ADD的相对路径不是以maven/
开头所以no such file or directory
,
我还傻傻的 target/
开头,原来mvn docker:build已经切换的工作的根路径了
jenkins配合 io.fabric8的问题
在docker:run 这里有个坑,docker:run是在前台执行,也就是说,它并不能像使用docker一下直接docker start -d来实现后台运行,他会阻止后续指令执行,所以要把它放在最后一个执行才不会影响构建
但是jenkins毫无疑问卡在这步返回不了,maven超时的时候退出,并返回构建失败,但是这不会影响远端的容器运行
tls访问问题
由于我服务器docker守护进程开放的端口9876,所以dockerhost最好使用设置https开头,
因为tcp开头只能访问2375,2376,http则根本访问不了
贴一个我的plugin配置
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.26.0</version>
<!--全局配置-->
<configuration>
<!-- <dockerHost>tcp://localhost:2375</dockerHost>-->
<dockerHost>https://106.53.223.87:9876</dockerHost>
<!--docker远程访问所需证书地址,如果docker远程主机没有启用TLS验证则不需要配证书-->
<certPath>/var/jenkins_home/cert/</certPath>
<!--镜像相关配置,支持多镜像-->
<images>
<!-- 单个镜像配置 -->
<image>
<!--镜像名(含版本号)-->
<name>blogapi:${maven.build.timestamp}</name>
<!--别名:用于容器命名和在docker-compose.yml文件只能找到对应名字的配置-->
<alias>${project.name}</alias>
<!--镜像build相关配置-->
<build>
<!--使用dockerFile文件-->
<dockerFile>Dockerfile</dockerFile>
<!--将jar包拷贝到docker build目录中-->
<assembly>
<descriptorRef>artifact</descriptorRef>
</assembly>
</build>
<run>
<!---->
<namingStrategy>alias</namingStrategy>
<ports>
<port>8088:8088</port>
</ports>
</run>
</image>
</images>
</configuration>
<dependencies>
<!--该插件需要这个依赖-->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
</dependencies>
</plugin>