Search⌘ K
AI Features

Installing Jenkins X Using GitOps Principles

Explore the process of installing Jenkins X by applying GitOps principles. Understand how to define Jenkins X configurations as code, customize the jx-requirements.yml file, and use the boot process to deploy and manage your Kubernetes cluster setup efficiently. This lesson enables you to leverage Git-based configuration management for a repeatable and secure Jenkins X installation.

How can we install Jenkins X in a better way than what we’re used to? Jenkins X configuration should be defined as code and reside in a Git repository, and that’s what the community created for us. It maintains a GitHub repository that contains the structure of the definition of the Jenkins X platform, together with a pipeline that will install it, as well as a requirements file that we can use to tweak it to our specific needs.

Taking a look at the GitHub repository

Let’s take a look at the repository.

Shell
open "https://github.com/jenkins-x/jenkins-x-boot-config.git"

We’ll explore the files in it a bit later. Or, to be more precise, we’ll explore those that you are supposed to customize.

Defining variables

Next, we’ll define a variable CLUSTER_NAME that will, as you can guess, hold the name of the cluster we created a short while ago.

⚠️ In the commands that follow, please replace the first occurrence of [...] with the name of the cluster and the second with your GitHub user.

Shell
export CLUSTER_NAME=[...]
export GH_USER=[...]

Cloning the repository

Now that we forked the Boot repo and we know what our cluster is called, we can clone the repository with a proper name that will reflect the naming scheme of our soon-to-be-installed Jenkins X.

Shell
git clone \
https://github.com/jenkins-x/jenkins-x-boot-config.git \
environment-$CLUSTER_NAME-dev

Exploring and modifying the jx-requirements.yml file

The key file that contains (almost) all the parameters that can be used to customize the setup is jx-requirements.yml. Let’s take a look at it.

Shell
cd environment-$CLUSTER_NAME-dev
cat jx-requirements.yml

The output is as follows.

C++
cluster:
clusterName: ""
environmentGitOwner: ""
project: ""
provider: gke
zone: ""
gitops: true
environments:
- key: dev
- key: staging
- key: production
ingress:
domain: ""
externalDNS: false
tls:
email: ""
enabled: false
production: false
kaniko: true
secretStorage: local
storage:
logs:
enabled: false
url: ""
reports:
enabled: false
url: ""
repository:
enabled: false
url: ""
versionStream:
ref: "master"
url: https://github.com/jenkins-x/jenkins-x-versions.git
webhook: prow

As you can see, that file contains values in a format that resembles requirements.yaml file used with Helm charts. It is split into a few sections.

🔍 The format of the jx-requirements.yml file might have changed since I wrote this section, so your output might be different. Nevertheless, what I’m describing should give you a good enough grip over the values you can tweak, and you should be able to extend that knowledge to those not represented here.

The cluster section

First, there is a group of values that define our ...