Docker: 在 jenkinsfile 中 运行 cmds 时找不到

Docker: not found when running cmds in jenkinsfile

我是 docker 和 CI 的新手。我正在尝试创建一个 jenkinsfile 来构建和测试我的应用程序,然后使用我编写的 Dockerfile 构建一个 docker 图像,然后将其推送到 AWS ECR。我坚持的步骤是使用 docker 构建图像,我收到错误消息 docker: not found。我下载了docker插件,并在全局工具配置选项卡中进行了配置。我没有正确地将它添加到工具中吗?

还有一个 post wear 你可以使用 kubernetes 来做,但是 kubernetes 不再支持 docker.

我如何在全局工具配置中配置 docker 的图片: global tool config

错误

/var/jenkins_home/workspace/client-pipeline_feature-jenkins@tmp/durable-41220eb0/script.sh: 1: /var/jenkins_home/workspace/client-pipeline_feature-jenkins@tmp/durable-41220eb0/script.sh: docker: not found

error with permission to sock

def gv
containerVersion = "1.0"
appName = "foodcore"
imageName = appName + ":" + version
pipeline {
    agent any
    environment {
        CI = 'true'
    }
    tools {
      nodejs "node"
      docker "docker"
    }
    stages {
        stage("init") {
            steps {
                script {
                   gv = load "script.groovy"
                   CODE_CHANGES = gv.getGitChanges()
                }
            }
        }
        stage("build frontend") {
            steps {
                dir("client") {
                    sh 'npm install'
                }
            }
        }
        stage("build backend") {
            steps {
                dir("server") {
                    sh 'npm install'
                }
            }
        }
        stage("test") {
            when {
                expression {
                    script {
                        CODE_CHANGES == false
                    }
                }
            }
            steps {
                dir("client") {
                    sh 'npm test'
                }
            }
        }
        stage("build docker image") {
            when {
                expression {
                    script {
                       env.BRANCH_NAME.toString().equals('Main') && CODE_CHANGES == false
                    }
                }
            }
            steps {
                sh "docker build -t ${imageName} ."
            }
        }
        stage("push docker image") {
            when {
                expression {
                    env.BRANCH_NAME.toString().equals('Main')
                }
            }
            steps {
                sh 'aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin repoURI'
                sh 'docker tag foodcore:latest ...repoURI
                sh 'docker push repoURI'
            }
        }
    }   
}

Docker 应该在服务器上安装 Jenkins 是 运行。 Jenkins 提供的 docker 插件就像一个为管道脚本生成一些片段的工具。安装和配置该工具不会安装 docker 守护程序。请检查 docker 是否安装在 OS 上。

使用echo hello world使...

正如我们在讨论帖中看到的,您在 docker.sock 上的权限开始被拒绝。

如果重启系统或docker服务,

docker.sock权限将丢失。

要使其持久化,请设置一个 cron 以在每次重新启动后更改所有权

@reboot chmod 777 /var/run/docker.sock

并且当您重新启动 docker 时,确保 运行 下面的命令

chmod 777 /var/run/docker.sock

或者您也可以为其设置一个 cron,每 5 分钟执行一次。

要在 Jenkins 构建中使用 docker,有两种方法。

  1. 按照上述解决方案中的说明使用 Jenkins docker 插件。
  2. 或者在 Jenkins 容器中安装 docker 本身并挂载 docker.sock 文件。