Как получить доступ к параметрам в сценарии конвейера Jenkins?

Я пытаюсь использовать параметр задания в конвейерном скрипте, следуя параметризованному конвейеру с использованием шаблонной документации.

Мой сценарий:

node { 
  // Display the parameter value of the parameter name "myparam" 
  println myparam 
  sh "echo '${myparam}'" 
}

но Дженкинс не может найти мой параметр:

groovy.lang.MissingPropertyException: No such property: myparam for class: WorkflowScript
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458)
    at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:33)
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
    at WorkflowScript.run(WorkflowScript:3)
    at ___cps.transform___(Native Method)

Что мне не хватает?

Дженкинс Версия: 2.8

Моя полная работа XML выглядит так:

<flow-definition plugin="workflow-job@2.2">
   <actions />
   <description />
   <keepDependencies>false</keepDependencies>
   <properties>
      <com.synopsys.arc.jenkinsci.plugins.jobrestrictions.jobs.JobRestrictionProperty plugin="job-restrictions@0.4" />
      <hudson.model.ParametersDefinitionProperty>
         <parameterDefinitions>
            <hudson.model.StringParameterDefinition>
               <name>myparam</name>
               <description>bar</description>
               <defaultValue>foo</defaultValue>
            </hudson.model.StringParameterDefinition>
         </parameterDefinitions>
      </hudson.model.ParametersDefinitionProperty>
   </properties>
   <definition class="org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition" plugin="workflow-cps@2.23">
      <script>node { //Dislay the parameter value of the parameter name "myparam" println myparam sh "echo '${myparam}'" }</script>
      <sandbox>false</sandbox>
   </definition>
   <triggers />
</flow-definition>

1 ответ

Решение

Сначала определите свой пользовательский параметр сборки:

pipeline {
  parameters {
    string( name: 'BuildConfiguration', 
            defaultValue: 'Release', 
            description: 'Configuration to build (Debug/Release/...)')
  }

Он будет автоматически отображаться на странице, отображаемой после нажатия кнопки "Построить с параметрами" на странице работы Jenkins.

Затем получите доступ к переменной внутри скрипта:

echo "Building configuration: ${params.BuildConfiguration}"
echo "Building configuration: " + params.BuildConfiguration

В дополнение к примеру Бьорна Реппенса для декларативного конвейера, здесь также есть пример синтаксиса сценария конвейера:

properties([
  parameters([
    string( name: 'BuildConfiguration', 
            defaultValue: 'Release', 
            description: 'Configuration to build (Debug/Release/...)')
  ])
])

node{
 ...
}

Обратите внимание, что блок свойств может быть указан внутри узлового элемента или вне его. Затем вы получаете доступ к своим параметрам так же, как в декларативном конвейере, через params.BuildConfiguration

Если в имени вашего параметра есть специальные символы, такие как точка или дефис, вы можете получить к нему следующий доступ:

pipeline {
    stages {
        stage('Test') {
            steps {
                echo "${params['app.jms.jndi-provider-url']}"
            }
        }
    }
}
Другие вопросы по тегам