Skip to content

Shared library for Jenkins Pipelines

License

Notifications You must be signed in to change notification settings

daos-stack/pipeline-lib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pipeline-lib

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.

Required Trusted Global Library Support

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.

Optional System Global Library Support

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.

Optional Global variables

coverityToolDownloadSystem

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:

project

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.

tool_path

This is the directory that the tool should be installed in.

It should return 0 if successful.

provisionNodesSystem

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.

arch

The architecture to use. Default is 'x86_64', currently the only one that Jenkins is building.

distro

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.

NODELIST

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.

node_count

This is a number containing the actual count of nodes that should be provisioned out of the NODELIST parameter above.

profile

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.

power_only

This optional parameter is set to true to just do a reboot the nodes with a power cycle operation.

timeout

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.

inst_repos

Optional DAOS stack repositories that should be configured.

inst_rpms

Optional Additional RPMs that should be installed.

publishToRepositorySystem

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.

arch

The architecture to use. Default is 'x86_64', currently the only one that Jenkins is building.

maturity

Maturity level: eg: 'stable'|'dev'|'test'. The default is 'test' which is intended for a temporary test repository used to test this method.

product

The name of the product.

repo_dir

The directory to post the artifacts from.

tech

This is the same as the distro for node provisioning, such as "centos7".

test

This is for testing this method. The intent is to create a temporary repository and then delete it. Default is false.

type

Type of repository. Default is "hosted".

download_dir

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.