2017-02-22 16 views
3

JenkinsパイプラインのDockerコンテナ内からSSHコマンドを実行しようとしています。私はCloudBees Docker Pipeline Pluginを使用してコンテナを回転させてコマンドを実行し、SSH Agent Pluginを使用してSSHキーを管理しています。ここに私のJenkinsfileの基本的なバージョンです:JenkinsパイプラインのDockerプラグイン - ユーザーが存在しません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

私はログをコーマとドッカーパイプラインプラグインが自動的にコンテナを語っている実現しましたコマンドライン引数として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" 
     } 
    } 
    } 
} 
関連する問題