我想通过Jenkins声明性管道设置构建名称和描述,但是找不到正确的方法。我尝试在管道之后使用环境支架,在代理支架中使用节点支架,等等。我总是会收到语法错误。
我的Jenkinsfile的最新版本如下:
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。关于该要求的任何指导也将不胜感激。
更新
根据我在下面的答案,以下工作有效:
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文件,可以在管道中自动设置构建版本。
我想这会做您想要的。我能够在一个script块内完成它:
script
pipeline { stages { stage("Build"){ steps { script { currentBuild.displayName = "The name." currentBuild.description = "The best description." } ... do whatever. } } } }
该脚本有点像逃避声明,可以摆脱声明式管道。可能有一种声明式的方法可以执行,但是我找不到。还有一点。我想您想要currentBuild.displayName而不是currentBuild.name 在Jenkins全局文档中没有在currentBuild下看到name属性。
currentBuild.displayName
currentBuild.name