Я использую плагин Active Choices для динамического генерирования значений параметров. К сожалению, Job DSL не поддерживает настройку защищенного сценария . Вот почему я пытаюсь добавить это, используя блок configure
Job DSL.
Я использую методы, которые получают контекст задания или контекст параметра или что-то еще. Но из я узнал еще один вопрос , что я не могу получить доступ к сгенерированному XML, используя configure
в том же методе, поскольку XML еще не было сгенерировано. Я надеюсь, что понял это право - поэтому в моем случае я вызываю два метода. Первый создает базовую конфигурацию Active Choices, второй добавляет защищенный сценарий Groovy.
Обратите внимание, что я добавляю сценарий Groovy на лету, читая источник сценария Groovy (Branch
в данном случае).
factory.freeStyleJob(jobName) {
...
parameters {
activeChoiceFormattedHtmlParameter delegate, PARAMETER_BRANCH, BRANCH_PARAMETER_DESCRIPTION, PARAMETER_STAGE, PARAMETER_DATABASE
}
...
activeChoiceFormattedHtmlScript delegate, PARAMETER_BRANCH, Branch
}
И мои методы:
static void activeChoiceFormattedHtmlParameter(Object parameterContext, String parameterName, String parameterDescription, String... referencedParameters) {
parameterContext.with {
activeChoiceReactiveReferenceParam(parameterName) {
description(parameterDescription)
choiceType(CHOICE_TYPE_FORMATTED_HTML)
referencedParameters.each { referencedParameter(it) }
}
}
}
Это генерирует:
<org.biouno.unochoice.DynamicReferenceParameter>
<name>BRANCH</name>
<description>...the description...</description>
<randomName>choice-parameter-12102071997857508</randomName>
<visibleItemCount>1</visibleItemCount>
<referencedParameters>STAGE, DATABASE</referencedParameters>
<choiceType>ET_FORMATTED_HTML</choiceType>
<omitValueField>false</omitValueField>
<parameters class="linked-hash-map"/>
</org.biouno.unochoice.DynamicReferenceParameter>
Затем второй метод:
static void activeChoiceFormattedHtmlScript(Object jobContext, String parameterName, Class scriptClass) {
jobContext.with {
configure { node ->
def parameterNode = node / 'properties' / 'hudson.model.ParametersDefinitionProperty' / 'parameterDefinitions' / 'org.biouno.unochoice.DynamicReferenceParameter'
parameterNode << 'script'('class':'org.biouno.unochoice.model.GroovyScript') {
'secureScript' {
'script'(ScriptReader.readScript(scriptClass))
'sandbox'('false')
'classpath' {
'entry' {
'url'("file:${GROOVY_JAR}")
}
}
}
'secureFallbackScript' {
'script'('')
'sandbox'('false')
}
}
}
}
}
Это добавляет скрипт:
<org.biouno.unochoice.DynamicReferenceParameter>
<name>BRANCH</name>
<description>...the description...</description>
<randomName>choice-parameter-12102071997857508</randomName>
<visibleItemCount>1</visibleItemCount>
<referencedParameters>STAGE, DATABASE</referencedParameters>
<choiceType>ET_FORMATTED_HTML</choiceType>
<omitValueField>false</omitValueField>
<parameters class="linked-hash-map"/>
<script class="org.biouno.unochoice.model.GroovyScript">
<secureScript>
<script>...the script...</script>
<sandbox>false</sandbox>
<classpath>
<entry>
<url>file:/path/to/my/groovy-library.jar</url>
</entry>
</classpath>
</secureScript>
<secureFallbackScript>
<script/>
<sandbox>false</sandbox>
</secureFallbackScript>
</script>
</org.biouno.unochoice.DynamicReferenceParameter>
А теперь для моей проблемы: Во втором методе configure
выбирает первый org.biouno.unochoice.DynamicReferenceParameter
. Но так как я хочу добавить больше параметров, мне нужно выбрать его по имени, а не только по первому найденному узлу. В противном случае я всегда перезаписываю сценарий первого параметра, а все остальные параметры не будут иметь сценария Groovy.
Я пытался получить доступ к ... / 'org.biouno.unochoice.DynamicReferenceParameter' / 'name' / parameterName
, который работает, но, конечно, пишет в неправильном месте и разрушает <name>
узел.
Я также пытался использовать ... / 'org.biouno.unochoice.DynamicReferenceParameter' / 'name' / parameterName
, а затем parameterNode.parent
, но, похоже, это возвращает null
.
Может кто-нибудь дать подсказку? Что я делаю не так?