У меня есть проект GitLab, который предоставляет библиотеку часто используемых классов для других проектов (назовем это lib-1 ). Я внес изменения в конфигурацию (как поставщика, так и потребителей) в pom.xml, настройки проекта GitLab и т. д., чтобы опубликовать построенную библиотеку в реестре пакетов проекта GitLab. Я подтвердил, что все это работает, включая возможность использования этой библиотеки потребительскими проектами.
Я разработал другую, отдельную библиотеку (в отдельном проекте GitLab), которая предоставляет другой набор общих функций. классы (назовем это lib-2). Проект выше (
Код: Выделить всё
lib-1
Я столкнулся с проблемой, когда lib-1 не может быть собран, потому что он не могу загрузить библиотеку lib-2.
Вот ошибка:
Код: Выделить всё
[ERROR] Failed to execute goal on project prometheus-common: Could not resolve dependencies for project com.beast-code.devops:prometheus-common:jar:1.4.0: Failed to collect dependencies at com.beastcode.devops:rest-api-utility:jar:3.0.0: Failed to read artifact descriptor for com.beastcode.devops:rest-api-utility:jar:3.0.0: Could not transfer artifact com.beastcode.devops:rest-api-utility:pom:3.0.0 from/to gitlab-maven-rest (https://gitlab.phactory.beast-code.com/api/v4/projects/1155/packages/maven): Transfer failed for https://gitlab.phactory.beast-code.com/api/v4/projects/1155/packages/maven/com/beastcode/devops/rest-api-utility/3.0.0/rest-api-utility-3.0.0.pom: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help 1]
Вот различные файлы из обеих lib-1< /code> и lib-2.
=
Код: Выделить всё
lib-1
pom.xml (соответствующие разделы):
Код: Выделить всё
https://gitlab.phactory.beast-code.com/api/v4
863
1155
3.0.0
gitlab-maven-rest-api
${gitlab-api-url}/projects/${rest-api-utility.project-id}/packages/maven
gitlab-maven-prometheus-common
${gitlab-api-url}/projects/${prometheus-common.project-id}/packages/maven
gitlab-maven-prometheus-common
${gitlab-api-url}/projects/${prometheus-common.project-id}/packages/maven
gitlab-maven-prometheus-common
${gitlab-api-url}/projects/${prometheus-common.project-id}/packages/maven
com.beastcode.devops
rest-api-utility
${rest-api-utility.version}
com.beastcode.devops
rest-api-utility
Код: Выделить всё
gitlab-maven-prometheus-common
Job-Token
${CI_JOB_TOKEN}
Код: Выделить всё
push-to-package-registry:
stage: push
image: maven:3.6-jdk-11
script:
- 'mkdir ./certs'
- 'export CRT_FILE=./certs/BCRCA.crt'
- 'export CA_CERTS_PATH=$JAVA_HOME/lib/security/cacerts'
- 'echo "$BCRCA" > $CRT_FILE'
- 'keytool -import -noprompt -trustcacerts -alias BCRCA -file $CRT_FILE -keystore $CA_CERTS_PATH -storepass changeit'
- 'keytool -list -keystore $CA_CERTS_PATH -alias BCRCA -noprompt -storepass changeit'
- 'rm -rf ./certs'
- 'mvn clean deploy -s ci_settings.xml -DskipTests'
rules:
- if: $CI_COMMIT_REF_PROTECTED == "true" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
=
Код: Выделить всё
lib-2
pom.xml (соответствующие разделы):
Код: Выделить всё
https://gitlab.phactory.beast-code.com/api/v4
1155
gitlab-maven
${gitlab-api-url}/projects/${gitlab-project-id}/packages/maven
gitlab-maven
${gitlab-api-url}/projects/${gitlab-project-id}/packages/maven
gitlab-maven
${gitlab-api-url}/projects/${gitlab-project-id}/packages/maven
Код: Выделить всё
gitlab-maven
Job-Token
${CI_JOB_TOKEN}
Код: Выделить всё
push-to-package-registry:
stage: push
image: maven:3.6-jdk-11
script:
- 'mkdir ./certs'
- 'export CRT_FILE=./certs/BCRCA.crt'
- 'export CA_CERTS_PATH=$JAVA_HOME/lib/security/cacerts'
- 'echo "$BCRCA" > $CRT_FILE'
- 'keytool -import -noprompt -trustcacerts -alias BCRCA -file $CRT_FILE -keystore $CA_CERTS_PATH -storepass changeit'
- 'keytool -list -keystore $CA_CERTS_PATH -alias BCRCA -noprompt -storepass changeit'
- 'rm -rf ./certs'
- 'mvn clean deploy -s ci_settings.xml -DskipTests'
rules:
- if: $CI_COMMIT_REF_PROTECTED == "true" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
Кто-нибудь уже сталкивался с этим вариантом использования и сталкивался с этим раньше? Документация GitLab описывает довольно много того, что необходимо сделать, но я думаю, что есть несколько областей, которые умалчиваются и оставляются на усмотрение разработчика. Они не охватывают ситуацию, подобную той, которую я здесь делаю.
Немного второстепенная тема:
Вся логика в каждом Задание «push to regsitry» перед развертыванием maven (насколько мне известно) устанавливает сертификат X.509, подписанный корневым центром сертификации, в хранилище доверенных сертификатов JVM, упакованное в образ. Я не уверен на 100%, что здесь происходит, но у меня есть память, что это нужно сделать, иначе что-то не получится. Мне любопытно, может ли это иметь какое-либо отношение к вышеизложенной проблеме. Сообщение об ошибке, похоже, указывает на проблему с сертификатом.
Подробнее здесь: https://stackoverflow.com/questions/785 ... annot-pull