Перейти к содержанию

Работа с Git-подмодулями в CI/CD

При работе с подмодулями Git в GitFlic CI/CD требуется их ручная инициализация и клонирование (например, для сборки или тестирования проекта с внешними зависимостями).

Для ознакомления с функционалом подмодулей в Git обратитесь к данной статье.

Клонирование подмодулей репозитория

Для клонирования подмодулей репозитория используйте git submodule update:

git submodule update --init --recursive

Эта команда загрузит подмодули на те коммиты, которые были зафиксированы в основном репозитории.

Ускоренное клонирование

Если подмодулей много или репозитории большие, используйте --depth 1 для ускорения:

git submodule update --init --recursive --depth 1

Опция --depth 1 клонирует подмодули только с последним коммитом, без всей истории. Это значительно экономит место и время при клонировании, особенно в CI/CD.

Клонирование на последние изменения из ветки

Чтобы при инициализации подмодули обновлялись не на зафиксированный коммит, а на последний коммит ветки, указанной в .gitmodules, используйте команду:

git submodule update --init --recursive --remote

Без выполнения команды git submodule update подмодули не будут загружены!


Авторизация для приватных подмодулей

Если подмодуль приватный, то вам необходимо добавить в конвейер шаги для авторизации в Git.

Способ 1: Использование файла .netrc

В шаге конвейера добавьте следующие команды:

before_script:
  - echo "machine gitflic.ru\nlogin $GITFLIC_USER\npassword $GITFLIC_TOKEN" > ~/.netrc
  - chmod 600 ~/.netrc
  • $GITFLIC_USER_LOGIN - предопределенная переменная, содержащая логин пользователя
  • $GITFLIC_TOKEN - пароль пользователя или токен развертывания репозитория

Обратите внимание: при использовании powershell агента на Windows, метод с .netrc не поддерживается. Для powershell агентов на Windows используйте 2 или 3 способ.


Способ 2: Настройка авторизации через git config

В шаге конвейера добавьте следующую команду:

before_script:
  - git config --global url."https://$GITFLIC_USER:$GITFLIC_TOKEN@gitflic.ru/".insteadOf "https://gitflic.ru/"

После выполнения данной команды любые обращения к подмодулям, расположенным на gitflic.ru, будут автоматически использовать указанные авторизационные данные.

Способ 3: Использование SSH-ключей

  1. Сгенерируйте SSH-ключ (если ещё не создан):

    ssh-keygen -t ed25519 -C "powershell-runner"
    
  2. Добавьте публичный ключ в ваш профиль GitFlic.

  3. В конвейере добавьте приватный ключ в переменные и используйте его для аутентификации:

    before_script:
        - mkdir -p ~/.ssh
        - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
        - chmod 600 ~/.ssh/id_ed25519
        - ssh-keyscan gitflic.ru >> ~/.ssh/known_hosts
    

Пример gitflic-ci.yaml

build:
  stage: build
  variables:
    GITFLIC_TOKEN: <password_or_token>
  before_script:
    - echo "machine gitflic.ru\nlogin $GITFLIC_USER_LOGIN\npassword $GITFLIC_TOKEN" > ~/.netrc
    - chmod 600 ~/.netrc
    - git submodule update --init --recursive
  script:
    - ./build.sh