.. This work is licensed under a
   Creative Commons Attribution 4.0 International License.
.. integration-CICD:

.. integration_main-doc:

CI/CD
=====

.. important::
   Integration team deals with 2 different CI/CD systems.

  - Jenkins CI/CD, CI managed by LF IT and CD by Integration team
  - GitLab-ci managed by Integration and OOM team

Continuous Integration
----------------------

The CI part provides the following features:

- Repository verification (format of the INFO.yaml)
- Patchset verification thanks to json/yaml/python/go/rst/md linters. These Jenkins
  verification jobs are hosted in the ci-management repository. They can vote
  +1/-1 on patchset submission. Integration team systematically enables linters
  on any new repository
- Docker build: Integration team builds testsuite dockers and xtesting dockers.
  These dockers are built then pushed to Nexus through a jjb also hosted in the
  ci-management repository.

The different verification chains are defined in https://jenkins.onap.org/:

- CSIT: https://jenkins.onap.org/view/CSIT/
- testsuite: https://jenkins.onap.org/view/testsuite/
- integration: https://jenkins.onap.org/view/integration/
- integration-terragrunt: https://jenkins.onap.org/view/integration-terragrunt/
- testsuite-robot-utils: https://jenkins.onap.org/view/testsuite-robot-utils/

The Jenkins jobs (jjb) are hosted in https://git.onap.org/ci-management/.

Continuous Deployment
---------------------

There are 2 Continuous Deployment architectures.

Jenkins CD on Windriver/Intel lab
..................................

The CD part on Windriver/Intel is based on Jenkins.

It is based on a standalone VM hosting a Jenkins server.
The credentials of this VM as well as the Jenkins server have been provided to
integration committers.

Several jobs can be triggered from this Jenkins interface.
Historically several chains were run daily (staging/release) but due to
performance issues, they have all been stopped.
Only SB-00 has been kept for use case support.
The Jenkins interface was however used to launch the installation of SB-00.

This Jenkins script is leveraging resources available in OOM and integration
repositories.

The replacement of this CD by a GitLab runner based CD to unify the CD
management was planned, but finalizing the operation in Guilin was not possible
due to performance issues.

GitLab CD
.........

This CD is leveraging public gitlab-ci mechanism and used to deploy several ONAP
labs:

- Daily Master: daily run using OOM Master
- Daily Guilin: daily run using the last stable version during Honolulu Release
  processing
- Daily Honolulu: daily run setup at RC0 (candidate dockers available for integration)
- Weekly Master: run once a week with longer tests
- Weekly Honolulu: run once a week with longer tests
- Gating: run on OOM, clamp or SO patchset submission. It means a full ONAP
  deployment on demand based on new patchset declared in gerrit.

See :ref:`Integration CI guideline  <integration-ci>` for details.
