Мы используем инструменты repo и gerrit для управления нашими репозиториями git и проверки кода.
«repo init» и «repo sync» отлично работают на наших подчиненных устройствах Linux, но у нас были серьезные проблемы с подчиненными устройствами Windows:
Инструкция Shebang игнорируется в Windows, если она указана в поле «Выполнить оболочку» Jenkins, поэтому, если у нас установлено несколько оболочек на ведомом устройстве Windows (MINGW_32, MINGW_64, CYGWIN64, Ubuntu Bash), невозможно принудительно запустить скрипт внутри конкретную оболочку, указав инструкцию shebang - это просто не работает.
Нам удалось запустить «синхронизацию репо» на подчиненном устройстве Windows от jenkins в оболочке MINGW64, которая поставляется с Git для установки Windows. Однако «синхронизация репо» здесь очень медленная. Мы перепробовали почти все переключатели командной строки, и «синхронизация репо» по-прежнему остается узким местом. Выполнение «синхронизации репо» в существующей рабочей области занимает почти 10 минут, когда вносятся только несколько новых изменений.
Мы установили «Bash на Ubuntu в Windows» на машину без jenkins и попробовали «синхронизацию репо» оттуда и вуаля!, она завершилась за пару минут.
Теперь проблема в том, что мы не можем использовать «Bash на Ubuntu в Windows» от Jenkins. Если мы используем поле «Выполнить оболочку» Jenkins, мы не сможем понять, как заставить его использовать оболочку Ubuntu bash, поскольку инструкция shebang игнорируется на подчиненных устройствах Windows (известная проблема)
Если мы используем окно Jenkins «Выполнить пакетную команду Windows» и запускаем что-то, перечислите это: bash -c ls Это работает на локальной машине, но если запустить из jenkins на подчиненном устройстве Windows, задание просто зависает, и мы видим значок прогресса вращающейся шестерни, в конце концов мы должны убить работу Дженкинса.
Возможно, нам нужно изменить некоторую переменную среды Windows, чтобы заставить jenkins использовать эту оболочку. Bash.exe находится внутри C:\Windows\System32, который уже является первой записью в переменной PATH, поэтому мы не уверены, как мы в конечном итоге используем оболочку Ubuntu bash от Jenkins.