I am trying to pass a parameter to a scheduled build, but the build does 
not get the parameter.

When ProjectA schedule a build of ProjectB it should pass along a parameter 
I called UPSTREAM_TRIGGERED.
When ProjectB starts building there are no parameters passed in from 
ProjectA.

I have the following Groovy Postbuild script running.
#!/usr/bin/env groovy

import jenkins.model.Jenkins
import hudson.matrix.MatrixProject
import hudson.matrix.MatrixBuild;
import hudson.matrix.MatrixRun;
import hudson.console.ModelHyperlinkNote
import hudson.model.Action
import hudson.model.Cause
import hudson.model.ParametersAction
import hudson.model.ParametersDefinitionProperty
import hudson.model.BooleanParameterValue
import hudson.model.Cause.UpstreamCause
import hudson.model.queue.QueueTaskFuture
import hudson.model.Result

if (manager.buildIsA(MatrixBuild.class)) {
    final def build = manager.build
    final def buildProject = build.getParent()

    def upstreamTrigger = false
    def upstreamTriggerValue = manager.envVars['UPSTREAM_TRIGGERED']
    if (upstreamTriggerValue != null && !upstreamTriggerValue.isEmpty()) {
        upstreamTrigger = Boolean.parseBoolean(upstreamTriggerValue)
    }

    if (upstreamTrigger) {
        return
    }

    final def downstreamProjects = manager.envVars['DOWNSTREAM_PROJECTS']
    if (downstreamProjects != null) {
        final def downstreamProjectsList = downstreamProjects.split(", 
").toList()

        final def preliminaryResult = build.getResult()
        if (preliminaryResult.isBetterOrEqualTo(Result.SUCCESS)) {
            downstreamProjectsList.each { projectName ->
                def project = 
Jenkins.instance.getItemByFullName(projectName)
                if (project == null) {
                    manager.listener.logger.println("Cannot schedule build. 
Poject " + projectName + " does not exist")
                    return
                }

                if (project.isDisabled()) {
                    manager.listener.logger.println("Project " + 
ModelHyperlinkNote.encodeTo(project) + " disabled. Skipping build")
                    return
                }

                def params = []
                def extraParameterValue = new 
BooleanParameterValue('UPSTREAM_TRIGGERED', true)
                params.add(extraParameterValue)

                /* Add the project's default parameters */
                def parametersDefProp = 
project.getProperty(ParametersDefinitionProperty.class)
                parametersDefProp.getParameterDefinitions().each { param ->
                    def parameterValue = param.getDefaultParameterValue()
                    params.add(parameterValue)
                }

                def parametersAction = new ParametersAction(params)

                def cause = new UpstreamCause(build)
                manager.listener.logger.println("Schedule job " + 
ModelHyperlinkNote.encodeTo(project))
                def futureTask = 
project.scheduleBuild2(project.quietPeriod, cause, parametersAction)

                if (futureTask == null) {
                    manager.listener.logger.println("Unable to schedule job 
for " + ModelHyperlinkNote.encodeTo(project))
                    manager.buildUnstable()
                    return
                }

                MatrixBuild startedBuild = futureTask.waitForStart();
                if (startedBuild == null) {
                    manager.listener.logger.println("Failed to start " + 
ModelHyperlinkNote.encodeTo(project))
                    manager.buildUnstable()
                    return
                }

                manager.listener.logger.println("Build " + 
ModelHyperlinkNote.encodeTo('/'+ startedBuild.getUrl(), 
startedBuild.getFullDisplayName()) + " started")
                MatrixBuild finishedBuild = futureTask.get()
                def finishedBuildResult = finishedBuild.getResult()

                
manager.listener.logger.println(ModelHyperlinkNote.encodeTo('/'+ 
finishedBuild.getUrl(), 
                        finishedBuild.getFullDisplayName()) + " completed 
with result " + finishedBuildResult)

                if (finishedBuildResult.isWorseThan(Result.SUCCESS)) {
                    manager.buildUnstable()
                }
            }
        }
    } else {
        manager.listener.logger.println("No downstream projects to trigger")
    }
}

I included the complete script for measure. I believe the problem lies with 
this code snippet in the script
def params = []
def extraParameterValue = new BooleanParameterValue('UPSTREAM_TRIGGERED', 
true)
params.add(extraParameterValue)

/* Add the project's default parameters */
def parametersDefProp = 
project.getProperty(ParametersDefinitionProperty.class)
parametersDefProp.getParameterDefinitions().each { param ->
    def parameterValue = param.getDefaultParameterValue()
    params.add(parameterValue)
}

def parametersAction = new ParametersAction(params)

def cause = new UpstreamCause(build)
manager.listener.logger.println("Schedule job " + 
ModelHyperlinkNote.encodeTo(project))
def futureTask = project.scheduleBuild2(project.quietPeriod, cause, 
parametersAction)

The parameter I try to read from environment variables are always "false"
    def upstreamTriggerValue = manager.envVars['UPSTREAM_TRIGGERED']
    manager.listener.logger.println "upstreamTriggerValue=" + 
upstreamTriggerValue
This prints out upstreamTriggerValue=false
   

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jenkinsci-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-dev/34b95aef-25d1-4030-af1d-6bf28e487e81%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to