This repository holds a shared library for Jenkins Pipeline.
The Jenkins library requires sophisticated operation on Jenkins objects, which requires it to be setup as Global Pipeline Libraries
to avoid extra In-process Script Approval
.
- In The
Manage Jenkins
-Configure System
section, findGlobal Pipeline Libraries
and clickADD
.- Give the library a name, for example,
jenkins-library
. SetDefault version
tomaster
. - For
Retrieval method
, chooseModern SCM
.- For
Source Code Management
section, chooseGitHub
. - Configure github connection to this repository
- For
- Give the library a name, for example,
If you didn't check Load implicitly
when configuring the job, you need to use @Library
to import it.
In your Jenkinsfile, you can add def lib = library("jenkins-library").org.zowe.jenkins_shared_library
on top of the file to import library.
Then you can use any classes/methods defined in the library. For example:
github = lib.scm.GitHub.new(this)
github.init([...])
github.commit('my test')
To start tests, run the gradle command gradle test
.
Run the gradle command gradle groovydoc
to generate documentation.
All below scenarios are based on master
version v2.3.4
as the example, timestamp string example is 20190101000000
.
- Allow all branches to publish artifacts for debugging purpose.
- Release is only performed when we want to, so it's always started manually.
- The release stage doesn't have option to choose MINOR/MAJOR/SPECIFIC version bump. Those actions should be handled in GitHub with Pull Requests.
- The release stage doesn't have manual approval option. We assume everything pushed into
master
branch is for release purpose and have been reviewed by Pull Request reviewers.
- For each pipeline, we have 2 build parameters are only available to branches which can do a
release
:Perform Release
: boolean, default is false.Pre-Release String
: string, default is empty. This parameter will only be used ifPerform Release
is true. This parameter is required if the release is not happening onmaster
orv?.x/master
branch.
- By default, only
master
,v?.x/master
,staging
andv?.x/staging
branches can do a release. This can be changed bypipeline.addReleaseBranches(...branches)
orpipeline.setReleaseBranches(...branches)
. - For NPM packages, each branch can have a npm publish tag name when performing release build. By default,
master
's tag islatest
,staging
's tag isdev
. For branches that do not have a publish tag defined, or branches not in the release build, npm publish will use the defaultsnapshot
tag name, and the version will have the normalized branch name included. For example,staging
branch non-release build will generate a versionv2.3.4-staging-snapshot.20190101000000
release onsnapshot
npm tag.staging
branch release build will generate a versionv2.3.4-dev.20190101000000
release ondev
tag. And a branchfeature/lts
build will generate a versionv2.3.4-feature-lts-snapshot.20190101000000
release onsnapshot
tag. - For pax/zip packages, each branch can also have a release tag name. By default,
master
's tag is 'snapshot'. If it's not defined, artifactory publish will use branch name as tag name. For example,master
non-release build will publish artifact tolibs-snapshot-local/org/zowe/<component>/2.3.4-snapshot/
and release build will publish tolibs-release-local/org/zowe/<component>/2.3.4/
.staging
non-release build will publish artifact tolibs-snapshot-local/org/zowe/<component>/2.3.4-staging/
and release build will publish tolibs-release-local/org/zowe/<component>/2.3.4-rc1/
, therc1
is the pre-release string which is required.
- Scenario #1
- Build on
master
with default parameter values (Perform Release
= false,Pre-Release String
= empty)- for npm package, it will be published to
npm-local-release
asv2.3.4-snapshot-master.20190101000000
with npm tagsnapshot
. - for pax/zip(gradle) package, it will be published to
libs-snapshot-local/org/zowe/<component>/2.3.4-snapshot/
as<component>-2.3.4-snapshot.20190101000000.(pax|zip)
.
- for npm package, it will be published to
- No github tag will be created.
- No version bump will be performed on GitHub.
- Build on
- Scenario #2
- Build on
master
with (Perform Release
= true,Pre-Release String
= beta.1)- for npm package, it will be published to
npm-local-release
asv2.3.4-beta.1
with npm tagsnapshot
. - for pax/zip(gradle) package, it will be published to
libs-release-local/org/zowe/<component>/2.3.4/
as<component>-2.3.4-beta.1.(pax|zip)
.
- for npm package, it will be published to
- Github tag
v2.3.4-beta.1
will be created. - No version bump will be performed on GitHub after release.
- Build on
- Scenario #3
- Build on
master
with (Perform Release
= true,Pre-Release String
= empty)- for npm package, it will be published to
npm-local-release
asv2.3.4
with npm default taglatest
. - for pax/zip(gradle) package, it will be published to
libs-release-local/org/zowe/<component>/2.3.4/
as<component>-2.3.4.(pax|zip)
.
- for npm package, it will be published to
- Github tag
v2.3.4
will be created. - A PATCH level version bump will be performed on GitHub. This is to avoid release the same version again. So after version bump,
master
has version of2.4.0
, and a commit can be seen from github commit history. This commit should be merged/cherry-picked back tostaging
.
- Build on
- Scenario #dev-1
- Build on
staging
which IS a release branch with default parameter values (Perform Release
= false,Pre-Release String
= empty)- for npm package, it will be published to
npm-local-release
asv2.3.4-staging-snapshot.20190101000000
with npm tagsnapshot
. - for pax/zip(gradle) package, it will be published to
libs-snapshot-local/org/zowe/<component>/2.3.4-staging/
as<component>-2.3.4-staging.20190101000000.(pax|zip)
.
- for npm package, it will be published to
- No github tag will be created.
- No version bump will be performed on GitHub.
- Build on
- Scenario #dev-2
- Build on
staging
which IS a release branch with default parameter values (Perform Release
= true,Pre-Release String
= rc.1)- for npm package, it will be published to
npm-local-release
asv2.3.4-rc.1
with npm tagdev
. - for pax/zip(gradle) package, it will be published to
libs-snapshot-local/org/zowe/<component>/2.3.4-staging/
as<component>-2.3.4-staging.20190101000000.(pax|zip)
.
- for npm package, it will be published to
- No github tag will be created.
- No version bump will be performed on GitHub after release.
- Build on
- Scenario #dev-3
- Build on
staging
which IS a release branch with default parameter values (Perform Release
= true,Pre-Release String
= empty) - Build will be rejected because pre-release string is empty.
- Build on
- Typical Scenario
- A NPM project has
latest
,dev
,v1-latest
andv1-dev
tags.v1
is a LTS version, currentmaster
is onv2.3.4
. - There are 4 branches can do a release, the branch-tag mappings are:
master
-latest
staging
-dev
v1.x/master
-v1-latest
v1.x/staging
-v1-dev
- A NPM project has
- Release v2.3.4-rc.1
- Build
staging
with (Perform Release
= true,Pre-Release String
= rc.1). - Or build
master
with (Perform Release
= true,Pre-Release String
= rc.1), not suggested.
- Build
- Release v2.3.4
- Build
master
with (Perform Release
= true,Pre-Release String
= empty).
- Build
- Release v2.4.0
- Make a commit on
staging
to upgrade version to2.4.0
. - Build
staging
with (Perform Release
= true,Pre-Release String
= rc.1), we should havev2.4.0-rc.1
. - Create a Pull Request to merge
staging
intomaster
. After merged,master
should have a version definition of2.4.0
instead of2.3.4
. - build master with (
Perform Release
= true,Pre-Release String
= empty), we should havev2.4.0
.
- Make a commit on