or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing
xxxxxxxxxx
RDO Components and the Component Promotion Pipeline
tags:
Design
This document describes how the component promotion pipeline has been designed in a simple form.
Background Info
Components and the Component Pipeline (click to expand/collapse)
What are Components?
OpenStack packages are built by DLRN. The RDO team has grouped OpenStack projects e.g. openstack/neutron or openstack/glance and grouped into logical buckets called Components using metadata in rdoinfo.
Currently there are 15 components:
What is the component pipeline?
The component promotion pipeline is a means to consistently deliver validated working components of OpenStack without having to hold back all of OpenStack due to one failing piece. When a component passes it's validation it's added to a group of packages tagged with a label called "promoted-components". Essentially the promoted-components are a known good working set of the components in OpenStack.
The component promotion pipeline is an additional layer to the traditional promotion pipeline that provides a more reliable set of components to the continuous build and delivery of TripleO.
Motivation
In older OpenStack releases a single build is created for all of OpenStack and TripleO. There are hundreds of changes in any given build that can cause a build to fail. This is a large problem to debug and solve, and takes a considerable amount of time to debug. By breaking OpenStack into several smaller components we narrow the reduce the change set from hundreds of changes to just a few and limited to the scope of the OpenStack projects in the component.
Additionally one of the goals of the group has been to be able to release a version TripleO at any given time. In order to release at any time in a cycle you have to maintain a known good list and builds of OpenStack. The component pipeline achieves this goal by only promoting working builds of each component. Working components proceed through the pipelines while broken components are held back until fixed.
Goals
Production View
The upstream component pipelines can be found in the following links
Glossary
Completed Work
Further Development
Overview
The new promotion pipeline is composed by component and integration promotions:
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →A real time view into the above promotions can be found here:
Another example with failing components
Example of a security failing, while the latest compute and network patches flow through.
Zuul Pipelines
The component pipeline is broken down into separate Zuul pipelines per component:
https://review.rdoproject.org/zuul/builds?pipeline=openstack-component-compute
The job that promotes to promoted-components hash runs in a separate pipeline as well:
https://review.rdoproject.org/zuul/builds?pipeline=openstack-promote-component
Design
Component promotion pipeline consumes the individual built component repos containing unique hashes, run a set of validation tests, and promotes each component hash to feed the integration pipeline.
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →Components build
Components are individually built and placed (by the infra team) in a repository at https://trunk.rdoproject.org/centos8-master/component/
Promotion pipeline workflow
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →Promotion hashes
consistent
Each component built will get its own repository setup and an unique build hash on
https://trunk.rdoproject.org/centos8-master/component/compute/consistent/
component-ci-testing
Before any component promotion job runs, the consistent hash is pinned to component-ci-testing hash, so the build can be consumed even if a new build updates consistent hash.
Component promotion jobs run and validate the built component with a stable version of all other components.
promoted-components
Components that successfully run the promotion jobs are promoted to promoted-components hash.
For example, for compute component, delorean promotes by naming the repository location as follows:
https://trunk.rdoproject.org/centos8-master/component/compute/promoted-components
Delorean also creates the consolidated repo for all promoted components, to be placed at https://trunk.rdoproject.org/centos8-master/promoted-components/delorean.repo
Jobs
Promote consistent to component-ci-testing
The consistent hash of a component repository is promoted to component-ci-testing to pin the hash for running the promotion jobs with the same hash, as new hashes may be generated with new builds.
Component (validation) jobs
For now standalone is the only validation job in the component pipeline. The job overrides the stable containers w/ the new built ones to be tested for a single component.
Promote component-ci-testing to promoted-components
The component is promoted by a Zuul job in an independent pipeline. It runs the promote-hash role, checks the promotion criteria with the delorean api[2], and promotes the hash to promoted-components.
Component promotion sequence:
Speculatively test two unpromoted components together
There are times when one component will not promote until another component promotes due to cross rpm dependencies. One could force a promotion of one of the components to unlock the dependency.
A better way is to test two components together.
Implications to the Promotion Pipeline
The promotion pipeline is now broken down into 2 parts:
A higher level view of the internal workflow with component and integration can be found here link
commit_hash vs build_id
commit_hash
The commit_hash uniquely identifies a single component repository. It preserves the same functionality from the former promotion pipeline, but only for a single component.
This implies in modifications to how jobs parse commit.yaml to get the hash that identifies the repository to be used.
https://trunk.rdoproject.org/centos8-master/component/compute/0e/d0/0ed00643bff0002f04288e4e208c88ed614f111f_c9bfa013/
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →Jobs from integration pipeline won't get commit.yaml to setup repos or parse delorean.repo to upload images. Instead, they will use build_id to identify a group of components promoted and ready to consume.
build_id
build_id is a md5 hash generated to uniquely identify a build of components collection.
It is generated everytime a component is promoted. The delorean.repo file is updated with the hash of the promoted component and a new md5 build_id is created.
In the integration pipeline, instead of consuming commit_hash from commit.yaml file, jobs need to parse a new build.yaml file containing the build_id with the consolidated repository with all promoted components.
Assumptions:
Spec for promoting promoted-components -> tripleo-ci-testing
(spec by wes hayutin, owner rlandy)
A job will handle the promotion of promoted-components -> tripleo-ci-testing. Promotions for current-tripleo and current-tripleo-rdo will be handled by the promotion-server
When md5_url is defined
md5_url is the key that trigger promoting all the components indivdually at once to tripleo-ci-testing.
In a zuul unprotected repo create a task that creates the information required to promote all the components at once. As discussed a new task in https://github.com/rdo-infra/ci-config/tree/master/ci-scripts/infra-setup/roles/get_hash/tasks
Information required for the promotion.
The information will be consumed by the Promote hash label task and promote_hash.sh script.
rfolco, rlandy, and wes discussed the following..
Filename: baremetal ( match the name)
A file per component will allow us to loop and source the component information easily.
Loop through components and promote
An example of how this works can be found in the gist
See: https://github.com/rdo-infra/review.rdoproject.org-config/blob/master/roles/promote-hash/tasks/promote-primary-distro.yaml for details
MOLECULE ( test it), owner: rfolco
Monitoring
validation jobs: CI jobs in the Zuul pipeline that compose the criteria to promote a individual component, such as container build, standalone, etc. ↩︎
delorean api: https://trunk-staging.rdoproject.org/api-centos-master-uc ↩︎