Help us understand the problem. What is going on with this article?

Google Cloud PlatformでJenkins Xを動かしてみた

More than 1 year has passed since last update.

何をやった?

Jenkins XをHello World的に触ってみました。
実現したのは以下です。

  • Githubからのwebhookで
  • GCP上のJenkins上にこしらえたビルドパイプラインが走り
  • GCP上のk8sクラスタのステージングコンテナにデプロイされるようにした。

やってみたところ、2019年3月現在では初期設定などに関して日本語での情報がまだまだ少なかったので、備忘録がてら記事を書きました。

前提状態

  • Githubのアカウントを持っている
    • リポジトリはなくてもOK
  • インターネットに接続できる
    • GCPに接続したいので
  • Windows 8
  • Google Chrome

Jenkins Xとは?

一言でいえば、
Gitによるソースコード管理とKubernetes上でのコンテナベースのアプリケーションデプロイを前提としたCI/CDソリューション
です。

:thinking:
要は、Gitでソースを管理していて、そのアプリをKubernetes上で立ち上げることを前提に、
Jenkinsを使ったCI/CDの仕組みをお手軽に構築できるというものです。
(もっといろいろできる気はしますが、最もシンプルな範囲で書いています)

手順

  • GCPことはじめ
  • jxのインストール
  • k8sクラスタの作成と、クラスタへのJenkinsXのインストール
  • アプリケーションのビルド・デプロイ

GCPことはじめ

公式手順はココです。

GCPを使ったことがない場合はさくっと登録をします。「GCP」とかでググれば一発です。
googleのアカウントさえ持っていれば、新たに入力する内容はほとんどないはずです。

GCPのダッシュボードまで表示できたら、最初はMy First Projectが選択されている(画面左上)はずですが、必要に応じて新しく自分のプロジェクトを作ります。

その後、右上のボタンを押してCloud Shellを立ち上げます。
image.png

jxのインストール

公式手順はココです。

Jenkins Xに関する操作は主にjxコマンドを使って行います。
先ほど立ち上げたCloud Shell上で以下を叩くだけでインストールできます。

curl -L https://github.com/jenkins-x/jx/releases/download/v1.3.973/jx-linux-amd64.tar.gz | tar xzv 
sudo mv jx /usr/local/bin

なお、Cloud Shellを再起動すると、/home/${Googleアカウント名}以下のディレクトリ以外はリセットされてしまうらしいです。
再起動後に「jx使えねぇ」となったらこれが原因の可能性が高いので、素直にインストールしなおしましょう。

k8sクラスタの作成と、クラスタへのJenkinsXのインストール

事前にGithubのアクセストークンを作っておきましょう。
スコープはこんな感じにします。
image.png

その後、以下を叩きます。

jx create cluster gke --skip-login

途中でいろいろと聞かれますが、以下のように答えました。

  • Select Jenkins installation type: static Jenkins
  • workload build pack: Kubernetes Workloads: Automated CI+CD with GitOps Promotion
  • Gitの情報を入力するところ: 自分の情報を入力
  • それ以外: そのままEnter

完了する間際くらいにJenkinsのadmin passwordが生成されているのでメモしておきます。

これで、

  • GCP上へのKubernetesクラスタの生成
  • k8sクラスタへのJenkins Xのインストール
  • Githubアカウントとの連携

をまとめて行った状態になります。

GCPから、k8s Engine → ワークロード → サービスの公開
にあるエンドポイントのURL(jenkins.jx.x.x.x.x.nip.io)にアクセスするとJenkinsが立ち上がっていることを確認できます。

アプリケーションのビルド・デプロイ

Jenkins、Github、k8sの下準備ができたので、実際にアプリをビルドしたりしてみるという話です。
パターンはいくつかあって、

などです。ここではひとまず3つ目のパターンで試してみました。

Quick Startでは、ビルド対象としてJenkins X側でテンプレートとして用意されているQuick Startプロジェクトを使います。
Githubに、Spring BootやGoなどいくつかの形式のwebアプリプロジェクトが公開されています。

まず、CLoud Shellで以下を叩きます。

jx create quickstart

・・・やることは以上です

  • 作成するリポジトリ名
  • 使用するQuick Startプロジェクト名
  • 初回コミットのコミットメッセージ

などを対話的に入力すると、指定した名前でGithubリポジトリが作成され、
push時に自動でビルドを走らせるwebhookの設定も自動で行われます。

さらに、自動で生成されたJenkinsfileをもとにパイプラインが走り始めます。
ビルド結果はJenkinsに反映され、アプリケーションはk8sクラスタ内にデプロイされます。

てきとうにコードを変更してpushすると、当然ながらwebhookにより再びビルドが走り始め、
変更を反映したアプリをデプロイする所まで勝手にやってくれる仕組みが整います。

ここまで一気に自動でいけるのはすごいです(小並感
※ビルド失敗時の通知については特に設定されないようなので、やりたければ自分の環境のものとつなぐ設定をする必要があります。失敗を通知するところまでがベストプラクティスのはず。

soyjoy666666
主にJenkinsおじさん
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした