Gitlab CI CD забрать ветку в другом проекте - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь настроить конвейер CI/CD для моего проекта. В настоящее время реализованы этапы build и test. Я использую Gradle с Spring boot. У меня есть следующие требования. Давайте назовем текущий проект Project A

  • . Pipeline должен подобрать основную ветвь в Project B, собрать jar-файлы и добавить их в каталог lib проекта A.
  • Развертывание на удаленной машине с использованием указанного c файла application.properties (назовем его remote-application.properties)

У меня есть несколько вопросов относительно этих требований: -

  • Должен ли конвейер CI CD быть реализован и для проекта B? В настоящее время он не реализован для проекта B
  • Как мне указать application.properties файл, специфицирующий c для удаленной машины на моем .gitlab-ci.yml

Я прошел https://docs.gitlab.com/ee/ci/multi_project_pipelines.html

Но я все еще не уверен, как реализовать эти требования. Любая помощь в этом будет оценена.

Использование премиальной версии GitLab

1 Ответ

0 голосов
/ 08 апреля 2020

Для второй части вашего вопроса:

Как мне указать файл application.properties c для удаленного компьютера в моем .gitlab-ci.yml

Задания в GitLab CI клонируют ваш репозиторий git, а затем выполняют сценарии командной строки. Вы можете либо включить весь файл в свой репозиторий git, либо каким-то образом оставить его отдельно. Одна альтернатива - использовать переменную окружения типа файла в GitLab . Информация в файле будет храниться за пределами git, что хорошо, если этот файл содержит секреты.

Когда у вас есть файл, доступный в вашем задании GitLab, вы сможете выполнить команду просто как если бы вы использовали командную строку на своем локальном компьютере.

Для первой части вашего вопроса:

Должен ли конвейер CI CD быть реализован также для проекта B? В настоящее время он не реализован для проекта B

Да. Реализовать конвейер также для проекта B. Для вас должно быть довольно просто создать конвейер для проекта B, который собирает и хранит артефакты для этого проекта. Затем проект A может загрузить эти файлы с помощью GitLab API . Короткий пример, который я не тестировал, но который должен поставить вас на правильный путь:

//.gitlab-ci.yml of Project B
build_master:
  script:
    - make
  artifacts:
    paths:
      - project_b_jars
  only:
    refs
      - master

//.gitlab-ci.yml of Project A
build:
  script:
    - 'curl --location --output artifacts.zip --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.example.com/api/v4/projects/<PROJECT_B_PROJECT_ID>/jobs/artifacts/master/download?job=build_master"'

Я думаю, что это решение самое простое в настройке и соответствует вашим потребностям. Если у вас есть это, вы также можете расширить многопроектный конвейер, если вам это нужно.

Другой альтернативой является установка PROJECT_B в качестве подмодуля PROJECT_A. После этого вы полностью контролируете, какая версия PROJECT_B используется в PROJECT_A, что хорошо, если вы работаете, например, с микропрограммой.

...