问题描述
我想从 Jenkins 声明式管道设置构建名称和描述,但找不到正确的方法.我尝试在管道之后使用环境括号,在代理括号中使用节点括号等.我总是遇到语法错误.
I would like to set the build name and description from a Jenkins Declarative Pipeline, but can't find the proper way of doing it. I tried using an environment bracket after the pipeline, using a node bracket in an agent bracket, etc. I always get syntax error.
我的 Jenkinsfile 的最后一个版本是这样的:
The last version of my Jenkinsfile goes like so:
pipeline {
stages {
stage("Build") {
steps {
echo "Building application..."
bat "%ANT_HOME%/bin/ant.bat clean compile"
currentBuild.name = "MY_VERSION_NUMBER"
currentBuild.description = "MY_PROJECT MY_VERSION_NUMBER"
}
}
stage("Unit Tests") {
steps {
echo "Testing (JUnit)..."
echo "Testing (pitest)..."
bat "%ANT_HOME%/bin/ant.bat run-unit-tests"
}
}
stage("Functional Test") {
steps {
echo "Selenium..."
}
}
stage("Performance Test") {
steps {
echo "JMeter.."
}
}
stage("Quality Analysis") {
steps {
echo "Running SonarQube..."
bat "%ANT_HOME%/bin/ant.bat run-sonarqube-analysis"
}
}
stage("Security Assessment") {
steps {
echo "ZAP..."
}
}
stage("Approval") {
steps {
echo "Approval by a CS03"
}
}
stage("Deploy") {
steps {
echo "Deploying..."
}
}
}
post {
always {
junit '/test/reports/*.xml'
}
failure {
emailext attachLog: true, body: '', compressLog: true, recipientProviders: [[$class: 'CulpritsRecipientProvider'], [$class: 'DevelopersRecipientProvider']], subject: '[JENKINS] MY_PROJECT build failed', to: '...recipients...'
}
success {
emailext attachLog: false, body: '', compressLog: false, recipientProviders: [[$class: 'DevelopersRecipientProvider']], subject: '[JENKINS] MY_PROJECT build succeeded', to: '...recipients...'
}
}
}
错误是:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 11: Expected a step @ line 11, column 5.
currentBuild.name = "MY_VERSION_NUMBER"
^
WorkflowScript: 12: Expected a step @ line 12, column 5.
currentBuild.description = "MY_PROJECT MY_VERSION_NUMBER"
^
理想情况下,我希望能够从 build.properties 文件或 Jenkins 构建日志中读取 MY_PROJECT 和 MY_VERSION_NUMBER.任何有关该要求的指导也将不胜感激.
Ideally, I'd like to be able to read MY_PROJECT and MY_VERSION_NUMBER from the build.properties file, or from the Jenkins build log. Any guidance about that requirement would be appreciated as well.
更新
根据我在下面的答案,以下方法有效:
Based on the answer I had below, the following worked:
stage("Build") {
steps {
echo "Building application..."
bat "%ANT_HOME%/bin/ant.bat clean compile"
script {
def props = readProperties file: 'build.properties'
currentBuild.displayName = "v" + props['application.version']
}
}
现在构建版本是在管道期间通过读取 build.properties 文件自动设置的.
Now the build version is automatically set during the pipeline by reading the build.properties file.
推荐答案
我认为这会满足你的需求.我能够在 script
块内做到这一点:
I think this will do what you want. I was able to do it inside a script
block:
pipeline {
stages {
stage("Build"){
steps {
script {
currentBuild.displayName = "The name."
currentBuild.description = "The best description."
}
... do whatever.
}
}
}
}
脚本是一种脱离声明性管道的逃生舱.可能有一种声明性的方式来做到这一点,但我找不到它.还有一个注意事项.我想你想要 currentBuild.displayName
而不是 currentBuild.name
在 Jenkins globals 的文档中,我没有在 currentBuild 下看到 name 属性.
The script is kind of an escape hatch to get out of a declarative pipeline. There is probably a declarative way to do it but i couldn't find it. And one more note. I think you want currentBuild.displayName
instead of currentBuild.name
In the documentation for Jenkins globals I didn't see a name property under currentBuild.
这篇关于从 Jenkins 声明式管道设置构建名称和描述的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!