gpt4 book ai didi

maven - Jib-Maven-plugin 与 Jenkins 脚本化管道 : how to log in to private docker registry?

转载 作者:行者123 更新时间:2023-12-02 18:18:34 26 4
gpt4 key购买 nike

关于this problem ,我用脚本化的 Jenkins 管道更新了我的 JHipster-Application,现在在 Jenkinsfile (部分在 these hints 之后):

[...]

def dockerImage
withEnv(["DOCKER_CREDS=credentials('myregistry-login')"]) {
stage('publish docker') {
sh "./mvnw -X -ntp jib:build"
}
}

使用 Jenkins 全局凭证 myregistry-login在我的 Jenkins-Server 中保存到我自己的 docker 注册表 v2 docker-container https://myregistry.mydomain.com (出于安全原因更改了域)。我可以成功做一个 $ docker login myregistry.mydomain.com (以及 docker login https://myregistry.mydomain.comdocker login myregistry.mydomain.com:443 )来自本地 bash,用户和密码存储在 myregistry-login 中.

pom.xml (在 these hints 以及 thisthisthis 之后):
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<configuration>
<to>
<image>myregistry.mydomain.com:443/username/imagename</image>
<tags>
<tag>${maven.build.timestamp}</tag>
<tag>latest</tag>
</tags>
<auth>
<username>${env.DOCKER_CREDS_USR}</username>
<password>${env.DOCKER_CREDS_PSW}</password>
</auth>
</to>
<container>
<jvmFlags>
<jvmFlag>-Xms512m</jvmFlag>
<jvmFlag>-Xmx1G</jvmFlag>
<jvmFlag>-Xdebug</jvmFlag>
</jvmFlags>
<mainClass>de.myproject_name.MyApp</mainClass>
</container>
</configuration>
</plugin>

在哪里 username , imagenamede.myproject_name.MyApp是这里的占位符。

不幸的是我得到
[DEBUG] TIMING  Retrieving registry credentials for myregistry.mydomain.com:443
[DEBUG] No credentials could be retrieved for registry myregistry.mydomain.com:443
[...]
[ERROR] I/O error for image [myregistry.mydomain.com:443/username/imagename]:
[ERROR] Connect to myregistry.mydomain.com:443 [myregistry.mydomain.com/xxx.xxx.xxx.xxx] failed: Connection refused (Connection refused)
[DEBUG] TIMED Authenticating push to myregistry.mydomain.com:443 : 460.0 ms
[DEBUG] TIMED Building and pushing image : 514.0 ms
[ERROR] I/O error for image [registry-1.docker.io/library/adoptopenjdk]:
[ERROR] Socket closed

所以 withEnv未转发到 Maven 和/或 jib-maven-plugin 未读取 <auth> -标签,对吧?我还在做错什么?
以及为什么 registry-1.docker.io 出现 I/O 错误?

最佳答案

最后我让它工作了。

Jenkinsfile我将 JHipster 生成的代码编辑为:

    def dockerImage
stage('publish docker') {
withCredentials([usernamePassword(credentialsId: 'myregistry-login', passwordVariable: 'DOCKER_REGISTRY_PWD', usernameVariable: 'DOCKER_REGISTRY_USER')]) {
sh "./mvnw -ntp jib:build" }
}

pom.xml我把jib-maven-plugin配置:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<configuration>
<from>
<image>adoptopenjdk:11-jre-hotspot</image>
</from>
<to>
<auth>
<username>${DOCKER_REGISTRY_USER}</username>
<password>${DOCKER_REGISTRY_PWD}</password>
</auth>
<image>myregistry.mydomain.com/myuser/my_image</image>
<tags>
<tag>${maven.build.timestamp}</tag>
<tag>latest</tag>
</tags>
</to>
<container>
<jvmFlags>
<jvmFlag>-Xms512m</jvmFlag>
<jvmFlag>-Xmx1G</jvmFlag>
<jvmFlag>-Xdebug</jvmFlag>
</jvmFlags>
<mainClass>com.mypackage.MyApp</mainClass>
<entrypoint>
<shell>bash</shell>
<option>-c</option>
<arg>chmod +x /entrypoint.sh &amp;&amp; sync &amp;&amp; /entrypoint.sh</arg>
</entrypoint>
<ports>
<port>8080</port>
</ports>
<environment>
<SPRING_OUTPUT_ANSI_ENABLED>ALWAYS</SPRING_OUTPUT_ANSI_ENABLED>
<JHIPSTER_SLEEP>0</JHIPSTER_SLEEP>
</environment>
<creationTime>USE_CURRENT_TIMESTAMP</creationTime>
</container>
</configuration>
</plugin>

在我的远程服务器设置中我自己的 docker registry v2正在作为通过 nginx-proxy 发布的 docker 容器运行与 letsencrypt-nginx-proxy-companion .在同一个自定义网桥上运行我自己的 jenkins服务器作为另一个 docker 容器。

一些测试表明,docker 注册表的容器名称不能用注册表的公共(public) DNS 名称命名(例如,“myregistry.mydomain.com”作为容器名称)。 jenkins docker-container 获取 embedded docker dns server进入 resolv.conf ,并且 docker 会将同一网络中容器的容器名称解析为这些容器的内部桥接网络 IP(仅在自定义 docker 网络的情况下)。

我猜 jib 必须通过 ssl 连接才能将 docker 镜像推送到 docker registry容器和 ssl 必须在具有 nginx-proxy 的容器之前处理,所以 docker registry 的外部地址必须使用域。

此外,必须配置 docker hosts 防火墙(根据 this link )以允许来自 docker 容器 jenkins 的流量通过 docker 主机。在主机上,它又回到 docker registry。通过 nginx-proxy用ssl,对吧?就我而言,这归结为:
$ sudo firewall-cmd --info-zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: enp6s0
sources:
[...]
rich rules:
rule family="ipv4" source address="172.26.0.13/32" accept

关于maven - Jib-Maven-plugin 与 Jenkins 脚本化管道 : how to log in to private docker registry?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59661871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com