2

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

1 回答 1

2

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

共享库文档

到目前为止,只能在共享库中定义整个管道。这只能在 中完成vars/*.groovy,并且只能在一个call方法中完成。在一个构建中只能执行一个声明式管道,如果您尝试执行第二个,您的构建将因此失败。

于 2018-03-30T14:42:00.030 回答