Доступ к git-credential-store в jenkins-pipe больше не работает - PullRequest
0 голосов
/ 05 декабря 2018

Уже несколько дней у моего командного CI-сервера (Jenkins 2.7.72 - неизменяемый) возникают проблемы с выполнением команд git, требующих аутентификации (например, clone) через сценарий оболочки в конвейере jenkins.

ВклСервер GIT-учетные данные хранятся в файле .git-credential.Когда я пытаюсь клонировать репозиторий в стандартной командной строке Linux, он работает нормально, и меня не спрашивают учетные данные.Таким образом, учетные данные и конфигурация сервера / сети кажутся нормальными.

Если я запускаю ту же команду в конвейере jenkins, она завершается неудачно с

stage('Clone') {
  log.info 'Clone repository..'

  sh 'git clone https://org.internal.host.de/scm/git/path/to/Repositoryname'
}


[workspace] Running shell script
+ git clone https://org.internal.host.de/scm/git/path/to/Repositoryname
Cloning into 'Repositoryname'...
fatal: could not read Username for 'https://org.internal.host.de': No such device or address

В соответствии с другими SO-потоками это означает, чтоСценарий не может получить доступ к файлу хранилища.К сожалению, большинство потоков в сочетании с Github, что не так для нас.Мы используем внутренние серверы организации для CI и GIT.

При использовании встроенных учетных данных jenkins (например, с помощью SharedLib или клонирования репозитория с помощью плагина GIT) это работает нормально - еще один совет, который заставляет меня думать, чтоpipleline больше не может получить доступ к файлу git-credentials.

Был ли изменен CI-сервер?Я не знаю.Моя команда и я не изменили конфигурацию.Если сетевые администраторы изменили бы то, что они не говорят, но, поскольку клонирование само по себе работает, я не думаю, что это какая-либо проблема.Единственное «видимое» отличие состоит в том, что ноябрь ушел, а декабрь наступил ... 30 ноября работа все еще работала нормально, но на следующем запуске 3 декабря она провалилась.

Есть предложения?

edit: После ответа Rich Duncan я опубликую второй пример, чтобы прояснить мою проблему

Мой конвейер клонирует репозиторий с помощью git-pipeline-plugin.После этого я хочу выполнять GIT-команды вручную, например fetch.

stage('Clone') {
  log.info 'Clone repository..'

  git(
    branch: 'master',
    credentialsId: 'myGitCredentials',
    url: 'https://org.internal.host.de/scm/git/path/to/Repositoryname'
  )    

  // Fetch all Tags
  sh 'git fetch --all --tags --prune'
}

Поскольку команда git на шаге оболочки (sh 'git fetch ...') требует учетных данных, я сохранил учетные данные в git-credentials-хранить.Еще несколько дней назад это работало нормально.Теперь он разрывается, так как конвейер не может прочитать имя пользователя для хоста.

1 Ответ

0 голосов
/ 05 декабря 2018

Без каких-либо помощников git хочет запросить у вас учетную информацию.Если вы используете шаг git , задокументированный в справочнике шагов конвейера Вы можете определить учетные данные в Jenkins и передать идентификатор учетной записи шагу, и ваше хранилище будет клонировано в рабочую область.

На основеваш обновленный пример - если вы посмотрите на команды git, созданные плагином git, вы увидите, что он не оставляет информацию о полномочиях нигде, где бы ее можно было использовать снова - поэтому шаг sh с git fetch не будет иметьучетные данные доступны для правильной работы.Я предлагаю:

  1. Рассмотрим использование общего шага SCM (который вы можете почувствовать с помощью инструмента сниппета) и посмотрите, можете ли вы настроить его так, чтобы он также извлекал все теги.
  2. Изучите использование withCredentials для передачи информации о полномочиях на шаг sh.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...