2017-02-22 115 views
3

我试图从Jenkins管道中的Docker容器内部执行SSH命令。我使用CloudBees Docker Pipeline Plugin来启动容器并执行命令,并使用SSH Agent Plugin来管理我的SSH密钥。这里是我的Jenkinsfile的基本版本:Jenkins管道的Docker插件 - 没有用户存在uid 1005

node { 
    step([$class: 'WsCleanup']) 
    docker.image('node').inside { 
    stage('SSH') { 
     sshagent (credentials: [ 'MY_KEY_UUID' ]) { 
     sh "ssh -vvv -o StrictHostKeyChecking=no [email protected] uname -a" 
     } 
    } 
    } 
} 

当SSH命令运行时,我得到这个错误:

+ ssh -vvv -o StrictHostKeyChecking=no [email protected] uname -a 
No user exists for uid 1005 

回答

3

我通过日志梳理,实现了码头工人流水线插件会自动告诉容器与通过1个UID作为命令行参数记录在主机上的同一个用户运行:

$ docker run -t -d -u 1005:1005 [...] 

我决定检查什么在主机存在用户和包含呃在每个环境中运行cat /etc/passwd。果然,每个用户的名单都不一样。 1005是主机上的jenkins用户,但该容器中没有UID。为了解决这个问题,我把/etc/passwd从主机上旋转到容器上:

node { 
    step([$class: 'WsCleanup']) 
    docker.image('node').inside('-v /etc/passwd:/etc/passwd') { 
    stage('SSH') { 
     sshagent (credentials: [ 'MY_KEY_UUID' ]) { 
     sh "ssh -vvv -o StrictHostKeyChecking=no [email protected] uname -a" 
     } 
    } 
    } 
}