【问题标题】:Jenkins Declarative pipeline docker: command not foundJenkins 声明式管道泊坞窗:找不到命令
【发布时间】:2024-01-16 04:15:01
【问题描述】:

我已经在我的机器上本地安装了 Jenkins。我从我的 github 存储库中提取了一些源代码,该存储库在根目录中有一个 Docker 文件。我想构建和 docker 映像并将其推送到 docker hub,但我的构建失败并显示以下消息...

docker build -f myapp-web:latest . \n
/Users/Shared/Jenkins/Home/workspace/MyApp@tmp/durable-ee9851e9/script.sh: line 1: docker: command not found 
pipeline {

    agent any

    tools {
        maven 'maven_3.6.1'
        jdk 'jdk8'
    }

    stages {
        stage('Build') {
            steps {
                withMaven(maven: 'maven_3.6.1', mavenSettingsConfig: '5d7a8237-6d6a-4189-a907-518900dc7755') {
                    sh "mvn clean install "
                }
            }
        }
        stage('Build Image') {
            steps {
                script {
                    sh 'docker build -f myapp-web:latest .'
                }
            }
        }
        stage('Deploy Image') {
            steps {
                withDockerRegistry([credentialsId: "docker-hub", url: ""]) {
                    sh 'docker push myapp-web:latest'
                }
            }
        }
    }
}

Docker 在我的本地机器上安装并运行,Jenkins 配置了以下插件 码头工人管道 Docker 插件

任何想法都非常感谢

【问题讨论】:

  • 你有没有通过 jenkins 检查$PATH 的值?也许它不包括 docker 二进制文件所在的路径。
  • 我还没有通过 Jenkins 设置 $PATH 变量...你说的是 Jenkins -> 管理 Jenkins -> 配置系统 -> 全局属性 -> 环境变量
  • Iv 将 environment{ PATH = "/usr/local/bin:$PATH" } 添加到脚本中,似乎已经解决了上述错误,但现在我得到“尝试连接时拒绝权限到 unix:///var/run/docker.sock: Post"的 Docker 守护进程套接字"
  • 所以现在下一步是将用户 jenkins(或管道中使用的任何用户)添加到 docker 组,这样他就可以使用 docker 命令,使用 usermod -aG docker $USER
  • 非常感谢!好看吗???????

标签: docker jenkins-pipeline dockerhub


【解决方案1】:

如果你通过管道获取docker: command not found,尽管它已经安装在运行管道的同一节点上,你需要确保管道正在读取正确的$PATH环境,docker二进制文件应该存在。

关于你提到的第二个问题

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

您需要将在管道中使用的用户添加到 docker 组,以便它可以使用以下命令运行 docker 命令:

usermod -aG docker $USER

【讨论】:

  • 尽管 Iv 将您的答案标记为正确。我正在使用 macOS 并且找不到 usermod 命令。我试图找出与 mac 上的 usermod -aG docker $USER 等价的东西。首先,我在 Jenkins 文件中记录了 $USER 并看到它是 Jenkins。然后我创建了一个组 docker 并添加了该用户。但我仍然收到权限错误
  • 要编辑用户组,试试这个可能会有所帮助:superuser.com/q/214004/233127 你也可能需要在修改后重新启动 Jenkins 或 docker