Jenkins: Passing Arguments between projects/builds

Problem: Test Project needlessly builds its target application

Currently Project2 requires a full build before executing tests - simply because the test tools are integrated into Project1.

Also, Project2 is a PHP Composer project, so the test tool binaries are NOT present after pulling source from SCM. Composer install is required before those binaries are available. With build times of roughly 50m & test times of less than 10m - this feels like insanity.

 

Solution

The project(Projec1) build & tests(Project2) need to be segregated so Project1 needs to pass its ${WORKSPACE} value to the triggered 'downstream' project. To do so use 'Predefined parameters':

Projec1 - Upstream - Parameters

BuildDeployWkspc=${WORKSPACE}
BuildDeployBuildNum=${BUILD_NUMBER}

 

Project2 - DownStream - Variables

$BuildDeployWkspc
$BuildDeployBuildNum

 

NEED TO EXPLORE SETTING PERSISTENT OS VARS

Need to build Project1, then test it with Project2 - BUT Project2 simply calls test resources in Project1.

Project2 has no inherent means to find the Project1 build workspace.

Ideally, Project2 could run multiple times without requiring timely building.

BASH

Project1 outputs its ${WORKSPACE} to $JENKINS_HOME or similar

Project2 reads & uses this value from the same location

 

ENVIRONMENT VARS

Project1 updates a ENV variable on each run

Project2 reads this variable

Is this bad practice, seeing that EXPORT will impact the entire host machine

 

Jenkins 'Parameterized Trigger' Plugin

https://wiki.jenkins.io/display/JENKINS/Parameterized+Trigger+Plugin

 

 


Jenkins Environment Variables

The following variables are available to shell scripts

BUILD_NUMBER
    The current build number, such as “153”
BUILD_ID
    The current build id, such as “2005-08-22_23-59-59” (YYYY-MM-DD_hh-mm-ss)
BUILD_DISPLAY_NAME
    The display name of the current build, which is something like “#153” by default.
JOB_NAME
    Name of the project of this build, such as “foo” or “foo/bar”. (To strip off folder paths from a Bourne shell script, try: ${JOB_NAME##*/})
BUILD_TAG
    String of “jenkins-${JOB_NAME}–${BUILD_NUMBER}“. Convenient to put into a resource file, a jar file, etc for easier identification.
EXECUTOR_NUMBER
    The unique number that identifies the current executor (among executors of the same machine) that’s carrying out this build. This is the number you see in the “build executor status”, except that the number starts from 0, not 1.
NODE_NAME
    Name of the slave if the build is on a slave, or “master” if run on master
NODE_LABELS
    Whitespace-separated list of labels that the node is assigned.
WORKSPACE
    The absolute path of the directory assigned to the build as a workspace.
JENKINS_HOME
    The absolute path of the directory assigned on the master node for Jenkins to store data.
JENKINS_URL
    Full URL of Jenkins, like http://server:port/jenkins/ (note: only available if Jenkins URL set in system configuration)
BUILD_URL
    Full URL of this build, like http://server:port/jenkins/job/foo/15/ (Jenkins URL must be set)
JOB_URL
    Full URL of this job, like http://server:port/jenkins/job/foo/ (Jenkins URL must be set)
SVN_REVISION
    Subversion revision number that’s currently checked out to the workspace, such as “12345”
SVN_URL
    Subversion URL that’s currently checked out to the workspace.

 

Tags