如果测试成功,如何在构建后从 Jenkins 管道更新 POM 版本

时间:2021-03-26 11:48:16

标签: maven jenkins jenkins-pipeline

我继承了 2 个项目,一个依赖另一个,两个 Maven 项目都使用 Jenkinsfile 构建。

项目 B 依赖于项目 A 的一些模块。

现在,项目 A 的 pom.xml 中的版本是硬编码的,项目 B 中的依赖项版本也是如此。版本在 Jenkinsfile 中管理,但不在 pom.xml 中更新。这有时会导致项目 B 的本地构建出现问题。

我希望增加项目 A 模块的 poms 中的版本以反映构建,而不是硬编码。

我在网上找到的建议似乎过时了,我不确定它们是否不再相关。我希望使用最好的方法。

詹金斯文件:

env.VERSION = "${env.BUILD_ID}-${(env.BRANCH_NAME).replace('/', '-')}"
if (env.BRANCH_NAME == "master") {
    env.VERSION = env.BUILD_ID
}

    stage ('Checkout') {
        checkout scm
        gitCommit = sh(returnStdout: true, script: 'git rev-parse HEAD').trim()

        sh "git config user.email email@email.email"
        sh "git config user.name 'jenkins-username'"
        sh "git tag -a -f -m 'Jenkins CI Build: ${env.BRANCH_NAME} ${env.BUILD_NUMBER}' ${version}"
    }
    
    stage ('Build') {
        withCredentials(......) {
            ansiColor('xterm') {
                sh "docker build --build-arg VERSION=${env.VERSION}  --target build -t sometag:build ."
                docker_images.each{ image ->
                    sh "docker build --build-arg VERSION=${env.VERSION} --target ${image} -t ${rootRepo}/${image}:${env.VERSION} -t ${rootRepo}/${image}:${gitCommit} ."
                }
            }
        }
    }

pom.xml:

    <groupId>my.group</groupId>
    <artifactId>my-artifact</artifactId>
    <packaging>pom</packaging>
    <version>1234</version>

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以借助插件 https://www.jenkins.io/doc/pipeline/steps/pipeline-utility-steps/

我们使用以下代码执行此操作,其中 versionTag 是我们要更新 pom.xml 的版本:

def pomFile = 'pom.xml'
def pom = readMavenPom file: pomFile
pom.version = versionTag
writeMavenPom file: pomFile, model: pom

记得提交并推送 pom.xml 之后。