Difference between revisions of "Continuous Integration: Releases Maven"
Manuele.simi (Talk | contribs) (→Build Configurations) |
Manuele.simi (Talk | contribs) (→Build Configurations) |
||
Line 60: | Line 60: | ||
= Build Configurations = | = Build Configurations = | ||
− | The build | + | The build configurations must guarantee the integrity of the Continuous Integration pipeline. Jenkins builds must use only the outcomes of other Jenkins builds. |
A snapshot artifact built on a development machine and deployed to Maven snapshot repository is a potential threat for the integration process. There are several cases in which such an artifact could be not in sync with the content of the SCM repository. For instance: | A snapshot artifact built on a development machine and deployed to Maven snapshot repository is a potential threat for the integration process. There are several cases in which such an artifact could be not in sync with the content of the SCM repository. For instance: | ||
* it is built from a branch not built on Jenkins, | * it is built from a branch not built on Jenkins, | ||
Line 78: | Line 78: | ||
* Create ad-hoc artifacts or repositories | * Create ad-hoc artifacts or repositories | ||
− | By combining the build profiles in the appropriate settings file, we support the build configurations with the Maven Repositories: | + | By combining the build profiles in the appropriate settings file, we support the following build configurations with the Maven Repositories: |
[[File:CI_Maven_Repos.png|800px]] | [[File:CI_Maven_Repos.png|800px]] | ||
''Back to the [[Continuous_Integration_procedure_(2019) | CI guide]].'' | ''Back to the [[Continuous_Integration_procedure_(2019) | CI guide]].'' |
Revision as of 16:52, 29 May 2019
Contents
Maven Build Profiles
A gCube artifact can be built in 3 different situations:
- on a personal (development) machine, likely after new code has been developed, by a gCube developer
- on a Jenkins slave, likely triggered by a new commit in the Git repository
- on a Jenkins slave, as part of the release pipeline
To support these scenarios, the following profiles are defined in the gCube maven-parent.
gcube-developer
- Dependencies resolved against gcube-snapshots and gcube-releases
- Snapshot artifacts deployed to gcube-snapshots
- Deployments of releases artifacts are not permitted
jenkins-snapshots
- Dependencies resolved against local-snapshots and gcube-releases
- Snapshot artifacts installed to local-snapshots
- Snapshot artifacts deployed to gcube-snapshots
- Deployments of release artifacts are not permitted
jenkins-releases
- Dependencies resolved against gcube-releases
- Deployments of snapshot artifacts are not permitted
- Release artifacts deployed to gcube-releases
dry-run
This profile disables all the deployments (regardless the maven commands) by skipping the deploy phase. It can be combined with the previous profiles
disable-java8-doclint
This profile sets an additional parameter for javadoc generation to disables the doclint. It avoids the build fails if formal/syntax errors are found in javadoc comments.
Maven Settings Files
The activation and switch among the build profiles is done through different settings.xml files available in the Configs project.
gcube-developer-settings.xml
Used by: gCube Developer Installed on: development machine
jenkins-snapshots-settings.xml
Used by: Jenkins jobs Installed on: slave node
jenkins-snapshots-dry-run-settings.xml
Used by: Jenkins pipeline jobs When: To test a complete snapshot without deploying on a remote repo Installed on: slave node
jenkins-release-settings.xml
Used by: Jenkins pipeline jobs Installed on: slave node
jenkins-release-dry-run-settings.xml
Used by: Jenkins pipeline jobs When: To test a complete release without deploying on a remote repo Installed on: slave node
Build Configurations
The build configurations must guarantee the integrity of the Continuous Integration pipeline. Jenkins builds must use only the outcomes of other Jenkins builds. A snapshot artifact built on a development machine and deployed to Maven snapshot repository is a potential threat for the integration process. There are several cases in which such an artifact could be not in sync with the content of the SCM repository. For instance:
- it is built from a branch not built on Jenkins,
- the source code that generates it is committed but not pushed
- it has dependencies on the local environment not reproducible on the Jenkins slaves
- ..and so on
What we need
- Jenkins must use only artifacts generated by Jenkins builds to resolve dependencies.
- Snapshot artifacts deployed to Maven snapshot repository by developers must not be seen by Jenkins
- Jenkins must deploy to Maven snapshot repository after successful builds
- Release artifacts are built and deployed to the Maven release repository (gcube-releases) only by Jenkins
What we are trying to avoid
- Reconfigure all the Jenkins projects at each release time
- Change all the poms before starting the release integration
- Create ad-hoc artifacts or repositories
By combining the build profiles in the appropriate settings file, we support the following build configurations with the Maven Repositories:
Back to the CI guide.