-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Minor
-
Component/s: active-choices-plugin
-
Environment:Jenkins: v2.280
Active Choice Plugin: v2.5.6
Java 11 Open JDK 64 bit
I want to access environment variables in a Reactive Reference Parameter Formatted HTML parameter.
I have a MultibranchPipeline Job in which I want to populate a parameter with dynamic values based on the branch name.
My use case: I have an Azure Container Registry in which I have Docker Images with the following pattern: <branch_name>/<project>. In my multibranch pipeline job, I would like to access only the projects on that branch.
I tried to use the env.BRANCH_NAME variable but I couldn't manage to. I guess that value is populated at build time, and I can't access it beforehand.
My code:
[
$class: 'DynamicReferenceParameter',
choiceType: 'ET_FORMATTED_HTML',
name: 'Tag',
omitValueField: true,
description: 'Select the tag to be deployed.',
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: false,
script: '''
return """
<label for='value'>Error: The script failed or it is not allowed by Jenkins. Check Script approval from General Settings. Enter the value manually:</label><br>
<input type='text' name='value'>
"""
'''
],
script: [
classpath: [],
sandbox: false,
script: '''
def jsonSlurper = new groovy.json.JsonSlurper()
def acrCred = jenkins.model.Jenkins.instance.getExtensionList('com.cloudbees.plugins.credentials.SystemCredentialsProvider')[0].credentials.find { it ->
it.getId() == 'my_id'
}
def acrUsername = acrCred.getUsername()
def acrPassword = acrCred.getPassword().getPlainText()
def auth = "${acrUsername}:${acrPassword}".bytes.encodeBase64().toString()
def tags = ['projA', 'projB'].collect { name ->
def req = (HttpURLConnection) new URL("https://${acrUsername}.azurecr.io/acr/v1/${env.BRANCH_NAME}/${name}/_tags").openConnection()
req.setRequestProperty('Authorization', "Basic ${auth}")
def result = jsonSlurper.parseText(req.inputStream.text)
result.tags.sort { a, b -> b.createdTime <=> a.createdTime }.collect { it.name }
}
tags = tags[0].intersect(tags[1])
def html = "<select name='value'>"
tags.forEach { tagName ->
html += "<option value='${tagName}'>${tagName}</option>"
}
html += "</select>"
return html
'''
]
]
]
I'm opening this issue because in your docs you mentioned that we have access to two env variables:
- jenkinsProject
- jenkinsBuild
I tried to use them but I get the following error:
hudson.remoting.ProxyException: groovy.lang.MissingPropertyException: No such property: jenkinsBuild for class: WorkflowScript
That error occurs when I use triple double quotes, i.e.:
script: """jenkinsBuild.foo"""
If instead, I use triple single quotes my fallback script runs.
My question: Is there any way of getting the branch name in a Reactive Reference Parameter Formatted HTML?