Передайте (одинаковые) параметры для нескольких заданий сборки в конвейере Jenkins - PullRequest
0 голосов
/ 15 мая 2019

У нас есть несколько заданий: «первичное», «вторичное» и «резервное копирование» - у всех должны быть одинаковые параметры (версии выпуска, т.е. «1.5.1») - их около 15.

parameters{
    string(name: 'service1', defaultValue: 'NA', description: 'Verison' )
    string(name: 'service2', defaultValue: 'NA', description: 'Verison' )
    string(name: 'service3', defaultValue: 'NA', description: 'Verison' )
}

Мой конвейер похож на приведенный ниже, как я могу использовать одни и те же вышеуказанные параметры для всех трех заданий сборки, не задавая параметры три раза?

//This will kick of the three pipeline scripts required to do a release in PROD 
pipeline {
   agent any
   stages
   {
      stage('Invoke pipeline primary') {
         steps {
            build job: 'primary'
         }
      }
      stage('Invoke pipeline secondary') {
         steps {
            build job: 'secondary'
         }
      }
      stage('backup') {
         steps {
            build job: 'backup'
         }
      }
   }
}

Я нашел этот ответ здесь , но, похоже, здесь используется отличный синтаксис, и я не уверен, может ли он также использоваться в декларативном конвейере, подобном приведенному выше?

Когда я попробовал это, я получил следующее:

Running on Jenkins in PipelineTest
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Invoke pipeline primary)
[Pipeline] build
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: No item named null found
Finished: FAILURE

Когда я запускаю этот первичный конвейер сам по себе, он работает как положено.

Спасибо!

Редактировать: пробовал ответ, предоставленный @hakamairi, но получите следующее, я не очень хорош в DSL, но пробовал несколько разных вариантов, и ни один не работал / у всех были похожие типы ошибок при ожидании ParamValue.

//This will kick of the three pipeline scripts required to do a release in PROD 
pipeline {
   agent any

   parameters{
       string(name: 'service1', defaultValue: 'NA', description: 'Version' )
       string(name: 'service2', defaultValue: 'NA', description: 'Version' )
  }

   stages
   {
      stage('Invoke pipeline PrimaryRelease') {
         steps {
             build job: 'PythonBuildTest', parameters: params
         }
      }
   }
}

Ошибка:

java.lang.UnsupportedOperationException: необходимо указать класс $ с реализация интерфейса java.util.List в org.jenkinsci.plugins.structs.describable.DescribableModel.resolveClass (DescribableModel.java:503) в org.jenkinsci.plugins.structs.describable.DescribableModel.coerce (DescribableModel.java:402) в org.jenkinsci.plugins.structs.describable.DescribableModel.injectSetters (DescribableModel.java:361) в org.jenkinsci.plugins.structs.describable.DescribableModel.instantiate (DescribableModel.java:284) в org.jenkinsci.plugins.workflow.steps.StepDescriptor.newInstance (StepDescriptor.java:201) в org.jenkinsci.plugins.workflow.cps.DSL.invokeStep (DSL.java:208) в org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod (DSL.java:153) в org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod (CpsScript.java:122) at sun.reflect.GeneratedMethodAccessor956.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в org.codehaus.groovy.reflection.CachedMethod.invoke (CachedMethod.java:93) at groovy.lang.MetaMethod.doMethodInvoke (MetaMethod.java:325) в groovy.lang.MetaClassImpl.invokeMethod (MetaClassImpl.java:1213) в groovy.lang.MetaClassImpl.invokeMethod (MetaClassImpl.java:1022) в org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call (PogoMetaClassSite.java:42) в org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall (CallSiteArray.java:48) в org.codehaus.groovy.runtime.callsite.AbstractCallSite.call (AbstractCallSite.java:113) в org.kohsuke.groovy.sandbox.impl.Checker $ 1.call (Checker.java:157) в org.kohsuke.groovy.sandbox.GroovyInterceptor.onMethodCall (GroovyInterceptor.java:23) в org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onMethodCall (SandboxInterceptor.java:133) в org.kohsuke.groovy.sandbox.impl.Checker $ 1.call (Checker.java:155) в org.kohsuke.groovy.sandbox.impl.Checker.checkedCall (Checker.java:159) в org.kohsuke.groovy.sandbox.impl.Checker.checkedCall (Checker.java:129) в com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall (SandboxInvoker.java:17) Причина: java.lang.IllegalArgumentException: не удалось создать экземпляр {job = PythonBuildTest, параметры = {service1 = NA,

1 Ответ

0 голосов
/ 15 мая 2019

Я думаю, что вы можете использовать параметры на уровне конвейера и просто передать параметры в вызовах build.

//This will kick of the three pipeline scripts required to do a release in PROD 
pipeline {
   agent any
    parameters{
        string(name: 'service1', defaultValue: 'NA', description: 'Verison' )
        string(name: 'service2', defaultValue: 'NA', description: 'Verison' )
        string(name: 'service3', defaultValue: 'NA', description: 'Verison' )
    }
   stages
   {
      stage('Invoke pipeline primary') {
         steps {
            build job: 'primary', parameters: ([] + params)
         }
      }
      stage('Invoke pipeline secondary') {
         steps {
            build job: 'secondary', parameters: ([] + params)
         }
      }
      stage('backup') {
         steps {
            build job: 'backup', parameters: ([] + params)
         }
      }
   }
} 
...