Fabric8 Documentation

Continuous Integration and Continuous Delivery

fabric8 provides Continuous Integration and Continuous Delivery (CI and CD) infrastructure built as a set of Kubernetes resources which are easy to Install.

Continous Delivery Diagram

Overview

Continuous Integration and Continuous Delivery in fabric8 consists of the following open source components:

  • Jenkins for Building, Continuous Integration and creating Continuous Delivery pipelines.
  • Nexus as the artifact repository for caching public artifacts and hosting canary and real release artifacts
  • Gogs for on premise git repository hosting and GitHub for public hosting

In addition it adds the following optional capabilities:

To use the functions and steps in this library just add the following to the top of your Jenkinsfile:

@Library('[email protected]')
  • Jenkinsfile Library is a library of reusable Jenkinsfile files you can copy into your project. This library is also used by the developer console to provide the choice of pipelines when creating a project (via the underlying JBoss Forge wizard)

  • fabric8.yml file as a per project configuration file to tie together the various projects, repositories, chat rooms, workflow script and issue tracker

  • ChatOps via hubot lets your team embrace devops, have chat notifications of changes to the system and use chat for approval of release promotion
  • Chaos Monkey to test the resilience of your system by killing pods!
  • SonarQube provides a platform to maintain code quality

You can choose to opt in or out of any of the micro services within fabric8; for example use any git repository hosting or Nexus installation. The Chat integration works with hubot so that it can work with any back end chat service such as IRC, Slack, HipChat, Campfire etc.

By default we try and integrate all the components closely out of the box so fabric8 is an easy, 1 click install. e.g. by default Jenkins builds will use the local Nexus server for all downloads of maven artifacts and for all releases.

Since fabric8 is built on top of Kubernetes we get an easy way to scale (e.g. Jenkins build slaves) together with letting us reuse Kubernetes services for service discovery to wire up the various components (e.g. for Jenkins to discover Nexus). If you opt out of any of the default implementations; you just need to create a Kubernetes Service pointing to your external installation of the service.

Discovering Jenkins Jobs

With the advent of Jenkins Pipelines (included by default from version Jenkins 2.0) its considered good practice to define your pipline in a file called Jenkinsfile and to copy that into the root folder of your git repository.

GitHub Organisation plugin

The github organisation plugin can be configured to automatically iterate through all repositories for a given organisation and then for each repository it will find all branches with a Jenkinsfile and automatically setup a build job for the pipeline. Then all the build jobs appear in the developer console.

Multibranch plugin

The pipeline multibranch plugin automatically creates a jenkins job for every branch in a repository that has a Jenkinsfile. Then all the build jobs appear in the developer console.

Demo

Here is a video demonstrating Fabric8 Continuous Delivery Pipelines