Подтвердить что ты не робот

Git подмодули, не обновляющиеся в сборнике Дженкинса

У меня есть подмодуль в проекте в дженкинсах. Я включил расширенную настройку для рекурсивного обновления подмодулей. Когда я запускаю сборку, я вижу, что в рабочей области есть файлы из подмодуля. Проблема в том, что это первая ревизия подмодуля. Когда я нажимаю изменения (репозиторий, размещенный на github), дженкинс, похоже, не обновляет подмодуль, чтобы получить правильные изменения. Кто-нибудь когда-нибудь видел это?

4b9b3361

Ответ 1

Похоже, я нашел решение:

Я добавил шаг сборки для выполнения следующих команд оболочки:

git submodule foreach git checkout master
git submodule foreach git pull

Ответ 2

Обратите внимание, что Jenkins Git плагин 2.0 будет иметь "продвинутое поведение подмодулей", которое должно обеспечить правильное обновление подмодулей:

git 2.0

Как прокомментировал vikramvi:

Advanced sub-modules behavior > "Path of the reference repo to use during submodule update" против этого поля, добавьте подмодуль Git url.

Путь

Ответ 3

Знаете ли вы, что ваш репозиторий git всегда относится к конкретной ревизии подмодуля? Дженкинс не собирается автоматически изменять ревизию.

Если вы хотите использовать более новую версию подмодуля, вы должны сделать это в своем локальном репозитории git:

cd submoduledir
git pull
cd ..
git add submoduledir
git commit -m 'Updated to latest revision of submoduledir'
git push # Go and watch jenkins build with the new revision of the submodule

Когда вы это сделаете, Дженкинс проверит ту же самую ревизию подмодуля во время сборки. Дженкинс сам по себе не решает, какой пересмотр подмодуля использовать. Это принципиальное различие между git подмодулями и внешними svn.

Возможно, вы захотите прочитать хорошую ссылку на подмодули, например. http://progit.org/book/ch6-6.html

Ответ 4

Это описано в документации по плагину Git на сайте Jenkins в разделе: Рекурсивные подмодули.

выдержка

Плагин Git поддерживает репозитории с подмодулями, которые, в свою очередь, сами имеют подмодули. Это должно быть включено, хотя: в настройке задания → Управление исходным кодом раздела, Git → Расширенная кнопка (под ветками для сборки) → Рекурсивно обновить подмодули.

Пример

На экране конфигурации вашего задания в разделе "Управление исходным кодом" нажмите кнопку "Добавить" вниз, выберите "Улучшенные подинмодули".

    s1

                                  s2

Затем выберите "Рекурсивно обновить подмодули":

    s3

Ответ 5

Наконец наткнулся на способ сделать это, и это просто.

Проблема:

Исходный клон с учетными данными работает отлично, но последующее клонирование submodule не выполняется с неправильными учетными данными.

  • Автоматическое расширенное клонирование подмодуля: Source Code Management >> Additional Behaviours >> Advanced sub-modules behaviours: приводит к ошибке учетных данных.
  • git submodule update --init в разделе Execute Shell также терпит неудачу с ошибкой учетных данных.

Решение:

Я использую jenkins-1.574.

  • Установите флажок Build Environment >> SSH Agent.
  • Выберите правильные учетные данные (вероятно, такие же, как в разделе Source Code Management
  • Обновить подмодули в разделе Execute Shell

    git submodule sync
    git submodule update --init --recursive
    

Здесь снимок экрана enter image description here

Ответ 6

Если вы используете модуль Jenkins Git, вы можете установить его в "Протрите рабочую область перед сборкой", таким образом, он всегда получит правильный вспомогательный модуль.