2017-02-22 114 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" 
     } 
    } 
    } 
}