Подмодули Git не обновляются в сборке Jenkins - PullRequest
68 голосов
/ 31 марта 2012

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

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

Ответы [ 6 ]

78 голосов
/ 05 августа 2013

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

git 2.0

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

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

Path


Оуэн Б упоминает в комментариях :

Для проверки подлинности теперь есть опция «Использовать учетные данные из удаленного по умолчанию родительского репозитория»

Видно здесь, в JENKINS-20941 :

https://issues.jenkins-ci.org/secure/attachment/33245/Screen%20Shot%202016-07-08%20at%2010.09.17.png

26 голосов
/ 14 ноября 2014

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

выдержка

Плагин GIT поддерживает репозитории сподмодули, которые, в свою очередь, сами имеют подмодули.Это должно быть включено, хотя: в Конфигурация задания -> Раздел Управление исходным кодом , Git -> Расширенная кнопка (в разделе «Филиалы дляbuild) -> Рекурсивное обновление подмодулей .

Пример

На экране конфигурации своей работы в разделе Управление исходным кодом потяните Добавьте кнопку вниз и выберите «Расширенное поведение подмодулей».

s1

s2

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

s3

25 голосов
/ 31 марта 2012

Знаете ли вы, что ваш 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.

17 голосов
/ 21 августа 2014

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

Проблема:

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

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

Решение:

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

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

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

Вот скриншот enter image description here

6 голосов
/ 31 марта 2012

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

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

git submodule foreach git checkout master
git submodule foreach git pull
5 голосов
/ 25 января 2013

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

...