groovy Jenkins作业DSL不接受参数

abithluo  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(199)

我有一个Jenkins种子DSL的工作:

job("cronjob/${ACTION}_${ENVRIONMENT}_environment_CRONJOB") {
    scm {
      git('https://git_user@github.com/abc-Data/devops.git','*/develop')
    }
  triggers {
    scm("${SCHEDULE}")
  }
    steps {
      ansiblePlaybook("ansible/scripts/ansible-${ACTION}.yml") {
        inventoryPath("/etc/ansible/hosts")
        credentialsId("usercred")
        extraVars {
            extraVar('environment_name',"${ENVRIONMENT}",false)
        }

      }
    }
}

操作、环境和计划是参数。
ACTION的值可以是createremove,我有两个ansible剧本ansible-create.ymlansible-remove.yml
当我运行sseed作业时,出现以下错误:

ERROR: (unknown source) No signature of method: javaposse.jobdsl.dsl.helpers.step.StepContext.ansiblePlaybook() is applicable for argument types: (org.codehaus.groovy.runtime.GStringImpl, script$_run_closure1$_closure4$_closure5) values: [ansible/scripts/ansible-create.yml, ...]
Finished: FAILURE

ansiblePlaybook("ansible/scripts/ansible-${ACTION}.yml")不能与变量ACTION一起使用。
如果我硬编码ansiblePlaybook中的脚本名称,种子作业将创建一个新作业。
我错过了什么?
谢谢你!

k5hmc34c

k5hmc34c1#

正如上面@daggett所建议的,我将代码修改如下:

job("cronjob/${ACTION}_${ENVRIONMENT}_environment_CRONJOB") {
    scm {
      git('https://git_user@github.com/abc-Data/devops.git','*/develop')
    }
  triggers {
    scm("${SCHEDULE}")
  }
    steps {
      ansiblePlaybook("ansible/scripts/ansible-${ACTION}.yml" as String) {
        inventoryPath("/etc/ansible/hosts")
        credentialsId("usercred")
        extraVars {
            extraVar('environment_name',"${ENVRIONMENT}",false)
        }

      }
    }
}

它按预期工作,并使用输入的变量值创建一个新的作业。再次感谢您@daggett!

相关问题