# #gitlab #gitlab-ci
Вопрос:
У меня есть несколько проектов GitLab в одной группе. Между ними существуют зависимости. Допустим, у меня есть 3 проекта:
- some_group/api
- some_group/сервер
- some_group/клиент
Как серверные, так и клиентские проекты зависят от api.
Я пытаюсь настроить CI/CD для развертывания образов в реестре GitLab. На основе этого урока https://docs.gitlab.com/ee/user/packages/maven_repository/index.html#create-maven-packages-with-gitlab-cicd Мне удалось развернуть версию в этом реестре.
Проблема в том, что если я сделаю то же самое с api и сервером, позже я не буду загружать зависимый пакет api, потому что ${env.CI_PROJECT_ID} создаст другой идентификатор.
Каково самое элегантное решение, не добавлять несколько серверов с жестко закодированными идентификаторами проектов в pom.xml.
Другой вопрос, как я могу использовать этот репозиторий из локальной среды.
Спасибо всем вам за вашу помощь.
Ответ №1:
Для этого существует несколько различных возможных решений.
- Опубликуйте все артефакты в одном проекте.
Вы можете выбрать один проект в группе (или создать новый) и опубликовать все артефакты в этом реестре. Если вы не хотите жестко кодировать идентификатор проекта, вы можете определить для него переменную CI и использовать ее вместо ${env.CI_PROJECT_ID}.
- Опубликуйте артефакты в нескольких проектах и нескольких реестрах и добавьте соответствующие
<repository>
записи в свойpom.xml
(Я думаю, вы хотели избежать этого, но я все же решил перечислить такую возможность)
- Определите пользовательский
settings.xml
вместо добавления репозиториев в свойpom.xml
Вы можете добавить его в свой репозиторий и использовать с
mvn clean install -s ./settings.xml
Пример с двумя пользовательскими переменными CI:
<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<profiles>
<profile>
<repositories>
<repository>
<id>registry1</id>
<url>https://gitlab.com/api/v4/projects/${env.REGISTRY1}/packages/maven</url>
</repository>
<repository>
<id>registry2</id>
<url>https://gitlab.com/api/v4/projects/${env.REGISTRY2}/packages/maven</url>
</repository>
</repositories>
<id>glregistry</id>
</profile>
</profiles>
<activeProfiles>
<activeProfile>glregistry</activeProfile>
</activeProfiles>
</settings>
Другой вопрос, как я могу использовать этот репозиторий из локальной среды.
Я бы предложил для этого третий способ. Добавьте необходимые <repository>
теги ~/.m2/settings.xml
, и Maven сможет правильно их разрешить. Если файл еще не существует, вы можете скопировать пример выше и просто заменить переменные соответствующими идентификаторами проекта.