可以't将文件从jenkins推送到远程主机(docker镜像)



我让Jenkins在ubuntu机器上的docker上运行。我使用下面的脚本首先将一个脚本从jenkins(docker镜像(复制到远程主机,然后执行它来修改一些配置文件。

node {
properties([
parameters([
string(name: 'version', defaultValue: '', description: 'Enter the version in x.y.z format')
])
]) 
def remote = [:]
remote.name = 'testPlugin'
remote.host = 'x.x.x.x'
remote.allowAnyHosts = true
withCredentials([
sshUserPrivateKey(credentialsId: 'ssh-credentials', usernameVariable: 'ssh-user', passphraseVariable: 'ssh-pass')
]) {
remote.user = ssh-user
remote.password = ssh-pass
stage('testPlugin') {
sshPut remote: remote, from: 'myscript.sh', into: '.'
sshScript remote: remote, script: "myscript.sh ${version}"               
}
}
}

我可以通过登录jenkins运行的docker映像来查看myscript.sh文件。然而,当我执行上面的代码时,我会得到以下错误:

java.lang.IllegalArgumentException:/var/jenkins_home/workspace/Cloud-gating/myscript.sh不存在

任何想法,为什么詹金斯不能看到其工作区内的文件。文件(myscript.sh(的所有权是jenkins。它是执行Jenkins作业的同一用户。

问题实际上是这个脚本的可访问性。

请检查文件是否真的存在:

def exists = fileExists 'myscript.sh'
if (exists) {
echo 'Yes'
} else {
echo 'No'
}

如果没有,请检查您是否与映射到容器的目录混淆,检查其真实路径和内容:

//inside your pipeline
sh 'pwd' 
sh 'ls'

检查哪些主机路径映射到容器内的哪些路径:

docker inspect -f '{{ .Mounts }}' YOUR_CONTAINER_NAME

最后但同样重要的是:您可以跳过在脚本中使用sshPut,sshScript本身复制文件并远程执行:

stage('testPlugin') {
sshScript remote: remote, script: "myscript.sh ${version}"               
}

干杯。

最新更新