Gitlab CI/CD с использованием репозитория

# #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:

Для этого существует несколько различных возможных решений.

  1. Опубликуйте все артефакты в одном проекте.

    Вы можете выбрать один проект в группе (или создать новый) и опубликовать все артефакты в этом реестре. Если вы не хотите жестко кодировать идентификатор проекта, вы можете определить для него переменную CI и использовать ее вместо ${env.CI_PROJECT_ID}.

  2. Опубликуйте артефакты в нескольких проектах и нескольких реестрах и добавьте соответствующие <repository> записи в свой pom.xml

    (Я думаю, вы хотели избежать этого, но я все же решил перечислить такую возможность)

  3. Определите пользовательский 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 сможет правильно их разрешить. Если файл еще не существует, вы можете скопировать пример выше и просто заменить переменные соответствующими идентификаторами проекта.