web-dev-qa-db-fra.com

Comment utiliser l'étape de propriétés du pipeline Jenkins?

J'étudie les capacités de Jenkins Pipeline: Multibranch. On dit qu'une étape properties récemment introduite pourrait être utile là-bas, mais je ne peux pas comprendre comment cela fonctionne et à quoi sert-il.

Son indice ne semble pas très clair:

Met à jour les propriétés du travail qui exécute cette étape. Principalement utile pour les flux de travail multibranches, afin que Jenkinsfile puisse lui-même encoder ce qui serait autrement une configuration de travail statique.

J'ai donc créé un nouveau pipeline avec ceci sous forme de script (collé directement dans Jenkins et non dans SCM):

properties [[$class: 'ParametersDefinitionProperty',
   parameterDefinitions: [[$class: 'StringParameterDefinition',
       defaultValue: '', description: '', name: 'PARAM1']]
]]

Je l'ai exécuté et rien ne s'est passé, job n'a pas reçu de nouveau paramètre et même s'il ne le faisait pas, je ne comprenais pas pourquoi j'en aurais peut-être besoin. Quelqu'un pourrait-il s'il vous plaît expliquer?

PDATE1: J'ai essayé de placer un pipeline factice avec des propriétés dans mon dépôt Git, puis de configurer un travail multibranch.

println 1
properties [[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'StringParameterDefinition', defaultValue: 'str1', description: '', name: 'PARAM1']]], [$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: false]]
println 2

Il a trouvé ma branche, créé un travail mais la construction a échoué avec:

groovy.lang.MissingPropertyException: No such property: properties for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.Java:62)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.Java:185)
at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.Java:241)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.Java:238)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.Java:23)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.Java:17)
at WorkflowScript.run(WorkflowScript:2)
at ___cps.transform___(Native Method)
at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.Java:62)
at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.Java:30)
at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.fixName(PropertyishBlock.Java:54)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:601)
at com.cloudbees.groovy.cps.impl.ContinuationPtr$ContinuationImpl.receive(ContinuationPtr.Java:72)
at com.cloudbees.groovy.cps.impl.ConstantBlock.eval(ConstantBlock.Java:21)
at com.cloudbees.groovy.cps.Next.step(Next.Java:58)
at com.cloudbees.groovy.cps.Continuable.run0(Continuable.Java:154)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.access$001(SandboxContinuable.Java:19)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.Java:33)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable$1.call(SandboxContinuable.Java:30)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.GroovySandbox.runInSandbox(GroovySandbox.Java:106)
at org.jenkinsci.plugins.workflow.cps.SandboxContinuable.run0(SandboxContinuable.Java:30)
at org.jenkinsci.plugins.workflow.cps.CpsThread.runNextChunk(CpsThread.Java:164)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.run(CpsThreadGroup.Java:277)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup.access$000(CpsThreadGroup.Java:77)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.Java:186)
at org.jenkinsci.plugins.workflow.cps.CpsThreadGroup$2.call(CpsThreadGroup.Java:184)
at org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService$2.call(CpsVmExecutorService.Java:47)
at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:334)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:166)
at hudson.remoting.SingleLaneExecutorService$1.run(SingleLaneExecutorService.Java:112)
at jenkins.util.ContextResettingExecutorService$1.run(ContextResettingExecutorService.Java:28)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:471)
at Java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.Java:334)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:166)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1110)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:603)
at Java.lang.Thread.run(Thread.Java:722)

PDATE2: quand je remets le même script (comme dans UPD1) dans Jenkins et l'exécute, il demande une nouvelle permission method groovy.lang.GroovyObject getProperty Java.lang.String. Je l'ai approuvé, la construction est passée au vert, cependant, aucune modification de la configuration du travail n'est apparue.

Mon env est: Jenkins 1.625.3, Pipeline + Multibranch 1.13

44
izzekil

Utiliser properties avec une syntaxe de méthode explicite fonctionnera, à savoir:
properties( [ ... ] ) plutôt que properties [ ... ]

Sinon, cela fonctionnera sans si vous spécifiez le nom du paramètre, par exemple:

properties properties: [ ... ]

Par exemple, définir trois propriétés est aussi simple que:

properties([
  parameters([
    string(name: 'submodule', defaultValue: ''),
    string(name: 'submodule_branch', defaultValue: ''),
    string(name: 'commit_sha', defaultValue: ''),
  ])
])

/* Accessible then with : params.submodule, params.submodule_branch...  */
55
Christopher Orr