Как проверить подмодуль git с другим ключом развертывания в декларативном конвейере

#git #jenkins #jenkins-pipeline #git-submodules

#git #дженкинс #дженкинс-конвейер #git-подмодули

Вопрос:

У меня есть проект, размещенный в корпоративном экземпляре GitHub. Проект ссылается на вспомогательный модуль в том же экземпляре.

  • Для доступа к основному проекту я настроил «deploy_key_1» в репозитории Github.

  • Для доступа к проекту подмодуля я настроил «deploy_key_2» в репозитории Github.

Примечание: я не могу использовать один и тот же ключ развертывания на GitHub Enterprise: ключ уже используется

Задание Дженкинса определяется как многоотраслевой конвейер, и я использую checkout команду в файле Jenkins:

 checkout([
    $class: 'GitSCM',
    branches: scm.branches,
    doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
    extensions: [[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: false, recursiveSubmodules: true, reference: '', trackingSubmodules: false]],
    userRemoteConfigs: scm.userRemoteConfigs
])
  

Я попробовал оба варианта: Set parentCredentials: true и parentCredentials: false , но оба приводят к этой ошибке при выполнении задания:

хадсон.исключение plugins.git.GitException: команда «обновление подмодуля git -инициализация — рекурсивный my-submodule» вернула код состояния 1: стандартный вывод: stderr: клонирование в ‘/ private/tmp/workspace/project_develop/my-submodule’… git@github.mycompany.com : В разрешении отказано (publickey). фатальный: не удалось прочитать из удаленного репозитория.

Пожалуйста, убедитесь, что у вас правильные права доступа и репозиторий существует. фатальный: клонирование ‘git@github.mycompany.de:myorga/my-submodule.git ‘ в путь к подмодулю ‘/private/tmp/workspace/project_develop/my-submodule’ сбой Не удалось клонировать ‘my-submodule’. Повторите попытку запланированного клонирования в ‘/private/tmp/workspace/project_develop/my-submodule’… git@github.mycompany.de : В разрешении отказано (publickey). фатальный: не удалось прочитать из удаленного репозитория.

Пожалуйста, убедитесь, что у вас правильные права доступа

Оба ключа развертывания доступны в Jenkins. Итак, как я могу проверить подмодули? Как я могу указать checkout команде использовать определенный credentials-id при извлечении подмодуля?

Ответ №1:

Я думаю, что это слишком далеко от конфигурации git, и слишком много вариантов использования edge для SCM, чтобы поддерживать это.

Что касается опций с GitSCM submoduleCfg , но это позволяет вам делать только то, что задает имя и ветвь подмодуля.

 package hudson.plugins.git;

public class SubmoduleConfig implements java.io.Serializable {
    private static final long serialVersionUID = 1L;
    String   submoduleName;
    String[] branches;
  

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

 git submodule init
git config submodule.my_submodule.url "https://username:password@url/my_submodule.git"
git submodule update
  

Комментарии:

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

2. @Christopher забавно, что вы отредактировали мой ответ вместо того, чтобы комментировать его.

3. Да, я подумал, что другим людям будет проще увидеть решение прямо в ответе, а не выбирать его из комментариев. 🙂 Еще раз спасибо за вашу помощь здесь!

4. Рад помочь, если решение работает, вы не возражаете принять ответ?