Вопрос или проблема
У меня есть мастер, установленный на машине Windows.
У меня есть несколько узлов в Jenkins, один из которых имеет 2 метки: “system project”.
Этот узел на самом деле является простой машиной Solaris 11.3.
Другие узлы – это простые машины Windows (включая мастер).
У меня есть Jenkinsfile в моем проекте, в котором я определил pipeline как:
pipeline {
agent { label 'system && project' }
environment {
PATH='$PATH:/home/user/path'
}
stage('Build') {
echo "Test PATH=$PATH"
}
...
Когда я собираю, в журнале появляется ошибка:
ERROR: Error cloning remote repo 'origin'
...
Caused by: java.io.IOException: Cannot run program "git.exe" (in directory "/remote/rootdir/workspace/ProjectName"): error=2, No such file or directory
Сборка добавлена как Jenkins Pipeline, а не как свободный проект или что-то еще. И на данный момент единственное, что настроено – это репозиторий GitLab с SSH-учетными данными (rsa-ключ).
Но почему он пытается вызвать “git.exe” на Solaris? Мне явно показывается в разделе “Узлы” (https://servername/computer/), что на самом деле это SunOS (amd64).
Может ли он действительно вызваться на неправильном узле? Но я вижу, что директория “/remote/rootdir/workspace/ProjectName” была создана (ее не было раньше, я даже удалил ее и перезапустил сборку, чтобы убедиться, что Jenkins действительно создает ее). Очевидно, это не так, как я первоначально подозревал.
На самой машине установлен git – я проверил, вручную клонируя тот же репозиторий, используя тот же rsa-ключ.
Что я делаю не так? Чего мне не хватает? Как сказать Jenkins использовать правильный git?
В этом случае проблема заключалась в том, что мастер jenkins был установлен и работает на Windows, и не было настроено никакого git
для unix (solaris)/linux.
Мне нужно было зайти в Управление Jenkins >> Конфигурация глобальных инструментов >> Git >> Добавить Git
и добавить другой экземпляр с “Путь к исполняемому файлу Git”, равным “git”, почти как показано в ответе на этот вопрос: Jenkins не смог выполнить git
Был настроен только один git
: “Git-win”->”git.exe”. Теперь их два: “Git.win”->”git.exe” и “Git”->”git”. И у jenkins есть опция в конфигурации задания, какой из них использовать. Таким образом, вы можете выбрать “Git-win” для заданий Windows и “Git” для unix (solaris)/linux заданий.
Ответ или решение
Вопрос, с которым вы столкнулись, касается настроек Jenkins, когда происходит вызов git.exe
на узле, работающем под управлением Solaris, что приводит к ошибке. Давайте подробно разберем, как решить эту проблему, чтобы ваш Jenkins Pipeline мог корректно работать с системой контроля версий Git на Solaris.
Фон:
Вы имеете Jenkins master, установленный на Windows, и узел, работающий на Solaris 11.3, с установленным Git. При запуске пайплайна Jenkins пытается вызвать git.exe
, что абсолютно неправильно для Solaris. Это связано с тем, что Jenkins master не распознает корректный исполняемый файл Git на Unix-системах.
Решение проблемы:
-
Настройка Git в Jenkins:
- Перейдите в раздел администрирования Jenkins: Управление Jenkins -> Глобальная конфигурация инструментов -> Git.
- Здесь вам необходимо добавить новый экземпляр Git, указав путь к исполняемому файлу Git, установленному на вашем Solaris узле. Обычно это просто
git
, без.exe
. - Добавив новую запись, у вас будет возможность выбрать соответствующий исполняемый файл Git в зависимости от платформы, на которой выполняется сборка.
-
Конфигурация узлов:
- Убедитесь, что узел с меткой
system && project
действительно настроен для использования Git, который вы добавили. - При конфигурации пайплайна в вашем
Jenkinsfile
, убедитесь, что заданный агент соответствует узлу с правильной меткой.
- Убедитесь, что узел с меткой
-
Проверка переменных окружения:
- Убедитесь, что в среде выполнения вашего Jenkins Pipeline корректно настроены необходимые переменные окружения. Например, проверьте, что переменная
PATH
включает путь к Git, если он установлен не в стандартной директории.
- Убедитесь, что в среде выполнения вашего Jenkins Pipeline корректно настроены необходимые переменные окружения. Например, проверьте, что переменная
Почему происходит ошибка:
Ошибки возникают из-за того, что Jenkins, запущенный на Windows, по умолчанию пытается использовать конфигурацию для Windows. Когда вы не указываете конкретный Git для Solaris, Jenkins обращается к первой доступной конфигурации, которая указывает на git.exe
. Так как git.exe
не существует на Solaris системе, и возникает ошибка: Cannot run program "git.exe" (error=2, No such file or directory)
.
Заключение
Для успешного выполнения сборок на разных системах важно корректно настраивать глобальные инструменты Jenkins. Добавление отдельных конфигураций для Windows и Unix-систем позволяет избежать возникновения подобных ошибок. Убедитесь, что у вас настроена правильная конфигурация в зависимости от окружения, на котором вы работаете, и соответствующие метки для узлов.
Настройка Jenkins таким образом помогает поддерживать высокую эффективность и производительность CI/CD процессов, что в свою очередь способствует качественному управлению проектами и уменьшению времени на отладку.