Jenkins Promoted Builds Plugin
This plugin allows you to distinguish good builds from bad builds by
introducing the notion of ‘promotion’.Put simply, a promoted build is a
successful build that passed additional criteria (such as more comprehensive
tests that are set up as downstream jobs.) The typical situation in which you
use promotion is where you have multiple ‘test’ jobs hooked up as downstream
jobs of a ‘build’ job. You’ll then configure the build job so that the build
gets promoted when all the test jobs passed successfully. This allows you to
keep the build job run fast (so that developers get faster feedback when a
build fails), and you can still distinguish builds that are good from builds
that compiled but had runtime problems.
Another variation of this usage is to manually promote builds (based on
instinct or something else that runs outside Jenkins.) Promoted builds will
get a star in the build history view, and it can be then picked up by other
teams, deployed to the staging area, etc., as those builds have passed
additional quality criteria. In more complicated scenarios, one can set up
multiple levels of promotions. This fits nicely in an environment where there
are multiple stages of testings (for example, QA testing, acceptance testing,
staging, and production.)
When a build is promoted, you can have Jenkins perform some actions (such as
running a shell script, triggering other jobs, etc. — or in Jenkins lingo, you
can run build steps.) This is useful for example to copy the promoted build to
somewhere else, deploy it to your QA server. You can also define it as a
separate job and then have the promotion action trigger that job.
Do not rely on files in the workspace
The promotion action uses the workspace of the job as the current directory
(and as such the execution of the promotion action is mutually exclusive from
any on-going builds of the job.) But by the time promotion runs, this
workspace can contain files from builds that are totally unrelated from the
build being promoted.
To access the artifacts, use the Copy Artifact Plugin and choose
the permalink.
To use this plugin, look for the “Promote builds when…” checkbox, on the
Job-configuration page. Define one or a series of promotion processes for
the job.
How might you use promoted builds in your environment? Here are a few
use cases.
Artifact storage — you may not want to push an artifact to your main artifact
repository on each build. With build promotions, you can push only when an
artifact meets certain criteria. For example, you might want to push it only
after an integration test is run.
Manual Promotions - You can choose a group of people who can run a promotion
manually. This gives a way of having a “sign off” within the build system. For
example, a developer might validate a build and approve it for QA testing only
when a work product is completed entirely. Then another promotion can be added
for the QA hand off to production.
Aggregation of artifacts - If you have a software release that consists of
several not directly related artifacts that are in separate jobs, you might
want to aggregate all the artifacts of a proven quality to a distribution
location. To do this, you can create a new job, adding a “Copy artifacts from
another job” (available through Copy Artifact plugin”) for each item you want
to aggregate. To get a certain promotion, select “Use permalink” in the copy
artifact step, then your promoted build should show up in the
list of items to copy.
One of the possible criteria for promoting a build is “When the following
downstream projects build successfully”, which basically says if all the
specified jobs successfully built (say build BD of job JD), the build in the
upstream will be promoted (say build BU of job JU.)
This mechanism crucially relies on a “link” between BD and BU, for BU isn’t
always the last successful build. We say “BD qualifies BU” if there’s this
link, and the qualification is established by one of the following
means:
Note that in the case #1 above, JU and JD doesn’t necessarily have to have any
triggering relationship. All it takes is for BD to use some fingerprinted
artifacts from BU, and records those fingerprints in BD. It doesn’t matter how
those artifacts are retrieved either — it could be via
Copy Artifact Plugin, it could be through a maven repository, etc. This
also means that you can have a single test job (perhaps parameterized), that
can promote a large number of different upstream jobs.
The following environment variables are added for use in scripts, etc.
These were retrieved from github here.
PROMOTED_URL
- URL of the job being promoted
PROMOTED_JOB_NAME
- Promoted job namePROMOTED_NUMBER
- Build number of the promoted jobPROMOTED_ID
- ID of the build being promotedPROMOTED_USER_NAME
- the user who triggered the promotionPROMOTED_JOB_FULL_NAME
- the full name of the promoted job
freeStyleJob(String jobname) {
properties{
promotions {
promotion {
name(String promotionName)
icon(String iconName)
conditions {
selfPromotion(boolean evenIfUnstable = true)
parameterizedSelfPromotion(boolean evenIfUnstable = true, String parameterName, String parameterValue)
releaseBuild()
downstream(boolean evenIfUnstable = true, String jobs)
upstream(String promotionNames)
manual(String user){
parameters{
textParam(String parameterName, String defaultValue, String description)
}
}
wrappers {
/* build wrappers, e.g. credentialsBinding */
}
actions {
shell(String command)
}
}
}
}
}
See WrapperContext and StepContext in the API Viewer for full documentation about the possible wrappers and actions.
freeStyleJob('test-job') {
properties{
promotions {
promotion {
name('Development')
conditions {
manual('testuser')
}
wrappers {
timestamps()
}
actions {
shell('echo hello;')
}
}
}
}
}
Artifact Promotion Plugin For Jenkins Pipeline
- Under GSoC 2019.