Skip to content

About

Jenkins Pipelines Definitions describing the different stages for a given job

Resources

Security policy

Stars

2 stars

Watchers

6 watching

Forks

Latest commit

 

History

198 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Jenkins-Pipelines

This project gathers all the Jenkins pipeline definitions (Jenkinsfile) used by the Continuous Integration and Continuous Delivery (CI/CD) platform of Silverpeas.

Each pipeline describes the different stages of a given Jenkins job: constructing and publishing a build version of a project, releasing a stable version, generating and publishing the documentation and the community web site, producing the Docker images, or testing the installation and the upgrade of the platform.

Goal

The Silverpeas platform is made up of several independent Git projects (Silverpeas-Core, Silverpeas-Components, Silverpeas-Looks, Silverpeas-Assembly, Silverpeas-Setup, Silverpeas-Distribution, ...) plus a set of satellite libraries and tools. Building, releasing and delivering all of them consistently requires an automated and reproducible chain of jobs.

The purpose of this project is to define, to version and to share, in a single place, the whole description of that chain so that:

  • the CI/CD workflow of Silverpeas is documented, reviewable and traceable through the SCM history;
  • any job of the Silverpeas Jenkins server just refers to a Jenkinsfile of this project instead of embedding its own script;
  • the builds are reproducible: almost all the pipelines run within a dedicated Docker image (silverpeas/silverbuild) in order to containerize the build from the host OS and to pin the versions of the JDK, of Maven and of the Wildfly instance used by the integration tests.

Organization

The pipelines are located in the src directory, and are split by purpose:

src/
├── builds/     pipelines constructing a build (non-stable) version of a project
├── releases/   pipelines releasing a stable version of a project or an artifact
├── tests/      pipelines validating the installation and the upgrade processes
├── pipeline.gdsl
└── pipeline-syntax.gdsl

src/builds

Pipelines producing a build version, id est a non-stable version timestamped with the date of the build (<next release>-build<yyMMdd>), deployed into the builds repository of the Silverpeas Nexus server. A build version for which the tests and the quality analysis weren't skipped is a candidate for a release of a stable version.

Pipeline Purpose
project the Silverpeas Project POM (parent POM of all Silverpeas projects) and its two BOM projects
silverpeas Silverpeas itself: Core, Components, Assembly, Setup, Distribution and Looks
mobile Silverpeas Mobile
kernel the Silverpeas Kernel library, built at each push onto its main branch
sso the SSO library for Silverpeas
wbe the Web Browser Edition library for Silverpeas
jackrabbit-jca the RAR of JackRabbit JCA customized for Silverpeas
jcr-access-control the JCR access control library for JackRabbit
project-doc the web site of the open-source community of Silverpeas
coverity-scan the Coverity static analysis of the Silverpeas source code

src/releases

Pipelines releasing a stable version, usually from a given build version, and publishing it into the releases repository of the Silverpeas Nexus server. Beside the Maven artifacts, they also take care of the delivery of the platform:

Pipeline Purpose
project, kernel the project definition (parent POM and BOMs) and the Silverpeas Kernel library
silverpeas a stable version of Silverpeas; it triggers most of the pipelines below
sso, wbe the SSO and the Web Browser Edition libraries
jackrabbit-jca, jcr-access-control the JackRabbit related artifacts
silverpeas-doc the documentation of a new version of Silverpeas and the community web site
izpack the IzPack installer of a stable version of Silverpeas
docker-build the Docker image used to build the Silverpeas projects
docker-dev the Docker image providing a reproducible development environment
docker-test the Docker image of a version of Silverpeas for testing purpose
docker-prod the production-ready Docker image, submitted to the Docker official images

src/tests

Pipelines checking, against the last build version of Silverpeas, that the installation process and the upgrade process of the platform work as expected.

The GDSL files

pipeline.gdsl and pipeline-syntax.gdsl describe the Jenkins pipeline DSL (steps, global variables, environment variables) to the Groovy support of IntelliJ IDEA. They are here only to provide code completion and to avoid false errors when editing a Jenkinsfile in the IDE; they are never executed by Jenkins.

Conventions expected by the pipelines

Most of the pipelines rely upon conventions on the Jenkins side; they are documented in the header comment of each Jenkinsfile. The main ones are:

  • Job naming: a job running a build pipeline is expected to be named [ANY WORD]_[TYPE_BRANCH]_[ANY WORD], with TYPE_BRANCH being Master for the main development branch, Stable for the branch of the current stable version, or the name of an older stable branch. The pipeline figures out from it both the SCM branch to check out and the version of the Docker image to use.
  • Environment variables: STABLE_BRANCH (the SCM branch in which the current stable version is maintained) and IMAGE_FOR_STABLE (the version of the Docker image to use for that stable version) have to be set at the Jenkins level.
  • Job dependencies: the pipelines exchange their result through a YAML build report (build.yaml) archived as an artifact of the job. For instance, the build of Silverpeas fetches the report of the Silverpeas_Project_Definition_AutoDeploy job to know the version of the parent POM to use, and the release pipelines fetch the report of the corresponding *_AutoDeploy job to know the build version from which the release has to be done.

Usage

In Jenkins, declare a Pipeline job whose definition is Pipeline script from SCM, referring to this Git repository and to the path of the wished Jenkinsfile (for example src/builds/silverpeas/Jenkinsfile). Then set the environment variables and the parameters expected by that pipeline, as stated in its header comment.

License

This project is released under the terms of the GNU General Public License version 3; see the LICENSE file.

About

Jenkins Pipelines Definitions describing the different stages for a given job

Resources

Security policy

Stars

2 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors