Jenkins声明性管道中的可重复步骤

时间:2018-03-30 14:16:44

标签: jenkins jenkins-pipeline jenkins-groovy

我有一个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()
    }
  }
}

1 个答案:

答案 0 :(得分:2)

无法共享声明性管道的部分内容。声明性管道DSL在运行时以特殊方式处理,您无法拆分某些部分。你可以在一些块的执行方式上分享一些逻辑(比如script块中使用的代码),但共享功能基本上只限于整个流水线定义本身

来自Shared Library documentation

  

此时,只能在共享库中定义整个管道。这只能在vars/*.groovy中完成,并且只能在call方法中完成。在一个构建中只能执行一个Declarative Pipeline,如果您尝试执行第二个,那么构建将因此失败。