.. _integration-ci:

Integration Continuous Integration Guide
----------------------------------------

Continuous Integration is key due to the complexity of the ONAP projects.
Several chains have been created:

- Daily stable chain
- Daily master chain
- Gating: On demand deployment of a full ONAP solution to validate patchsets

They are run on different environments (Orange labs, DT labs, Azure Cloud).

The following document will detail these chains and how you could set up such
chains and/or provide test results to the community.

Integration CI Ecosystem
------------------------

Overview
~~~~~~~~

The global ecosystem can de described as follows:

.. figure:: files/CI/ONAP_CI_10.png
   :align: center

Several chains are run in ONAP.
The CI chains are triggered from different CI systems (Jenkins or gitlab-ci) (1)
on different target environments hosted on community labs (Windriver,
Orange, DT, E///) or Azure clouds. Jobs (installation, tests) are executed on
these labs (2). At the end, the results are pushed through the OPNFV test API (3)
to a test database (4) hosted by Linux Foundation on
http://testresults.opnfv.org.
Results can be reported in different web pages hosted on LF or on gitlab.com (5).


Daily Chains
~~~~~~~~~~~~

CI daily chains (Master and last Stable) are run on Orange, DT using gitlab-ci
jobs and Ericsson using jenkins jobs.

Gating
~~~~~~

OOM gating has been introduced for El Alto. It consists of a deployment followed
by a set of tests on patchsets submitted to OOM repository.

The CI part is managed on gitlab.com and the deployment is executed on ONAP
Orange lab and Azure clouds.
The goal is to provide a feedback - and ultimately to vote - on code change
prior to merge to consolidate the OOM Master branch.

The developer can evaluate the consequences of his/her patchset on a fresh
installation.

The gating is triggered in 2 scenarios:

 - new patchset in OOM
 - comment with the magic word **oom_redeploy** is posted in the Gerrit's comment
   section

The procedure to submit new feature in CI is done in 3 steps as described in the
figure below:

.. figure:: files/CI/ONAP_CI_0.png
   :align: center


Visualization of the CI pipelines
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

As the CI chains are triggered from different systems, several web interfaces
can be used to visualize them.

A web site has been created to centralize the links on http://testresults.opnfv.org/onap-integration/index.html

.. figure:: files/CI/ONAP_CI_3.png
   :align: center

For Gating and gitlab.com based CI chains, the pipelines consist in pipelines of
pipelines managed through the chaining of .gitlab-ci.yml file thanks to an Open
Source deployment called chained-ci (https://gitlab.com/Orange-OpenSource/lfn/ci_cd/chained-ci).
A visualization tool is available to list all your chains as described in the
figure below:

.. figure:: files/CI/ONAP_CI_1.png
   :align: center

If you click on any element of the chain, you will open a new window:

.. figure:: files/CI/ONAP_CI_2.png
   :align: center

In order to provide the logs to the developer an additional web page has been
created to summarize the tests and grant access to their associated logs:

.. figure:: files/CI/ONAP_CI_8.png
   :align: center

Additionnaly, for the daily chain, another page displays the results as time
series, allowing to see the evolution of the tests over time.

.. figure:: files/CI/ONAP_CI_9.png
   :align: center


Setup Your Own CI Chains
------------------------

If you want to setup a gitlab.com based CI chain, and want to use chained-ci,
you can follow the tutorial on  https://gitlab.com/Orange-OpenSource/lfn/ci_cd/chained-ci-handson

You should be able to chain your automation projects:

* Create resources
* Deployment of Kubernetes
* Test of your Kubernetes (using OPNFV functest-k8s tests)
* Deployment of your ONAP (you can use your own automatic installation
  procedure or https://gitlab.com/Orange-OpenSource/lfn/onap/onap_oom_automatic_installation/)
* Test ONAP thanks to the differnet ONAP xtesting dockers covering infrastructure
  healthcheck, components healthcheck tests, end to end tests, security tests.

If you want to report your results to the community, do not hesitate to contact
the integration team. The Test database is public but the pods must be declared
to be allowed to report results from third party labs.


ONAP Integration Testing Gate
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

5 categories have been defined for the ONAP integration testing gate:

* infrastructure healthcheck: verify ONAP from a k8S perspective. It includes
  2 tests: onap-k8s (all the deployments, jobs, statefulste,..must be OK at
  the end of an installation), onap-helm (all the helm chart must be
  completed at the end of the installation)
* healthcheck: the traditionnal robot tests run from the cluster to perform
  tests on the different components.
* smoke-usecases: End to end tests
* candidate-usecases: New end to end tests introduced in the automation chain
  for the release
* security tests (security of kubernetes (CVE, CIS tests) and ONAP (exposed
  ports, check the containers run as root,...))
* benchmarking (robustness, stress tests): not yet available

All these tests have been packaged thanks to the OPNFV Open Source tool xtesting.
Xtesting is a python package allowing to unify the way to declare, run tests. It
also ensures a consistent way to get the test results whatever the test framework
used (python, robotframework, bash, ...). It includes the mechanism to
automatically push the results to the test database using the test API.
It simplifies the integration in CI.

The package can be found here https://pypi.org/project/xtesting/.

The different ONAP xtesting dockers can be found on https://gitlab.com/Orange-OpenSource/lfn/onap/integration/xtesting/container_registry

As an illustration, you can run the infrastructure healthcheck by typing the
following command::

    docker run -v <the kube config>:/root/.kube/config -v <result directory>:
    /var/lib/xtesting/results registry.gitlab.com/orange-opensource/lfn/onap/integration/xtesting/infra-healthcheck:latest

All the xtesting tests are included in Daily and gating chains.
Please note that you can build your own onap-xtesting docker if you want to
include your tests. See https://wiki.onap.org/pages/viewpage.action?pageId=79202765
for details.
