我開發了一個Docker化的Spring Boot應用程式,使用AdoptOpenJDK作為基礎鏡像,并使用jib-maven-plugin。
我的插件配置是:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>${jib-maven-plugin.version}</version>
<configuration>/span>
<from>/span>
<image>adoptopenjdk:11-jre-hotspot</image>
</from>/span>
<to>/span>
<image>/span>public/my-app</image>/span>
<tags>/span>
<tag>/span>latest</tag>
<tag>${project.version}</tag>
</tags>/span>
</to>/span>
<container>
<entrypoint>/span>
<shell>bash</shell>
<option>-c</option>
<arg>/span>/entrypoint.sh</arg>/span>
</entrypoint>
<ports>/span>
<port>/span>8080</port>/span>
</port>/span>
<environment>/span>
<SPRING_OUTPUT_ANSI_ENABLED>Always</SPRING_OUTPUT_ANSI_ENABLED>
<JHIPSTER_SLEEP>/span>0</JHIPSTER_SLEEP>/span>
</environment>/span>
<creationTime>/span>USE_CURRENT_TIMESTAMP</creationTime>
</container>/span>
<extraDirectories>/span>
<paths>src/main/jib</paths>/span>
<permissions>/span>
<permission>/span>
<file>/span>/entrypoint.sh</file>
<mode>755</mode>
</permission>/span>
</permissions>/span>
</extraDirectories>/span>
</configuration>/span>
</plugin>/span>
一切正常,當啟動./mvnw package -Pprod -DskipTests jib:build -T16.0C時,應用程式被正確構建。現在我正在將我的應用程式集成到CI/CD Jenkins管道中,我正在創建一個類似第一個命令的命令,但使用變數傳遞Auth資料:
./mvnw -ntp -T2.0C jib:build -Djib.from.augh.username=myUserName -Djib.from.augh.password=mygitlabtoken01 -Dimage=registry.gitlab.com/myapp -X
當我運行它時,我得到:
[INFO] Using credentials from Docker config (/Users/myUser/.docker/config.json) for registry.gitlab.com/neoris-emea-internal/ianthe/ianthe-app/ianthe
[DEBUG] 嘗試對registry.gitlab.com/app進行承載認證...
[INFO] 基本鏡像需要 auth。再次嘗試為 adoptopenjdk:11-jre-hotspot...
[INFO] 使用來自<from><auth> 為 adoptopenjdk:11-jre-hotspot 的證書。
[DEBUG] 嘗試為 adoptopenjdk:11-jre-hotspot 進行基本認證...。
[DEBUG] 為registry-1.docker.io/library/adoptopenjdk配置了基本認證。
[DEBUG] TIMED Authenticating push to registry.gitlab.com : 1091.927 ms
[DEBUG] 構建和推送鏡像的時間:1122.522 ms
[ERROR] I/O error for image [registry-1.docker.io/library/adoptopenjdk]:
[ERROR] javax.net.ssl.SSLHandshakeException
[ERROR] 遠程主機終止了握手程序
我不明白的是:
- 如果我用
-Djib.from.auth.username=myUserName表明了授權資訊,為什么jib插件會使用我的.docker/config.json? - 為什么我得到
SSLHandshakeException?雖然構建時使用的是我的證書,但這些證書是正確的。
uj5u.com熱心網友回復:
如果你仔細看日志資訊,Jib確實使用了你通過from.auth.username|password指定的憑證,用于adoptopenjdk(它被托管在Docker Hub)。
使用來自<的憑據。 from><auth>為 adoptopenjdk。 11-jre-hotspot
注意下面一行說Docker配置用于registry.gitlab.com(目標注冊表)。
使用Docker配置(/Users/myUser/.docker/config.json)中的憑證用于registry.gitlab.com/neoris-emea-internal/ianthe/ianthe-app/ianthe
關于SSLHandshakeException,它與任何Docker憑證無關。該錯誤來自更低的網路層(TLS協議),所以該故障從根本上與Jib或在Jenkins上的JVM中運行的任何應用程式無關。它基本上是在告訴你,JVM上的任何Java應用無法與某些主機建立安全的TLS連接。對于TLS握手失敗,沒有簡單的答案或解決方案,所以如果可能的話,請向網路和TLS專家尋求幫助。還可以查看其他SO問題,如這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/327632.html
標籤:
