3.7 KiB
CI Infrastructure
This spec captures the work necessary to provision CI infrastructure for the project. This spec covers following topics:
- Underlying hardware and virtualized infrastructure
- Source code repositories
- CI tools - Jenkins, Zuul, Nodepool, etc
- Methods of deployment of CI tools
- Configuration of CI infrastructure
Problem description
There are several goals for CI infrastructure:
- Reproducibility - it should be a matter of a few actions to roll out new infrastructure if the old one is gone.
- Re-use existing tools - reuse whatever is available from MOS Infra and upstream OpenStack Infra.
- Dogfooding - we should run every infrastructure service on top of OpenStack in the same way upstream OpenStack Infra is running on top of public clouds. Possibly we should use MCP, then MOS and Mirantis cloud.
Use cases
Proposed change
Services
Setup infrastructure and automation for provisioning of the following components:
- Jenkins Jenkins will run CI jobs
- Nodepool and VM-based workers Nodepool will provision single-use
worker machines for Jenkins on infra OpenStack cloud. Following types of
workers will be provisioned:
- Build machine ** With Docker engine pre-installed ** Python dependencies pre-installed ** Everything else needed to build and publish Docker images
- Hardware Jenkins workers These servers will be used for deployment jobs (each job can spawn multiple VMs e.g. multinode K8s cluster).
- Zuul Zuul will launch Jenkins jobs based on events from Gerrit
- LMA (Logging, Monitoring, Alerting) services and tools:
The LMA subsystem will consist of various components: 4.1. Static log storage Will be used to publish logs from automated CI jobs
4.2. Advanced logging and searching services: This part of LMA is very important but not critical for operation of CI. It will be covered under separate research including the following technologies: * ELK stack (ElasticSearch, Logstash, Kibana), if possible integrated with Jenkins using existing solution. The idea is to send logs from CI jobs to ELK for further analysis. * ElasticRecheck: if possible to be based on upstream solution http://docs.openstack.org/infra/system-config/elastic-recheck.html * Stacklight https://launchpad.net/lma-toolchain
- Artifact repository. This repository will serve several purposes:
- Storage for Docker images
- Local cache for DEB packages
Infrastructure
Alternatives
Implementation
Assignee(s)
- Primary assignee:
-
Mateusz Matuszkowiak
Work items
- deploy HW workers
- create VMs
- configure networking
- deploy all services from Puppet manifest
- configure related repositories
- create sample jobs
Services are documented here: https://mirantis.jira.com/wiki/display/NG/CI+design
Dependencies
Testing
Basic tests of CI infrastructure should be done by running sample jobs that execute "hello-world" type of shell scripts on selected nodes (bare metal, VM or on K8s cluster).