从Jenkins管道中的POM中提取版本ID

use*_*693 27 maven jenkins jenkins-pipeline

我已经创建了一个管道并使用嵌入式groovy管道脚本定义,似乎无法从POM获取项目的版本ID.我试过这个在groovy控制台中工作但在Jenkins构建管道脚本中:

def project = new XmlSlurper().parse(new File("pom.xml"))
def pomv = project.version.toString()
Run Code Online (Sandbox Code Playgroud)

根据詹金斯的文档$POM_VERSION,当我将它分配给变量并将其回显时,该值中没有任何内容.

def pomv = "$POM_VERSION"
Run Code Online (Sandbox Code Playgroud)

要么

def pomv = '$POM_VERSION"
Run Code Online (Sandbox Code Playgroud)

Krz*_*soń 69

使用readMavenPom这样:

pom = readMavenPom file: 'pom.xml'
pom.version
Run Code Online (Sandbox Code Playgroud)

有关属性,请参阅模型参考(如上面的版本).

为此,必须安装Pipeline Utility Steps插件

  • 不幸的是,该功能不适用于诸如修订版(https://maven.apache.org/maven-ci-friendly.html)之类的Maven功能,并且将被贬低并以writeMavenPom(https://github.com/writeMavenPom)的形式编写。 com / jenkinsci / pipeline-utility-steps-plugin / pull / 47 / commits / eeebaa891a006c083ce10f883b7c1264533bb692) (2认同)

pit*_*408 11

在詹金斯2.138.3中,有两种不同类型的管道。

声明性和脚本化管道。

“声明性管道是管道DSL的新扩展(基本上是只有一步的管道脚本,带有参数的管道步骤(称为指令),这些指令应遵循特定的语法。这种新格式的要点是更加严格,因此对于管道新手来说应该更容易,允许进行图形编辑等等。脚本化管道是高级需求的后备。”

jenkins管道:代理vs节点?

这是声明性管道的示例:

pipeline {

    agent any


    environment {
    //Use Pipeline Utility Steps plugin to read information from pom.xml into env variables
    IMAGE = readMavenPom().getArtifactId()
    VERSION = readMavenPom().getVersion()
    }


    stages {

        stage('Test') {
            steps {
                echo "${VERSION}"
            }

        }

    }

}
Run Code Online (Sandbox Code Playgroud)

脚本管道示例

node('master') {

  stage('Test') {
    IMAGE = readMavenPom().getArtifactId()
    VERSION = readMavenPom().getVersion()
    echo "IMAGE: ${IMAGE}"
    echo "VERSION: ${VERSION}"
  }

}
Run Code Online (Sandbox Code Playgroud)

这里有一些很好的链接:

声明式 https://github.com/jenkinsci/pipeline-examples/blob/master/declarative-examples/jenkinsfile-examples/mavenDocker.groovy

脚本化 https://bulldogjob.com/articles/726-exploring-jenkins-pipelines-a-simple-delivery-flow


sch*_*rer 7

" 管道入门"页面显示了另一个选项.它没有额外的插件工作.

在共享库ces-build-lib中可以找到稍微强大的版本(它还有一些基本的单元测试):

def version() {
    def matcher = readFile('pom.xml') =~ '<version>(.+?)</version>'
    matcher ? matcher[0][1] : null
}
Run Code Online (Sandbox Code Playgroud)

这总是匹配在<version>中找到的第一个标签pom.xml.在大多数情况下,这应该是maven模块或其父级的版本.


小智 3

你可以试试readMavenPom可用的功能。

更多信息在这里:https://jenkins.io/doc/pipeline/steps/pipeline-utility-steps/#readmavenpom-read-a-maven-project-file