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.
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
Jenkinsfileof 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.
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
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 |
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 |
Pipelines checking, against the last build version of Silverpeas, that the installation process and the upgrade process of the platform work as expected.
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.
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], withTYPE_BRANCHbeingMasterfor the main development branch,Stablefor 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) andIMAGE_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 theSilverpeas_Project_Definition_AutoDeployjob to know the version of the parent POM to use, and the release pipelines fetch the report of the corresponding*_AutoDeployjob to know the build version from which the release has to be done.
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.
This project is released under the terms of the GNU General Public License version 3; see the LICENSE file.