Docker镜像构建成功但上传失败,需修复警告并上传至Amazon ECR
解决Docker镜像上传Amazon ECR时的StageNameCasing警告问题
问题根源
你遇到的StageNameCasing警告并非来自Jenkins Pipeline的stage定义,而是来自构建镜像时使用的多阶段Dockerfile。报错提示的BUILD_IMAGE是Dockerfile中定义的构建阶段名称,ECR要求阶段名使用小写格式。
解决方案
找到Jenkins Pipeline中指定的Dockerfile路径./Docker-files/app/multistage/Dockerfile,将其中大写的阶段名BUILD_IMAGE改为小写(比如build_image),同时同步修改所有引用该阶段的代码。
修改示例
原Dockerfile中的阶段定义:
FROM maven:3.8.6-openjdk-17 AS BUILD_IMAGE # 构建步骤...
修改后:
FROM maven:3.8.6-openjdk-17 AS build_image # 构建步骤...
如果Dockerfile中后续有引用该阶段的代码,也要同步改为小写:
COPY --from=build_image /path/to/artifact /target/path
验证步骤
- 保存修改后的Dockerfile
- 重新运行Jenkins Pipeline,触发镜像构建与上传
- 检查是否仍有StageNameCasing警告,确认镜像成功上传至ECR
你的Jenkins Pipeline代码参考
def COLOR_MAP = [ 'SUCCESS': 'good', 'FAILURE': 'danger', ] pipeline { agent any tools { maven 'MAVEN3' jdk 'OracleJDK17' } environment { registryCredential = 'ecr:us-west-2:awscreds' appRegistry = "819764105945.dkr.ecr.us-west-2.amazonaws.com/vprofileappimg" vprofileRegistry = "https://819764105945.dkr.ecr.us-west-2.amazonaws.com" } stages { stage('Fetch Code'){ steps { git branch: 'docker', url: 'https://github.com/infratute/baseline-vprofile-project-complete.git' } } stage('Build') { steps { sh 'mvn install -DskipTests' } post{ success { echo "Now Archiving" archiveArtifacts artifacts: '**/*.war' } } } stage('UNIT TEST') { steps { sh 'mvn test' } } stage('Checkstyle Analysis') { steps { sh 'mvn checkstyle:checkstyle' } } stage('Sonar Analysis') { environment { scannerHome = tool 'sonar4.7' } steps { withSonarQubeEnv('sonar') { sh '''${scannerHome}/bin/sonar-scanner -Dsonar.projectKey=vprofile \ -Dsonar.projectName=vprofile \ -Dsonar.projectVersion=1.0 \ -Dsonar.sources=src/ \ -Dsonar.java.binaries=target/test-classes/com/visualpathit/account/controllerTest/ \ -Dsonar.junit.reportsPath=target/surefire-reports/ \ -Dsonar.jacoco.reportsPath=target/jacoco.exec \ -Dsonar.java.checkstyle.reportPaths=target/checkstyle-result.xml''' } timeout(time: 3, unit: 'MINUTES') { waitForQualityGate abortPipeline: true } } } stage('Build App Image') { steps { script { dockerImage = docker.build( appRegistry + ":$BUILD_NUMBER", "./Docker-files/app/multistage/") } } } stage('Upload App Image') { steps{ script { docker.withRegistry( vprofileRegistry, registryCredential ) { dockerImage.push("$BUILD_NUMBER") dockerImage.push('latest') } } } } } }
内容的提问来源于stack exchange,提问作者Darvin xavier
相关产品推荐
相关产品推荐

