Jenkins Xを使ってKubernetesでDevOps

【連載】

Kubernetes入門

【第16回】Jenkins Xを使ってKubernetesでDevOps

[2020/08/17 08:00]正野 勇嗣 ブックマーク ブックマーク

今回取り上げる「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」を紹介します。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします
注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
ミッションステートメント
教えてカナコさん! これならわかるAI入門
AWSではじめる機械学習 ~サービスを知り、実装を学ぶ~
対話システムをつくろう! Python超入門
Kubernetes入門
SAFeでつくる「DXに強い組織」~企業の課題を解決する13のアプローチ~
PowerShell Core入門
AWSで作るマイクロサービス
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

会員登録(無料)

ページの先頭に戻る