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插件
pit*_*408 11
在詹金斯2.138.3中,有两种不同类型的管道。
声明性和脚本化管道。
“声明性管道是管道DSL的新扩展(基本上是只有一步的管道脚本,带有参数的管道步骤(称为指令),这些指令应遵循特定的语法。这种新格式的要点是更加严格,因此对于管道新手来说应该更容易,允许进行图形编辑等等。脚本化管道是高级需求的后备。”
这是声明性管道的示例:
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://bulldogjob.com/articles/726-exploring-jenkins-pipelines-a-simple-delivery-flow
" 管道入门"页面显示了另一个选项.它没有额外的插件工作.
在共享库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
| 归档时间: |
|
| 查看次数: |
45296 次 |
| 最近记录: |