今回取り上げる「Jenkins X」は、Kubernetesを前提としたCI/CDツールです。パイプラインによるビルドや、GitOps、環境のプレビューなどの機能を備えています。Kubernetes環境に、Jenkinsの各種プラグインを使ってCI/CD環境を一つずつ構築していく作業を簡単にしてくれます。

Jenkins Xの構成

公式サイトで紹介されている構成図は、以下の通りです。jxコマンド(JX API)を介してKubernetes APIサーバを叩くのが特徴となっています。

公式サイトで紹介されているJenkins Xの構成図

事前準備

では、早速Jenkins Xを使ってみましょう。以下で紹介する3つの手順で事前準備した後、jxコマンドを使ってJenkins X環境を構築します。これにより、サンプルアプリケーションを動作させるCI/CD環境を構築できます。

手順1:アクセストークンの取得

まずGitHubにアクセスして、アクセストークンを取得します。「Settings」→「Developer settings」を開き、「Generate new token」をクリックしてください。

アクセストークンの取得

「Note」に任意の値を入力し、「Select scopes」の全ての項目にチェックします。ページ末尾の「Generate Token」をクリックしてアクセストークンを生成します。

アクセストークンの取得 - 生成

生成されたトークンは以下のように表示されるので、必ず控えておくようにしましょう。

アクセストークンの表示

手順2:eksctlのインストール

次に、brewを使ってAmazon EKS(Elastic Kubernetes Service)用のCLIツールである「eksctl」をインストールしましょう。

$brew tap weaveworks/tap
Updating Homebrew...

~中略~

remote: Compressing objects: 100% (58/58), done.
remote: Total 465 (delta 22), reused 11 (delta 3), pack-reused 404
Receiving objects: 100% (465/465), 67.29 KiB | 425.00 KiB/s, done.
Resolving deltas: 100% (168/168), done.
Tapped 4 formulae (31 files, 106.9KB).
$brew install weaveworks/tap/eksctl
==> Installing eksctl from weaveworks/tap
==> Installing dependencies for weaveworks/tap/eksctl: kubernetes-cli and aws-iam-authenticator
==> Installing weaveworks/tap/eksctl dependency: kubernetes-cli

~中略~

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions

手順3:jxコマンドのインストール

続いて、brewを使ってJenins Xのjxコマンドをインストールしましょう。

$brew tap jenkins-x/jx
Updating Homebrew...

~中略~

==> Tapping jenkins-x/jx
Cloning into '/usr/local/Homebrew/Library/Taps/jenkins-x/homebrew-jx'...
remote: Enumerating objects: 160, done.
remote: Counting objects: 100% (160/160), done.
remote: Compressing objects: 100% (98/98), done.
remote: Total 15843 (delta 77), reused 110 (delta 46), pack-reused 15683
Receiving objects: 100% (15843/15843), 6.45 MiB | 3.05 MiB/s, done.
Resolving deltas: 100% (6809/6809), done.
Tapped 1 formula (36 files, 7MB).
$brew install jx
Updating Homebrew...

~中略~

==> Installing jx from jenkins-x/jx
xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun
==> Downloading http://github.com/jenkins-x/jx/releases/download/v2.0.1277/jx-da
==> Downloading from https://github-production-release-asset-2e65be.s3.amazonaws
######################################################################## 100.0%
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions have been installed to:
  /usr/local/share/zsh/site-functions
==> Summary

□  /usr/local/Cellar/jx/2.0.1277: 8 files, 213.3MB, built in 39 seconds

jxコマンドを使った環境構築

以下の4つの手順でKubernetesクラスタの構築からアプリケーションのデプロイまでを行い、Jenkins X環境を構築します。

jx create cluster
jx boot
jx create quickstart
jx promote

1. Kubernetesクラスタの作成(jx create cluster)

「jx create cluster」を実行します。これにより、eksctlが内部的に動作し、VPCやサブネット、EKSクラスタなど一通り作成してくれます。

$jx create cluster eks --skip-installation
Creating EKS cluster - this can take a while so please be patient...
You can watch progress in the CloudFormation console: https://console.aws.amazon.com/cloudformation/
[ℹ]  eksctl version 0.16.0

2. Jenkins X環境の構築(jx boot)

IngressやPodなどをDev/Staging/Productionの3環境分作成してくれます。加えてGitHub連携され、こちらもDev/Staging/Productionの3つのリポジトリが作成されます。内部的には、HelmやCloud Formationなどが動作します。

ここでは、「namespace」を「jx」に、「provider」を「eks(AWS環境前提のため)」とします。

$vi jx-requirements.yml

~中略~
cluster:
~中略~
  namespace: jx
  provider: eks

~後略~

「jx boot」を実行します。

$jx boot
Attempting to resolve version for boot config https://github.com/jenkins-x/jenkins-x-boot-config from https://github.com/jenkins-x/jenkins-x-versions.git
Booting Jenkins X

~中略(相当長いです)~

Installation is currently looking: GOOD

3. アプリケーションの構築(jx create quickstart)

アプリケーションを構築します。

$jx create quickstart --git-public=true
? select the quickstart you wish to create golang-http
~後略~

4. アプリケーションのデプロイ(jx promote)

ステージング環境と本番環境へデプロイします。

$cd jenkinsx-sample/
$jx promote jenkinsx-sample --version 0.0.1 --env production
~後略~

デプロイされたアプリケーションのURLを確認します。なお、以下で「xxx.xxx.xxx.xxx」としている部分には任意のIPアドレスを入れてください。

$jx get applications
APPLICATION     STAGING PODS URL                                                     PRODUCTION PODS URL
jenkinsx-sample 0.0.1   1/1  http://jenkinsx-sample-jx-staging.xxx.xxx.xxx.xxx.nip.io 0.0.1      1/1  http://jenkinsx-sample-jx-production.xxx.xxx.xxx.xxx.nip.io

確認したURLへブラウザからアクセスすると、以下のように表示されるはずです。

結果

* * *

今回は、Jenkins Xを使ってKubernetesをベースにしたCI/CD環境を構築する方法について解説しました。jxコマンドをいくつか叩くだけで、開発/ステージング/本番環境に至るまで容易に構築できることがおわかりいただけたかと思います。

CI系ツールには「CircleCI」や「AWS Code Build」、CD系ツールには「ArgoCD/FluxCD/Spinnaker」など、さまざまなツールが存在します。なかでも、Jenkins XはKubernetesを含め、IaC(Infrastructure as Code)領域まで踏み込んだ、非常にカバー範囲が広いツールです。ぜひ一度、ご自身の環境で試してみてください。

次回は、GitOpsを実現するためのKubernetes用CDツール「ArgoCD」を紹介します。