【问题标题】:Active Choices Reactive Reference Parameter in jenkins pipeline詹金斯管道中的主动选择反应参考参数
【发布时间】:2017-04-14 10:59:50
【问题描述】:

我在 dsl 作业中使用 Active Choices Reactive Reference Parameter 插件,这里是代码

 parameters {
                  activeChoiceParam('choice1') {
                      description('select your choice')
                      choiceType('RADIO')
                      groovyScript {
                          script("return['aaa','bbb']")
                          fallbackScript('return ["error"]')
                      }
                  }
                  activeChoiceReactiveParam('choice2') {
                      description('select your choice')
                      choiceType('RADIO')
                      groovyScript {
                          script("if(choice1.equals("aaa")){return ['a', 'b']} else {return ['aaaaaa','fffffff']}")
                          fallbackScript('return ["error"]')
                      }
                      referencedParameter('choice1')
                  }

它工作得很好我现在想要的是如何在 jenkinsFile 中使用 activeChoiceReactiveParam 来完成管道工作:

properties(
    [
            [
                    $class              : 'ParametersDefinitionProperty',
                    parameterDefinitions: [
                            [
                                    $class     : 'ChoiceParameterDefinition',
                                    choices    : 'aaa\nbbb',
                                    description: 'select your choice : ',
                                    name       : 'choice1'
                            ]

但是如何添加choice2参数!!!

【问题讨论】:

    标签: jenkins groovy jenkins-plugins jenkins-pipeline


    【解决方案1】:

    我需要类似的解决方案。 在我的谷歌搜索中,我没有找到任何特定于 Active Choices 插件的相关答案/示例。 通过一些研发,我终于能够为管道项目完成这项工作。 这是 Jenkinsfile 代码

    properties([
        parameters([
            [$class: 'ChoiceParameter', 
                choiceType: 'PT_SINGLE_SELECT', 
                description: 'Select the Env Name from the Dropdown List', 
                filterLength: 1, 
                filterable: true, 
                name: 'Env', 
                randomName: 'choice-parameter-5631314439613978', 
                script: [
                    $class: 'GroovyScript', 
                    fallbackScript: [
                        classpath: [], 
                        sandbox: false, 
                        script: 
                            'return[\'Could not get Env\']'
                    ], 
                    script: [
                        classpath: [], 
                        sandbox: false, 
                        script: 
                            'return["Dev","QA","Stage","Prod"]'
                    ]
                ]
            ], 
            [$class: 'CascadeChoiceParameter', 
                choiceType: 'PT_SINGLE_SELECT', 
                description: 'Select the Server from the Dropdown List', 
                filterLength: 1, 
                filterable: true, 
                name: 'Server', 
                randomName: 'choice-parameter-5631314456178619', 
                referencedParameters: 'Env', 
                script: [
                    $class: 'GroovyScript', 
                    fallbackScript: [
                        classpath: [], 
                        sandbox: false, 
                        script: 
                            'return[\'Could not get Environment from Env Param\']'
                    ], 
                    script: [
                        classpath: [], 
                        sandbox: false, 
                        script: 
                            ''' if (Env.equals("Dev")){
                                    return["devaaa001","devaaa002","devbbb001","devbbb002","devccc001","devccc002"]
                                }
                                else if(Env.equals("QA")){
                                    return["qaaaa001","qabbb002","qaccc003"]
                                }
                                else if(Env.equals("Stage")){
                                    return["staaa001","stbbb002","stccc003"]
                                }
                                else if(Env.equals("Prod")){
                                    return["praaa001","prbbb002","prccc003"]
                                }
                            '''
                    ]
                ]
            ]
        ])
    ])
    
    pipeline {
      environment {
             vari = ""
      }
      agent any
      stages {
          stage ("Example") {
            steps {
             script{
              echo 'Hello'
              echo "${params.Env}"
              echo "${params.Server}"
              if (params.Server.equals("Could not get Environment from Env Param")) {
                  echo "Must be the first build after Pipeline deployment.  Aborting the build"
                  currentBuild.result = 'ABORTED'
                  return
              }
              echo "Crossed param validation"
            } }
          }
      }
    }
    

    即使您可以使用具有以下定义和其余代码的“Active Choices Reactive Reference Parameter”,请按照上面的示例进行操作。

    [$class: 'DynamicReferenceParameter', 
                choiceType: 'ET_FORMATTED_HTML', 
                description: 'These are the details in HTML format', 
                name: 'DetailsInHTML', 
                omitValueField: false, 
                randomName: 'choice-parameter-5633384460832175', 
                referencedParameters: 'Env, Server',
                script: [
                      $class: 'ScriptlerScript',
                      parameters: [[$class: 'org.biouno.unochoice.model.ScriptlerScriptParameter', name: '', value: '$value']],
                      scriptlerScriptId: 'script.groovy'
            ]
        ]
    

    注意:确保在多个参数定义块之间有“,”分隔符。

    希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

      我没有使用 Active Choices Reactive Reference Parameter,但它工作正常!!!

      node('slave') {
          def choice1
          def choice2
      
          stage ('Select'){
              choice1 = input( id: 'userInput', message: 'Select your choice', parameters: [ [\$class: 'ChoiceParameterDefinition', choices: 'aa\nbb', description: '', name: ''] ])
              if(choice1.equals("aa")){
                  choice2 = input( id: 'userInput', message: 'Select your choice', parameters: [ [\$class: 'ChoiceParameterDefinition', choices: 'yy\nww', description: '', name: ''] ])
              }else{
                  choice2 = input( id: 'userInput', message: 'Select your choice', parameters: [ [\$class: 'ChoiceParameterDefinition', choices: 'gg\nkk', description: '', name: ''] ])
              }
          }
      }
      

      【讨论】:

        【解决方案3】:

        非常感谢@Yogeesh。它有很大帮助。 就我而言,要求是选择多个而不是一个。所以,使用了choiceType: 'PT_CHECKBOX',就达到了目的。

        properties([
        parameters([
            [$class: 'ChoiceParameter', 
                choiceType: 'PT_SINGLE_SELECT', 
                description: 'Select the Env Name from the Dropdown List', 
                filterLength: 1, 
                filterable: true, 
                name: 'Env', 
                randomName: 'choice-parameter-5631314439613978', 
                script: [
                    $class: 'GroovyScript', 
                    fallbackScript: [
                        classpath: [], 
                        sandbox: false, 
                        script: 
                            'return[\'Could not get Env\']'
                    ], 
                    script: [
                        classpath: [], 
                        sandbox: false, 
                        script: 
                            'return["Dev","QA","Stage","Prod"]'
                    ]
                ]
            ], 
            [$class: 'CascadeChoiceParameter', 
                choiceType: 'PT_CHECKBOX', 
                description: 'Select Servers', 
                filterLength: 1, 
                filterable: true, 
                name: 'Server', 
                randomName: 'choice-parameter-5631314456178619', 
                referencedParameters: 'Env', 
                script: [
                    $class: 'GroovyScript', 
                    fallbackScript: [
                        classpath: [], 
                        sandbox: false, 
                        script: 
                            'return[\'Could not get Environment from Env Param\']'
                    ], 
                    script: [
                        classpath: [], 
                        sandbox: false, 
                        script: 
                            ''' if (Env.equals("Dev")){
                                    return["devaaa001","devaaa002","devbbb001","devbbb002","devccc001","devccc002"]
                                }
                                else if(Env.equals("QA")){
                                    return["qaaaa001","qabbb002","qaccc003"]
                                }
                                else if(Env.equals("Stage")){
                                    return["staaa001","stbbb002","stccc003"]
                                }
                                else if(Env.equals("Prod")){
                                    return["praaa001","prbbb002","prccc003"]
                                }
                            '''
                    ]
                ]
            ]
        ])
        

        【讨论】:

        • 如何从复选框中读取选定的值?如果(Server.equals(“devaaa001”)){...}?可能选择了多个值,因此我们不能使用“等于”。
        • 因此,在此示例中,“Env”是选择参数,并且基于选择,“Server”,即级联选择参数出现。我们可以使用 ${params.Server} 来获取 checkbox selection/s 的值
        【解决方案4】:

        我为我制作了初始样本。 我必须在脚本语句script(' ') 中将返回语句return ["a", "b"] 中的'" 中的' 更改为'

        job("MyJob") {
            description ("This job creates ....")
            
            //def targetEnvironment=""
            
        
            parameters {
                 activeChoiceParam('choice1') {
                              description('select your choice')
                              choiceType('RADIO')
                              groovyScript {
                                  script('return["aaa","bbb"]')
                                  fallbackScript('return ["error"]')
                              }
                }
                activeChoiceReactiveParam('choice2') {
                              description('select your choice')
                              choiceType('RADIO')
                              groovyScript {
                                  script(' if(choice1.equals("aaa")) { return ["a", "b"] } else {return ["aaaaaa","fffffff"] } ')
                                  fallbackScript('return ["error"]')
                              }
                              referencedParameter('choice1')
                }
        
            }
        }
        

        【讨论】:

          【解决方案5】:

          试试这样的:

          properties(
          [
                  [
                          $class              : 'ParametersDefinitionProperty',
                          parameterDefinitions: [
                                  [
                                          $class     : 'ChoiceParameterDefinition',
                                          choices    : 'aaa\nbbb',
                                          description: 'select your choice : ',
                                          name       : 'choice1'
                                  ],
                                  [
                                          $class     : 'ChoiceParameterDefinition',
                                          choices    : 'ccc\nddd',
                                          description: 'select another choice : ',
                                          name       : 'choice2'
                                  ]
          

          【讨论】:

          • choice2 依赖于choice1;如果用户选择choice1 为“aaa”,则choice2 上的选择将为“cc”或“dd”,如果用户选择choice1 为“bbb”,则choice2 上的选择将为“ee”或“rr”
          【解决方案6】:

          有什么方法可以将脚本逻辑放在一个函数中并调用 例如:

           [$class: 'CascadeChoiceParameter', 
                  choiceType: 'PT_CHECKBOX', 
                  description: 'Select Servers', 
                  filterLength: 1, 
                  filterable: true, 
                  name: 'Server', 
                  randomName: 'choice-parameter-5631314456178619', 
                  referencedParameters: 'Env', 
                  script: [
                      $class: 'GroovyScript', 
                      fallbackScript: [
                          classpath: [], 
                          sandbox: false, 
                          script: 
                              'return[\'Could not get Environment from Env Param\']'
                      ], 
                      script: [
                          classpath: [], 
                          sandbox: false, 
                          script: 
                              ''' if (Env.equals("Dev")){
                                      return["devaaa001","devaaa002","devbbb001","devbbb002","devccc001","devccc002"]
                                  }
                                  else if(Env.equals("QA")){
                                      return["qaaaa001","qabbb002","qaccc003"]
                                  }
                                  else if(Env.equals("Stage")){
                                      return["staaa001","stbbb002","stccc003"]
                                  }
                                  else if(Env.equals("Prod")){
                                      return["praaa001","prbbb002","prccc003"]
                                  }
                              '''
                      ]
                  ]
              ]```
          
          
          define below code in funciton and call ?
          

          if (Env.equals("Dev")){

           return["devaaa001","devaaa002","devbbb001","devbbb002","devccc001","devccc002"]
           }
                              
          

          else if(Env.equals("QA")){ return["qaaaa001","qabbb002","qaccc003"] } else if(Env.equals("Stage")){ return["staaa001", "stbbb002","stccc003"] } else if(Env.equals("Prod")){ return["praaa001","prbbb002","prccc003"]

          }

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多