Доступ по 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 внизу.