Fuel 7.0 introduces a new build system called Perestroika. It uses standard upstream Linux distribution tools in order to:
Every package is built in a clean and up-to-date buildroot. Packages, their dependencies, and build dependencies are fully self-contained for each OpenStack release. Any package included in any release can be rebuilt at any point in time using only the packages from that release.
The package build CI is reproducible and can be recreated from scratch in a repeatable way.
Perestroika is based on Docker which provides an easy distribution. Each supported Linux distribution contains proper Docker images with necessary tools and scripts.
For the advantages of Perestroika over OBS build system, see Replace OBS with another build system.
This part is based on Jenkins CI tool. All jobs are configured using
jenkins-job-builder
. Jenkins has a separate set of jobs for each
[customer name]+[fuel version] case. Gerrit-trigger is configured
to track events from the {version} branch of all the [customer-name]
Gerrit projects.
Each set of jobs contains:
.rpm
and .deb
).rpm
and .deb
).rpm
). In case
of using cluster packages, they are optional..rpm
).rpm
and .deb
)These are hardware nodes with preconfigured build tools for all the supported distributions. They are configured as Jenkins slaves.
Each worker contains:
mockbuild
builds packages using Mock (CentOS 6 and 7 target
distributions are supported).sbuild
builds packages using SBuild tool (Ubuntu Trusty
Tahr target distribution is supported only).Building stage flow:
Packaging CI uses short-lived Docker containers to perform package building. Docker images contain preconfigured build tools only. There are no chroots inside images. Build chroots are mounted to a Docker container at start in a read-only mode. Additionally tmpfs partition is mounted over a read-only chroot folder with AUFS overlays inside a Docker container. The container is destroyed once the build stage is completed.
Goals of this scheme:
If the build stage finishes successfully, Jenkins runs a publishing job. The Publisher node contains all repositories for all customer projects. It is configured as a Jenkins slave. The repositories are maintained by native tools of their respective distribution (reprepro or createrepo).
The Publisher slave is fully private and available from Jenkins Master node only because of containing a GPG key. All the packages and repositories are signed in terms of their respective distribution by GPG keys that are stored on the Publisher node.
Publishing stage:
scp
)..rpm
and source .deb
) with GPG keys.rsync
).All repositories are available through http or rsync protocols and are synced by a Publisher to a Mirror host.
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.