目錄
- pom配置
- setting.xml配置
- 登錄情況
- 需要登錄
- 無需登錄
- maven多模塊情況配置
- jenkins
- jenkins服務器安裝docker
- 修改jenkins項目配置
最近在將應用部署到容器平臺,需要在打包時生成docker鏡像,在網上首先搜到了docker-maven-plugin這個插件,但使用起來很麻煩,在maven和dockfile都要做很多額外的配置。后來在官方Github看到作者推薦使用dockerfile-maven-plugin這個新的插件,于是替換成這個,但這個插件在網上的相關資料較少。在此記錄一哈
pom配置
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <!-- Dockerfile maven plugin --> <plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.10</version> <executions> <!--<execution>--> <!--<id>default</id>--> <!--<goals>--> <!--<!–如果package時不想用docker打包,就注釋掉這個goal–>--> <!--<goal>build</goal>--> <!--<goal>push</goal>--> <!--</goals>--> <!--</execution>--> </executions> <configuration> <repository>docker-reg.****.com/feedback/${artifactId}-${profiles.active}</repository> <tag>${project.version}</tag> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin>
setting.xml配置
這個文件在maven目錄下,可以 cd $M2_HOME/conf 進入。
在pluginGroups中增加一個com.spotify
<pluginGroups> <pluginGroup>com.spotify</pluginGroup> </pluginGroups>
登錄情況
需要登錄
關于如何驗證登錄,坑比較多。如果你在habor設置你的倉庫為私有,那必須要登錄,按照官方配置就可以,如下。
<plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>${version}</version> <configuration> <username>repoUserName</username> <password>repoPassword</password> <repository>${docker.image.prefix}/${project.artifactId}</repository> <buildArgs> <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin>
無需登錄
但因為我配置了在k8s自動從habor獲取鏡像,所以設置了公開,這種情況下無需登錄,但有時也會執行失敗,此時你需要刪掉~/.docker/config.json中的這個網站的配置。
cat ~/.docker/config.json { "auths": { "192.168.87.110:5000": { "auth": "YWRtaW46JKDtaW4xMjM=" }(刪掉此處) }, "HttpHeaders": { "User-Agent": "Docker-Client/18.09.0 (linux)" } }
確認這里為空后,如果還報錯,可以再執行一次docker login … ,這樣就成功了
maven多模塊情況配置
在多模塊的情況下,打包插件一定要放置在Application子模塊中,如果放在root pom中會導致打包不成功。
如下情況:
- -app
- -common
- -file
- -application
- -pom.xml
這種情況,我們可以分兩個步驟
第一步先打包全部模塊,在根目錄下
mvn clean package -P test
第二步在要打包鏡像的子模塊中執行deploy命令
mvn dockerfile:build dockerfile:push
這樣,就能成功將子模塊打包為鏡像并push。
jenkins
在本地測試完之后,要將這個流程弄到jenkins,做一些配置。
jenkins服務器安裝docker
此處不再贅述,maven的setting.xml等配置和本地一樣。
修改jenkins項目配置
此時,由于項目需要打包兩次(一次在根目錄打包,第二次在子目錄打包為鏡像),所以需要執行兩次mvn命令,和之前不一樣,所以將第一次的執行還是使用jenkins的Build模塊。
第二次的執行放置在post steps中通過命令在執行
cd 子模塊目錄 mvn clean package -P $env dockerfile:build dockerfile:push
這樣,就可以完成打包并制作鏡像的步驟了