小编典典

用于Jenkins管道的Docker插件-uid 1005不存在用户

jenkins

我正在尝试从Jenkins管道中的Docker容器内部执行SSH命令。我正在使用CloudBees
Docker管道插件
来旋转容器并执行命令,并使用SSH代理插件来管理我的SSH密钥。这是我的Jenkinsfile的基本版本:

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

SSH命令运行时,出现以下错误:

+ ssh -vvv -o StrictHostKeyChecking=no ubuntu@example.org uname -a
No user exists for uid 1005

阅读 424

收藏
2020-07-25

共1个答案

小编典典

我仔细查看了日志,发现Docker Pipeline插件通过将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 ubuntu@example.org uname -a"
      }
    }
  }
}
2020-07-25