Shared library for daos-stack Jenkins Pipelines
This is a shared library used with the Jenkinsfiles for the various projects in daos-stack.
Jenkinsfiles are limited in how large they can be and Declarative pipelines are also limited in what they can do.
This pipeline-lib is meant to run in a Jenkins Groovy Sandbox and is intended to be specific to the daos-stack project.
Operations that are not allowed in a Jenkins Groovy Sandbox should be put in a global pipeline library that is local to the Jenkins operation.
These include things like canceling Jenkins jobs for superceeded commits in pull requests.
The [trusted-pipeline-lib]https://github.com/daos-stack/trusted-pipeline-lib or a fork of it is required to provide both some useful generic building scripts, and also for using Jenkins groovy methods that are blocked by the Jenkins sandbox.
That library README.md file provides documentation of those routines.
The use of the system pipeline library is intended to be optional.
The methods that reference it will test for it to be present and will not fail the basic building procedure if it is not present.
The methods used by the pipeline-lib are either CI system specific, or need to be customized by the local site using an additional locally maintained pipeline library.
We will try to keep the interface to these routines stable, but may need to change them to optimize the CI system.
The coverityToolDownloadSystem needs to be provided if you are doing your own Coverity analysis on daos-stack builds.
Your routine will need to map the 'project' name to the your Coverity project and add the access credentials to pull down the tool kit, and then unpack it into the 'tool_path' specified directory.
This step takes a map of with these member names:
Coverity Project name for the daos-stack project. This is only used for downloading the coverity tools, so can be any project name that you have a coverity credential ID for, so your routine can ignore this parameter.
This is the directory that the tool should be installed in.
It should return 0 if successful.
This is method for provisioning a set of nodes for your local CI system. As we improve our CI system this may change a bit.
This method is used to install an operating system on a set of test nodes for a CI test.
The current implementation takes a Map variable containing the following members.
The architecture to use. Default is 'x86_64', currently the only one that Jenkins is building.
A common encoding of the distribution type and version.
The default is "centos7"
Currently supported is "centos7", "centos8", "leap15" Future support may be for "sles15", "ubuntu20", and potentially names with "rc" and point release suffixes. The "rc" would be for future release candidate, and the point release would be to test for an older point release than the current point release.
This is a string containing a comma separated list of the nodes available for CI use. There may be more nodes provided in this list than the CI test requested depending on current node allocation system.
This NODELIST is also provided as a NODELIST environment variable.
This is a number containing the actual count of nodes that should be provisioned out of the NODELIST parameter above.
This is a profile to use for provisioning. The default and currently only profile being used is "daos_ci".
The profile indicates which options should be installed for a distribution.
This optional parameter is set to true to just do a reboot the nodes with a power cycle operation.
Timeout to wait for provisioning to complete. The default that we use is 30 minutes.
If timeout is less than or equal to 0, it means that the routine should not wait for provisioning to complete. This would require that the CI have a way to determine when provisioning is completed and we are not yet using that feature, but may in the future.
Optional DAOS stack repositories that should be configured.
Optional Additional RPMs that should be installed.
This is a method for for saving aritfacts to a local repository such as Nexus-oss edition.
As we improve our CI system, this may change a bit.
Your routine can map these values as needed for your repository layout.
Some of the member names below come from recomendations for Artifactory use.
The current implementation takes a Map variable containing the following members.
The architecture to use. Default is 'x86_64', currently the only one that Jenkins is building.
Maturity level: eg: 'stable'|'dev'|'test'. The default is 'test' which is intended for a temporary test repository used to test this method.
The name of the product.
The directory to post the artifacts from.
This is the same as the distro for node provisioning, such as "centos7".
This is for testing this method. The intent is to create a temporary repository and then delete it. Default is false.
Type of repository. Default is "hosted".
Optional download directory. If present, download the artifacts after the upload to validate.
The publishToRepositorySystem step should download the artifacts back to this directory and fail the step if the contents differ.