首页 > 解决方案 > Docker:在 jenkinsfile 中运行 cmds 时找不到

问题描述

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

还有另一个帖子磨损,您可以使用 kubernetes 来做到这一点,但是 kubernetes 不再支持 docker。

我如何在全局工具配置中配置 docker 的图像: 全局工具配置

错误

/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

袜子许可错误

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'
            }
        }
    }   
}

标签: dockerjenkinsjenkins-pipelinejenkins-plugins

解决方案


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


推荐阅读