Blue Ocean – Create Pipelines easily

BlueOcean is a plugin on top of Jenkins which makes creating and maintaining piplines fun.

Getting Started

Docker

If you want to start playing with it the easiest way to get started is through docker.
docker run -p 8080:8080 jenkinsci/blueocean
This will pull the image from docker-registry and run Blueocean with Jenkins locally.


Manual Installation

If you directly want to set it up on a VM or locally, jenkins doc should be a good starting point.

Defining a pipeline

Blueocean’s preferred source of pipeline configuration is Jenkinsfile. Jenkinsfile is built on the motivation of pipeline as code. Jenkinsfile describes the steps and execution details of tasks in the pipeline.

Creating a pipeline involves selecting the repository, blueocean out of the box supports git.

Task definition can be either created by the visual editor Or created manually. For a sample Jenkins file i will use the configuration below.

Or created manually. For a sample Jenkins file i will use the configuration below.

Build your project

Builds can be triggered manually or through webhooks integration.

I hope this post gives you the basic idea about what blueocean is and if it might be worth trying.

Making of a container: Cgroups and Namespaces

Let me clear out one thing – Containers are not a thing. VMs are a thing FreeBSDs Jails and Solaris containers are primitive concepts, Containers are almost a clever trickery over Linux
kernel features.

Most of the container management tool out there including docker are made up from Linux kernel primitives C-groups and namespace;(yes they have a lot of tooling and patches that make the environment more consistent and stable).

C-groups and namespaces
Cgroups and namespace applied on process groups allow the container to have an isolated and accounted environment.

Namespaces

Namespaces provides the necessary isolation on subsystems. This allows the processes to run in their own bubble.
Some of the namespace are listed.

  • pid – Allows processes to see only processes inside the group
  • net – Namespace for the network.Everything from ip tables to routing rules.
  • uts – namespace hostname
  • ipc
  • mnt
  • user

Convenient utility to run process in new namespace UNSHARE(1)
unshare -p -f /bin/bash

C-groups

Control groups allow for accounting and throttling of sub-systems like io, memory, cpu.

  • Memory cgroup – memory group
  • CPU cgroup
  • CPUset cgroup
  • BlockIo cgroups
  • Network io cgroup
  • Device cgroups

Control groups have a file based Api and can be accessed through /sys/fs/cgroup/. Though its is advised to use a higher level abstraction than directly writing to files.
# tree -L 1 -d /sys/fs/cgroup/

|– blkio
|– cpu -> cpu,cpuacct
|– cpuacct -> cpu,cpuacct
|– cpu,cpuacct
|– cpuset
|– devices
|– freezer
|– hugetlb
|– memory
|– net_cls -> net_cls,net_prio
|– net_cls,net_prio
|– net_prio -> net_cls,net_prio
|– perf_event
|– pids
|– systemd