首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在本地Jenkins多分支管道中找不到Docker命令

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

Stack Overflow用户
提问于 2018-06-18 20:07:02
回答 9查看 42.1K关注 0票数 15

我有一个需要通过Jenkins部署的BookStore Spring项目。安装在本地计算机(macOS)和Jenkinsfile中的Docker,如下所示

代码语言:javascript
运行
复制
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'
            }
        }
    }

}

我在Jenkins中创建了多分支管道,当我尝试运行它时,我得到了以下错误:

代码语言:javascript
运行
复制
/Users/Shared/Jenkins/Home/workspace/BookStore_master-VPWQ32ZZPV7CVOXNI4XOB3VSGH56MTF3W34KXKZFJKOBMSGLRZQQ@tmp/durable-70dd5a81/script.sh: line 2: docker: command not found

script returned exit code 127

这在我看来很奇怪,因为在本地机器中可以获得对接器,而且还配置了Global Tool Configuration部分,并提供了如下所示的适当详细信息。我查看了几个帖子,但到目前为止,这些解决方案都没有奏效。

EN

Stack Overflow用户

发布于 2018-09-13 15:33:07

由于这个线程https://stackoverflow.com/a/50029962/6943587,我也遇到了同样的问题并得以解决。

您需要指定码头标签,也就是哪个代理拥有码头。据我所知,有两种方法可以做到这一点。

(选项1-首选)在Jenkinsfile中设置码头标签

将代理设置为带有码头代理标签的码头映像。

代码语言:javascript
运行
复制
// Jenkinsfile

pipeline {
  // Assign to docker agent(s) label, could also be 'any'
  agent {
    label 'docker' 
  }

  stages {
    stage('Docker node test') {
      agent {
        docker {
          // Set both label and image
          label 'docker'
          image 'node:7-alpine'
          args '--name docker-node' // list any args
        }
      }
      steps {
        // Steps run in node:7-alpine docker container on docker agent
        sh 'node --version'
      }
    }

    stage('Docker maven test') {
      agent {
        docker {
          // Set both label and image
          label 'docker'
          image 'maven:3-alpine'
        }
      }
      steps {
        // Steps run in maven:3-alpine docker container on docker agent
        sh 'mvn --version'
      }
    }
  }
} 

(选项2)在配置中设置坞标

根据Jenkins文档这里,在Jenkins配置中的“管道模型定义”下设置“码头标签”。这将只在带有此标签的代理上运行管道构建。然后你可以像这样创建你的管道..。

代码语言:javascript
运行
复制
// Jenkinsfile

pipeline {
  // "Top-level" agent is assigned to docker agents via Jenkins pipeline configuration
  agent none

  stages {
    stage('Docker node test') {
      agent {
        docker {
          image 'node:7-alpine'
          args '--name docker-node' // list any args
        }
      }
      steps {
        // Steps run in node:7-alpine docker container on docker agent
        sh 'node --version'
      }
    }
    
    stage('Docker maven test') {
      agent {
        docker {
          image 'maven:3-alpine'
        }
      }
      steps {
        // Steps run in maven:3-alpine docker container on docker agent
        sh 'mvn --version'
      }
    }
  }
}

希望这能有所帮助

选项1比选项2更可取,因为Jenkins文件配置在哪台机器上运行码头代理,而不依赖将来可以删除或编辑的Jenkins管道配置。

票数 4
EN
查看全部 9 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50916740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档