我已经使用以下属性配置了jenkinsfile,但是当从master分支创建新分支时,它不适用于jenkins服务器。
#!groovy
properties([[$class: 'ParametersDefinitionProperty',
parameterDefinitions: [
[$class: 'StringParameterDefinition', name: 'isValid', defaultValue: 'false']
]
]])
node {
stage 'Checkout'
checkout scm
.....
.....
}
在git中创建分支后,可以使用“立即构建”选项在jenkins服务器中看到该分支。
一旦我第一次从jenkins服务器运行分支,它就会变成Build with Parameters选项。
在jenkinsfile中有什么我错过配置吗?为什么在创建分支时未在jenkins服务器中配置参数?
我曾经解决过的问题是检查分支上是否有env.BUILD_NUMBER == "1"
,然后为我的参数设置一些默认值,以便在该分支的初始运行时使用。例如:
node {
properties([
buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '15')),
parameters([
string(defaultValue: '', description: '', name: 'PLATFORM')
])
])
stage("Testing") {
// set a default for PLATFORM if it's the first build of a PR
// as a workaround to parameters not being available on first run of build
if (env.BUILD_NUMBER == "1") {
PLATFORM = ''
}
if (PLATFORM.empty) {
....
}
}
}
您可以使用params.isValid
而不是env.isValid
来解决这个问题。
从2019年开始,这似乎仍然被打破。您可以通过在管道中创建一个将参数值设置回环境变量的初始阶段来解决它。之后,您可以在后续阶段正常引用它。
parameters {
string(name: 'SOME_VAR', defaultValue: 'foo', description: 'A custom environment variable')
}
....
stage('Verifying Environment Variables') {
// This is too work around a jenkins bug on the first build of a multi-branch job
// https://issues.jenkins-ci.org/browse/JENKINS-40574 - it is marked resolved but the last comment says it doesn't work for declaritive pipelines
environment {
SOME_VAR = "${params.SOME_VAR}"
}
steps {
script {
env.SOME_VAR = env.SOME_VAR
}
}
}
...