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