checkout scm
由于两个问题,我在管道中使用时遇到错误。
设置:
- 私有 Kubernetes 集群 - 1 个控制器,2 个工作器,在 Ubuntu 20.04 虚拟机上
- Jenkins 在 Kubernetes pod 中运行
- Kubernetes 插件实例化 Jenkins 构建代理
- 集群外控制器 VM 上的私有 GIT 服务器,ssh 访问
- 在 Jenkins 凭证中配置的 GIT 的 ssh 私钥
- Jenkins 项目 'hello' 配置为使用此私有 GIT 和关联的 ssh 密钥
- Jenkinsfile(管道)构建
我想checkout scm
在 Jenkinsfile 中使用一个简单的步骤。
问题 1构建失败,Host key verification failed.
因为 Kubernetes 代理 pod 的known_hosts
.
问题 2如果我强制控制器证书进入known_hosts
(例如,将 echo 硬编码到 Jenkinsfile 中,然后添加一个git ls-remote
步骤),它会失败,Permission denied
因为代理 pod 中不存在配置的 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://git@kube-master.cluster.dev:/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://git@kube-master.cluster.dev/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.