首页 > 解决方案 > 如何在 Jenkins Pipeline 上构建 Docker 映像,而不更改底层 Jenkins VM 的权限?

问题描述

我想使用 Jenkins Pipeline 来构建、推送和部署我的 Docker 映像。

我明白了:

Got permission denied while trying to connect to the 
Docker daemon socket at unix:///var/run/docker.sock

StackOverflow 上的其他问题建议sudo usermod -a -G docker jenkins,然后重新启动 Jenkins,但我无法访问运行 Jenkins 的机器——无论如何,围绕 Docker 构建的 Jenkins Pipeline 无法运行基本的 Docker 命令似乎很奇怪。

如何构建我的 Docker?

pipeline {
    agent  any
    stages {    
         stage('deploy') {
            agent {
                  docker {
                    image 'google/cloud-sdk:latest'
                    args '-v /var/run/docker.sock:/var/run/docker.sock'
                  }
            }
            steps {    
                 script {    
                    docker.build  "gcr.io/myporject/mydockerimage:1"
                } 
             }
          }
    }
}

标签: dockerjenkinsjenkins-pipeline

解决方案


显示的管道定义正在尝试在 docker 容器 (google/cloud-sdk:latest) 内执行 docker 构建。相反,您应该执行以下操作,因为主机上的 jenkins 用户有权在主机上执行 docker 命令。

pipeline {
  agent  any
  stages {
    stage('deploy') {
      steps {    
        script {    
          docker.build  "gcr.io/myporject/mydockerimage:1"
        } 
      }
    }
  }
}

jenkins 在机器上单独安装和配置时,在没有适当权限的情况下无法执行 docker 命令,这并不奇怪。


推荐阅读