在本地Jenkins多分支管道中找不到Docker命令

Jad*_*dda 7 jenkins docker jenkins-pipeline

我有BookStore Spring Boot项目,需要通过Jenkins进行部署。安装在我的本地计算机(macOS)中的Docker和创建的Jenkinsfile如下

pipeline 
{
     agent 
     {
         docker
          {
            image 'maven:3-alpine'
            //This exposes application through port 8081 to outside world
            args '-u root -p 8081:8081 -v /var/run/docker.sock:/var/run/docker.sock  '
         }
    } 
    stages 
     {
        stage('Build') 
         {
              steps 
              {
                sh 'mvn -B -DskipTests clean package'
              }
          }

        stage('Test') 
        {
            steps {
                //sh 'mvn test'
                sh 'echo "test"'
            }
            post {
                always {
                    //junit 'target/surefire-reports/*.xml'
                    sh 'echo "test"'
                }
            }
        }

        stage('Deliver for development')
        {
                    when {
                        branch 'development'
                    }
                    steps {
                        sh './jenkins/scripts/deliver-for-development.sh'
                        input message: 'Finished using the web site? (Click "Proceed" to continue)'
                    }
        }

        stage('Deploy for production')
        {
            when {
                branch 'production'
            }
            steps {
                sh './jenkins/scripts/deploy-for-production.sh'
                input message: 'Finished using the web site? (Click "Proceed" to continue)'
            }
        }

        stage('Deliver') {
        when {
              branch 'production'
           }
            steps {
                sh 'bash ./jenkins/deliver.sh'
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

我在詹金斯创建了多分支管道,当我尝试运行它时,出现以下错误

/Users/Shared/Jenkins/Home/workspace/BookStore_master-VPWQ32ZZPV7CVOXNI4XOB3VSGH56MTF3W34KXKZFJKOBMSGLRZQQ@tmp/durable-70dd5a81/script.sh: line 2: docker: command not found

script returned exit code 127
Run Code Online (Sandbox Code Playgroud)

我觉得这很奇怪,因为docker在本地计算机中可用,并且还配置了“ 全局工具配置”部分,并提供了适当的详细信息,如下所示。我调查了几篇文章,到目前为止,没有一种解决方案有效。

全局工具配置

小智 5

我在 Mac 上遇到了同样的问题,以下答案对我有所帮助。

docker:找不到命令(mac mini)仅发生在 jenkins shell 步骤中,但可以在命令提示符下工作

解决方案是将以下行添加到 /usr/local/Cellar/jenkins-lts/2.176.3/homebrew.mxcl.jenkins-lts.plist 文件中,以便 Jenkins 能够从主机找到 docker 命令。

<key>EnvironmentVariables</key>
    <dict>
      <key>PATH</key>
      <string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Docker.app/Contents/Resources/bin/:/Users/Kh0a/Library/Group\ Containers/group.com.docker/Applications/Docker.app/Contents/Resources/bin</string>
    </dict>
Run Code Online (Sandbox Code Playgroud)


Jad*_*dda 0

我能够通过从全局工具配置部分检索 Docker 和 Maven 值并将它们添加到环境 PATH 来解决此问题,如下所示

更新了Jenkinsfile

node {

    stage('Initialize')
    {
        def dockerHome = tool 'MyDocker'
        def mavenHome  = tool 'MyMaven'
        env.PATH = "${dockerHome}/bin:${mavenHome}/bin:${env.PATH}"
    }

    stage('Checkout') 
    {
        checkout scm
    }

      stage('Build') 
           {
            sh 'uname -a'
            sh 'mvn -B -DskipTests clean package'  
          }

        stage('Test') 
        {
            //sh 'mvn test'
            sh 'ifconfig' 
        }

        stage('Deliver') 
          {
                sh 'bash ./jenkins/deliver.sh'
        }
}
Run Code Online (Sandbox Code Playgroud)