首页 > 解决方案 > Jenkins:从 maven 中提取版本和 artifactid 以获得 docker 图像名称/标签

问题描述

我正在使用 spring boot maven 插件来生成我的 docker 图像。我在我的 pom 文件中将图像名称定义为动态的。格式:my-registry.com/prefix/${project.artifactId}:${project.version}

如何获取生成的图像的动态名称?我需要它来进行进一步的构建步骤(部署)

我的构建管道如下所示:

pipeline {
    agent {
        docker {
            image 'maven:3-jdk-11' 
            args '-v /root/.m2:/root/.m2' 
        }
    }

    stages {
        stage('Clone sources') {
            steps {
                git branch: 'master',
                    credentialsId: 'xxxxx',
                    url: 'xxxxxx'
            }
        }
        stage('Build') {
            steps {
                sh "mvn -Dmaven.test.failure.ignore=true clean install"
            }

            post {
                success {
                    junit '**/target/surefire-reports/TEST-*.xml'
                    archiveArtifacts 'myproject-server/target/*.jar'
                }
            }
        }
        stage('Build and Push Docker Image') {
            steps {
                withCredentials([usernamePassword(credentialsId: 'xxxxx', passwordVariable: 'NEXUS_PASSWORD', usernameVariable: 'NEXUS_USER')]) {
                    sh "mvn -pl myproject-server -DskipTests=true spring-boot:build-image -DDOCKER_REGISTRY=xxxx -DDOCKER_REGISTRY_USER=$NEXUS_USER -DDOCKER_REGISTRY_PASSWORD=$NEXUS_PASSWORD"
                }
            }
        }
        stage('Deploy to DEV') {
            steps {
                sshagent(credentials : ['xxxx']) {
                    sh 'ssh -o StrictHostKeyChecking=no user@server DOCKER RUN LOGIC HERE WITH CORRECT IMAGE NAME'
                }
            }
        }
    }
}

标签: spring-bootdockermavenjenkins

解决方案


您可以使用 Jenkins Pipeline Utility Steps 插件 ( https://www.jenkins.io/doc/pipeline/steps/pipeline-utility-steps/ ) 来读取 POM 文件并提取值。

pom = readMavenPom file: 'pom.xml'
pom.version

但正如他们的文档中所述

避免使用此步骤并编写MavenPom。最好使用 sh 步骤来运行 mvn 目标。例如

您可以改用此命令:

def version = sh script: 'mvn help:evaluate -Dexpression=project.version -q -DforceStdout', returnStdout: true

推荐阅读