Мы используем инструмент 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. Однако синхронизация репо здесь очень медленная. Мы перепробовали почти все ключи командной строки, и «repo sync» все еще является узким местом. Чтобы выполнить «синхронизацию репо» в существующем рабочем пространстве, требуется почти 10 минут, когда вводятся только несколько новых изменений.
Мы установили 'Bash на Ubuntu в Windows' на машине, отличной от jenkins, и попробовали оттуда 'repo sync' и вуаля !, это завершилось за пару минут.
Теперь проблема в том, что мы не можем использовать 'Bash на Ubuntu для Windows' от Jenkins.
Если мы используем поле «Выполнить оболочку» Jenkins, мы не можем понять, как заставить его использовать оболочку Ubuntu bash, так как инструкция shebang игнорируется на ведомых устройствах Windows (знать проблему)
Если мы используем Jenkins «Выполнить пакетную команду Windows» и запустим что-нибудь, перечислим это:
bash -c ls
Это работает на локальной машине, но если запустить из jenkins на windows slave, задание просто зависнет, и мы увидим значок прогресса вращающегося механизма, в конечном итоге нам придется убить задание jenkins.
Может быть, нам нужно изменить некоторую переменную среды Windows, чтобы заставить jenkins использовать эту оболочку. Файл bash.exe находится внутри C: \ Windows \ System32, который уже является первой записью в переменной PATH, поэтому мы не уверены, как в итоге мы используем оболочку Ubuntu bash из Jenkins.