Наконец-то у меня все получилось.
В 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 && sync && /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
работает как docker -контейнер, опубликованный через nginx-proxy
с letsencrypt-nginx-proxy-companion
. В том же настраиваемом сетевом мосте мой собственный сервер jenkins
запускается как другой docker -контейнер.
Некоторые тесты показали, что имя контейнера реестра docker нельзя назвать с помощью publi c DNS-имя реестра (например, myregistry.mydomain.com в качестве имени контейнера). Контейнер jenkins
docker получает embedded docker dns server
в resolv.conf
, а docker разрешает имена контейнеров в той же сети во внутренние IP-адреса мостовой сети этих контейнеров (только в случае пользовательские сети docker).
Я полагаю, что jib должен подключиться через ssl к pu sh образу docker к контейнеру docker registry
, а ssl должен быть обработан перед контейнером с nginx-proxy
поэтому необходимо использовать внешний адрес домена docker registry
.
Также необходимо настроить межсетевой экран docker hosts (в соответствии с этой ссылкой ), чтобы разрешить трафик c от 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