Skip to content

Commit

Permalink
JENKINS-50125 Add DefaultParametersAction to triggered job.
Browse files Browse the repository at this point in the history
  • Loading branch information
ceilfors committed Apr 23, 2018
1 parent 28c104e commit ec0e6c1
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 0 deletions.
Expand Up @@ -7,6 +7,8 @@ import com.ceilfors.jenkins.plugins.jiratrigger.integration.JulLogLevelRule
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException
import hudson.model.AbstractBuild
import hudson.model.FreeStyleProject
import hudson.model.ParametersDefinitionProperty
import hudson.model.StringParameterDefinition
import hudson.model.TaskListener
import hudson.security.GlobalMatrixAuthorizationStrategy
import hudson.security.HudsonPrivateSecurityRealm
Expand Down Expand Up @@ -128,6 +130,28 @@ class JiraTriggerIntegrationTest extends Specification {
build.getEnvironment(TaskListener.NULL).get('ASSIGNEE') == ''
}

@Issue('JENKINS-50125')
def 'Should retain default parameters from parameterised job'() {
given:
def issue = TestUtils.createIssue('TEST-1234')
def project = jenkins.createJiraCommentTriggeredProject('job')
project.addProperty(new ParametersDefinitionProperty([new StringParameterDefinition('PARAM', 'param')]))
project.addParameterMapping('KEY', 'key')
jenkins.quietPeriod = 0

when:
def scheduledProjects = jenkins.jiraTriggerExecutor.scheduleBuilds(
issue, TestUtils.createComment(JiraCommentTrigger.DEFAULT_COMMENT))

then:
issue.assignee == null
scheduledProjects.size() != 0
AbstractBuild build = jenkins.getScheduledBuild(scheduledProjects[0])
def environment = build.getEnvironment(TaskListener.NULL)
environment.get('PARAM') == 'param'
environment.get('KEY') == 'TEST-1234'
}

@Issue('JENKINS-41878')
def 'Should not serialize any Atlassian issue object into build.xml'() {
given:
Expand Down
Expand Up @@ -4,6 +4,7 @@ import com.ceilfors.jenkins.plugins.jiratrigger.JiraTrigger
import com.ceilfors.jenkins.plugins.jiratrigger.parameter.CustomFieldParameterMapping
import com.ceilfors.jenkins.plugins.jiratrigger.parameter.IssueAttributePathParameterMapping
import hudson.model.FreeStyleProject
import hudson.model.JobProperty

/**
* @author ceilfors
Expand Down Expand Up @@ -31,6 +32,11 @@ abstract class JiraTriggerProject {
project.save()
}

void addProperty(JobProperty jobProperty) {
project.addProperty(jobProperty)
project.save()
}

String getAbsoluteUrl() {
project.absoluteUrl
}
Expand Down
Expand Up @@ -3,6 +3,7 @@ package com.ceilfors.jenkins.plugins.jiratrigger
import com.atlassian.jira.rest.client.api.AddressableEntity
import com.atlassian.jira.rest.client.api.domain.Issue
import com.ceilfors.jenkins.plugins.jiratrigger.jira.JiraClient
import com.ceilfors.jenkins.plugins.jiratrigger.parameter.DefaultParametersAction
import com.ceilfors.jenkins.plugins.jiratrigger.parameter.ParameterMapping
import groovy.util.logging.Log
import hudson.model.Action
Expand Down Expand Up @@ -50,6 +51,7 @@ abstract class JiraTrigger<T> extends Trigger<Job> {
if (parameterMappings) {
actions << new ParameterMappingAction(issue, parameterMappings)
}
actions << new DefaultParametersAction(this.job)
actions << new JiraIssueEnvironmentContributingAction(issue)
actions << new CauseAction(getCause(issue, t))
log.fine("[${job.fullName}] - Scheduling build for ${issue.key} - ${getId(t)}")
Expand Down
@@ -0,0 +1,31 @@
package com.ceilfors.jenkins.plugins.jiratrigger.parameter

import hudson.model.Job
import hudson.model.ParameterValue
import hudson.model.ParametersAction
import hudson.model.ParametersDefinitionProperty

/**
* <tt>DefaultParametersAction</tt> is required because we are using <tt>ParametersAction</tt>
* in <tt>ParametersMappingAction</tt>. The default values of a parameterised job is only
* automatically populated by ParameterizedJobMixIn.scheduleBuild2 when <tt>ParametersAction</tt>
* absent from the scheduled actions. The proper solution is to use <tt>EnvironmentContributingAction</tt>
* instead of <tt>ParametersMappingAction</tt>, but unfortunately this solution is not viable due to JENKINS-46482.
*
* Generating default values by ourselves (instead of relying on #scheduleBuild2) seems to be a common solution in
* the community. Example: https://github.com/jenkinsci/ghprb-plugin/blob/c15d5106e78f7f028c6305dccf01b77cc9a724b3/
* src/main/java/org/jenkinsci/plugins/ghprb/GhprbTrigger.java#L386
*
* @author ceilfors
*/
class DefaultParametersAction extends ParametersAction {

DefaultParametersAction(Job job) {
super(getDefaultParameters(job))
}

private static List<ParameterValue> getDefaultParameters(Job job) {
ParametersDefinitionProperty pdp = job.getProperty(ParametersDefinitionProperty)
pdp != null ? pdp.parameterDefinitions*.defaultParameterValue : []
}
}

0 comments on commit ec0e6c1

Please sign in to comment.