Доступ по SSH Git с использованием Gradle Release Plugin

Используя Jenkins Pipeline, я изменил URL-адрес репозитория с http на ssh git access. После этого работа больше не работает (до этого все работало правильно).

Внизу под бревнами:

:xxxxxx:checkUpdateNeeded
Running [git, remote, update] produced an error: [Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
error: Could not fetch origin]
:xxxxxx:checkUpdateNeeded FAILED
:release FAILED
Release process failed, reverting back any changes made by Release Plugin.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':checkUpdateNeeded'.
> Failed to run [git remote update] - [Fetching origin
  ][Permission denied (publickey).
  fatal: Could not read from remote repository.

  Please make sure you have the correct access rights
  and the repository exists.
  error: Could not fetch origin
  ]

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Ключ SSH RSA работает правильно, потому что: - я правильно настроил на нашем сервере Bitbucket для чтения / записи в этом репо - я добавил ключ в ssh-agent - я могу клонировать и фиксировать напрямую с сервера, где находится задание jenkins казнены.

Это раздел файла сборки Gradle:

....
release {
    versionPropertyFile="${rootDir}/gradle.properties"
    failOnCommitNeeded=false
    git{
        requireBranch="releases/.*|master"
    }
    tagTemplate = 'T-'+new Date().format('yy.MM')+'-${version}'
}


task publishRelease(type: GradleBuild) {
    tasks = ['publishMavenJavaPublicationToReleaseRepository']
    startParameter.projectProperties = [nexusUser: nexusUser, nexusPassword: nexusPassword]
}
....

3 ответа

Решение

Я могу клонировать и фиксировать прямо с сервера, где выполняется задание jenkins.

Тогда Дженкинс тоже должен при условии:

  • выполняется с тем же пользователем
  • и ключ SSH является ключом по умолчанию ~/.ssh/id_rsa.

Если какое-либо из этих двух условий не выполняется, вам необходимо указать точный путь к закрытому ключу с помощью плагина учетных данных SSH Jenkins.

Используйте приведенный ниже сценарий в команде Shell перед выполнением задачи Gradle, которая запускает команду git для обновления репозитория.

Здесь GITHUB_SSH_KEY — это переменная среды, введенная из учетных данных с использованием параметра «Закрытый ключ пользователя SSH».

      cat "${GITHUB_SSH_KEY}" > ./build/sshkey
cd build
chmod 600 sshkey    
eval `ssh-agent -s`
ssh-add sshkey
cd ..

git config core.sshCommand "ssh -i ./build/sshkey -o 'IdentitiesOnly yes'"
git config --global user.email "commiter@jenkins.com"
git config --global user.name "flastname"

Завершите призыв к оценке с помощью ssh-агента:

sshagent(credentials: ['id-of-private-key-defined-in-jenkins']) {
   withGradle {
     sh 'gradle release -Prelease.useAutomaticVersion=true'
   }
}

Это сделает закрытый ключ доступным для вызовов Git внизу.

Другие вопросы по тегам