Я получаю ошибки при использовании checkout scm
в конвейере из-за двух проблем.
Настройка:
- Частный кластер Kubernetes - 1 контроллер, 2 рабочих на виртуальных машинах Ubuntu 20.04
- Дженкинс работает в модулях Kubernetes
- Плагин Kubernetes для создания экземпляров агентов сборки Jenkins
- Частный сервер GIT на контроллере ВМ вне кластера, доступ по ssh
- закрытый ключ ssh для GIT, настроенный в учетных данных Jenkins
- Проект Jenkins 'hello' настроен на использование этого закрытого GIT и связанного с ним ключа ssh
- Jenkinsfile (конвейер) для сборки
Я хочу использовать простой checkout scm
шаг в файле Jenkins.
Проблема 1 Сборка завершается неудачно с Host key verification failed.
, потому что модуль агента Kubernetes не имеет сервера GIT в своем known_hosts
.
Проблема 2. Если я принудительно ввожу сертификат контроллера в known_hosts
(например, жестко закодирую эхо в Jenkinsfile, а затем добавлю шаг git ls-remote
), он завершится неудачно с Permission denied
, потому что настроенный закрытый ключ ssh отсутствует. в модуле агента.
Я нашел обходной путь для обоих:
podTemplate(
...
{
node(POD_LABEL) {
stage('Checkout') {
withCredentials([sshUserPrivateKey(
credentialsId: 'private_git',
keyFileVariable: 'PRIVATE_GIT_KEY',
passphraseVariable: '',
usernameVariable: ''
)]) {
sh 'mkdir -p ~/.ssh'
sh 'cp $PRIVATE_GIT_KEY ~/.ssh/id_rsa'
sh '/usr/bin/ssh-keyscan -t rsa kube-master.cluster.dev >> ~/.ssh/known_hosts'
sh 'chown -R $USER:$USER ~/.ssh'
sh '/usr/bin/git ls-remote ssh://[email protected]:/git/hello.git'
}
checkout scm
}
...
}
}
Что мне нужно, чтобы избежать этого обходного пути и просто использовать checkout scm
так, как задумано?
Пример журнала отказов:
Running on build-pod-xdh86-53wh7 in /home/jenkins/agent/workspace/hello
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Checkout)
[Pipeline] checkout
Selected Git installation does not exist. Using Default
The recommended git tool is: NONE
using credential private_git
Cloning the remote Git repository
ERROR: Error cloning remote repo 'origin'
hudson.plugins.git.GitException: Command "git fetch --tags --force --progress -- ssh://[email protected]/git/hello.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
stdout:
stderr: Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.