Jenkins пайплайн вызывает git.exe на не-Windows узле

Вопрос или проблема

У меня есть мастер, установленный на машине 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-системах.

Решение проблемы:

  1. Настройка Git в Jenkins:

    • Перейдите в раздел администрирования Jenkins: Управление Jenkins -> Глобальная конфигурация инструментов -> Git.
    • Здесь вам необходимо добавить новый экземпляр Git, указав путь к исполняемому файлу Git, установленному на вашем Solaris узле. Обычно это просто git, без .exe.
    • Добавив новую запись, у вас будет возможность выбрать соответствующий исполняемый файл Git в зависимости от платформы, на которой выполняется сборка.
  2. Конфигурация узлов:

    • Убедитесь, что узел с меткой system && project действительно настроен для использования Git, который вы добавили.
    • При конфигурации пайплайна в вашем Jenkinsfile, убедитесь, что заданный агент соответствует узлу с правильной меткой.
  3. Проверка переменных окружения:

    • Убедитесь, что в среде выполнения вашего Jenkins Pipeline корректно настроены необходимые переменные окружения. Например, проверьте, что переменная PATH включает путь к Git, если он установлен не в стандартной директории.

Почему происходит ошибка:

Ошибки возникают из-за того, что 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 процессов, что в свою очередь способствует качественному управлению проектами и уменьшению времени на отладку.

Оцените материал
Добавить комментарий

Капча загружается...