Define a CI Component in the blueprint
The following discussion from !93574 (merged) should be addressed:
-
@grzesiek started a discussion: We should define what a "component" is, before we move forward with MVC.
From the blueprint the Characteristics of a component are:
For best experience with any systems made of components it's fundamental that components are single purpose, isolated, reusable and resolvable.
- Single purpose: a component must focus on a single goal and the scope be as small as possible.
- Isolation: when a component is used in a pipeline, its implementation details should not leak outside the component itself and into the main pipeline.
- Reusability: a component is designed to be used in different pipelines. Depending on the assumptions it's built on a component can be more or less generic. Generic components are more reusable but may require more customization.
- Resolvable: When a component depends on another component, this dependency needs to be explicit and trackable. Hidden dependencies can lead to myriads of problems.
Other aspects to document:
- define inputs/outputs of a component.
- 1 component per project or multiple components per project?
- where should the component metadata and content be defined? Can the component references internal files (e.g. scripts)?
- How to use components and how to reference them
- path from Catalog + version
- path from Catalog + sha
- local components
- Can the metadata and content be validated using static schema validation such as JSON validator?
/cc @fabiopitino
Edited by Fabio Pitino