为了在同一个工作中保持这一点,需要一些常规的编码。由于您使用 MultiBranch 管道,这一切都可以存在于您的Jenkinsfile
首先,按照 Vitalii 所述设置您的 cron,这将按计划启动工作。
properties([
pipelineTriggers([cron('0 0 * * *')])
])
接下来,当这个作业被调度触发时,我们要调整它的运行参数。所以首先我们需要检查是什么导致了构建。这可能需要安全脚本批准。
List causes = currentBuild.rawBuild.getCauses().collect { it.getClass().getCanonicalName().tokenize('.').last() }
如果这包含'TimerTriggerCause'
,那么我们要更新参数。
if (causes.contains('TimerTriggerCause') {
setBooleanParam("EXECUTE_TESTS", true)
}
为此,我们在共享库中编写了一个函数,如果您愿意,可以将它放在同一个 Jenkinsfile 中(在管道逻辑之外的底部):
/**
* Change boolean param value during build
*
* @param paramName new or existing param name
* @param paramValue param value
* @return nothing
*/
Void setBooleanParam(String paramName, Boolean paramValue) {
List<ParameterValue> newParams = new ArrayList<>();
newParams.add(new BooleanParameterValue(paramName, paramValue))
try {
$build().addOrReplaceAction($build().getAction(ParametersAction.class).createUpdated(newParams))
} catch (err) {
$build().addOrReplaceAction(new ParametersAction(newParams))
}
}
让工作照常进行。当它开始评估 params.EXECUTE_TESTS 时,这将是 true(而不是默认的 false)。
注意:可能需要为值导入模型
import hudson.model.BooleanParameterValue
把这些放在一起(只是快速拼凑出一个整体的画面),你的 jenkinsfile 最终会是这样的
#!groovy
import hudson.model.BooleanParameterValue
List paramsList = [
choice(name: 'ACCOUNT_NAME', choices: ['account1', 'account2'].join('\n'), description: 'A choice param'),
string(name: 'PARAM', defaultValue: 'something', description: 'A string param'),
booleanParam(defaultValue: false, name: 'EXECUTE_TESTS', description: 'Checkbox'),
]
properties([
buildDiscarder(logRotator(numToKeepStr: '20')),
pipelineTriggers([cron('0 18 * * *')]), // 4am AEST/5am AEDT
disableConcurrentBuilds(),
parameters(paramList)
])
ansiColor {
timestamps {
node {
try {
causes = currentBuild.rawBuild.getCauses().collect { it.getClass().getCanonicalName().tokenize('.').last() }
if (causes.contains('TimerTriggerCause') {
setBooleanParam("EXECUTE_TESTS", true)
}
stage('Do the thing') {
// Normal do the things like build
}
stage('Execute tests if selected') {
if (params.EXECUTE_TESTS == true) {
// execute tests
} else {
echo('Tests not executed (Option was not selected/False)')
}
}
} catch (err) {
throw err
} finally {
deleteDir()
}
}
}
}
/**
* Change boolean param value during build
*
* @param paramName new or existing param name
* @param paramValue param value
* @return nothing
*/
Void setBooleanParam(String paramName, Boolean paramValue) {
List<ParameterValue> newParams = new ArrayList<>();
newParams.add(new BooleanParameterValue(paramName, paramValue))
try {
$build().addOrReplaceAction($build().getAction(ParametersAction.class).createUpdated(newParams))
} catch (err) {
$build().addOrReplaceAction(new ParametersAction(newParams))
}
}