我有一个groovy脚本,调用其他作业来停止和启动任务。 (见下文)。我想一遍又一遍地重复使用steps {
中的代码。我可以这样做而不必重复代码吗?
基本上我希望有另一个API的下一个阶段,我可以启动或停止,然后是另一个,等等。然后使用Jenkins上的参数构建这些参数,其中单选按钮决定是停止还是启动。
#!/usr/bin/env groovy
pipeline {
environment {
containerInstanceIdsToStartOn = "463b8b6f-9388-4fbd-8257-b056e28c0a43"
region = "eu-west-1"
cluster = "mis-core-dev"
}
agent any
stages {
stage('Authentication API (dev)') {
environment {
apiName = "authentication_API"
taskDefinitionFamily = "mis-core-dev-authentication-api"
taskDefinition = "mis-core-dev-authentication-api"
}
steps {
script {
if (params."${apiName}".contains('Stop Task')) {
build(job: 'Stop ECS Task (utility)',
parameters: [
string(name: 'region', value: params."${region}"),
string(name: 'cluster', value: params."${cluster}"),
string(name: 'family', value: params."${taskDefinitionFamily}")
])
}
else if (params."${apiName}".contains('Start Task')) {
build(job: 'Start ECS Task (utility)',
parameters: [
string(name: 'region', value: params."${region}"),
string(name: 'cluster', value: params."${cluster}"),
string(name: 'taskDefinition', value: params."${taskDefinition}"),
string(name: 'containerInstanceIds', value: params."${containerInstanceIdsToStartOn}")
])
}
else if (params."${apiName}" == null || params."${apiName}" == "") {
echo "Did you forget to check a box?"
}
}
}
}
}
post {
always {
cleanWs()
}
}
}
答案 0 :(得分:2)
无法共享声明性管道的部分内容。声明性管道DSL在运行时以特殊方式处理,您无法拆分某些部分。你可以在一些块的执行方式上分享一些逻辑(比如script
块中使用的代码),但共享功能基本上只限于整个流水线定义本身
来自Shared Library documentation:
此时,只能在共享库中定义整个管道。这只能在
vars/*.groovy
中完成,并且只能在call
方法中完成。在一个构建中只能执行一个Declarative Pipeline,如果您尝试执行第二个,那么构建将因此失败。