首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“未知标志:--平台”使用Jenkins管道中的"docker buildx build“

“未知标志:--平台”使用Jenkins管道中的"docker buildx build“
EN

Stack Overflow用户
提问于 2022-03-30 01:52:16
回答 1查看 2.5K关注 0票数 2

我在使用RedHat-7系统。我想让Jenkins管道公司实施Devops。

但是当我使用docker buildx build特性时,詹金斯说“未知标志:-平台”。

我的詹金斯的码头形象:

代码语言:javascript
复制
docker run -d \
    --name jenkins \
    --restart=unless-stopped \
    -u 0 \
    --network jenkins \
    -p 8082:8080 \
    -p 50000:50000 \
    -v /home/ngtl/jenkins-data:/var/jenkins_home \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v $(which docker):/usr/bin/docker \
    -e TZ=Asia/Shanghai \
    -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai \
    jenkins/jenkins:lts-jdk11

这是我的管道:

代码语言:javascript
复制
pipeline {
  agent any

  tools {
      maven 'mvn'
  }

  environment {
    DOCKER_CREDENTIALS = credentials('clouds3n-ldap')
  }

  stages {
    stage('Unit Test') {
      steps {
        withMaven(maven: 'mvn') {
          sh 'mvn clean test -Dmaven.test.failure.ignore=false'
        }
      }
    }

    stage('Maven Build') {
      steps {
        withMaven(maven: 'mvn') {
          sh 'mvn package -Dmaven.test.skip -DskipTests'
        }
      }
    }

    stage('Sonar Scan') {
      steps {
        withSonarQubeEnv('sonarqube') {
          withMaven(maven: 'mvn') {
            script {
              def allJob = env.JOB_NAME.tokenize('/') as String[]
              def projectName = allJob[0]
              sh "mvn sonar:sonar -Dsonar.branch.name=${env.GIT_BRANCH} -Dsonar.projectKey=${projectName} -Dsonar.projectName=${projectName} -Dmaven.test.skip -DskipTests"
            }
          }
        }
      }
    }

    stage('Sonar Gate') {
      steps {
        timeout(time: 30, unit: 'MINUTES') {
          waitForQualityGate abortPipeline: true
        }
      }
    }

    stage('Docker Build') {
      steps {
        script {
          def allJob = env.JOB_NAME.tokenize('/') as String[]
          def projectName = allJob[0]
          final noSuffixProjectName = projectName.substring(0, projectName.lastIndexOf('-'))
          sh "echo ${DOCKER_CREDENTIALS_PSW} | docker login -u ${DOCKER_CREDENTIALS_USR} 192.168.2.157:8881 --password-stdin"
          sh "docker buildx build --platform linux/amd64 -t 192.168.2.157:8881/uni/${noSuffixProjectName}:dev-${BUILD_NUMBER} -f ${env.JENKINS_HOME}/k8s-config/docker/BackendDockerfile . --push"
        }
      }
    }

    stage('Maven Deploy') {
      steps {
        withMaven(maven: 'mvn') {
          sh 'mvn deploy -Dmaven.test.skip -DskipTests'
        }
      }
    }

    stage('K8s Apply') {
      steps {
        echo 'not support now, comming soon'
      }
    }
  }

    post {

      always {
        sh 'docker logout 192.168.2.157:8881'
      }

      cleanup {
        cleanWs()
      }

      success {
        echo 'Finished!'
      }
    }
}

当到达“码头建设”阶段时,Jenkins会抛出错误:

代码语言:javascript
复制
Warning: A secret was passed to "sh" using Groovy String interpolation, which is insecure.
         Affected argument(s) used the following variable(s): [DOCKER_CREDENTIALS_PSW]
         See https://jenkins.io/redirect/groovy-string-interpolation for details.
+ echo ****
+ docker login -u **** 192.168.2.157:8881 --password-stdin
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[Pipeline] sh
+ docker buildx build --platform linux/amd64 -t 192.168.2.157:8881/uni/cqu:dev-11 -f /var/jenkins_home/k8s-config/docker/BackendDockerfile . --push
unknown flag: --platform
See 'docker --help'.

为什么Jenkins pipleline不能使用“--平台”选项?如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2022-05-24 13:42:33

确保你的詹金斯代理(奴隶)有最近版本的码头。自Docker 18.06以来,BuildKit就被集成到了码头建设中。

在我的例子中,18.09.6版不起作用。但是,20.10是好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71670637

复制
相关文章

相似问题

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