10分で作るCI環境:HelmでDroneを立ててGithub Enterpriseと連携する方法


久しぶりになってしまいましたが、今回は
– OSSのCI/CDとして有名なDroneを
– Helmを使ってGKE上に構築し、
– cloudSQLをバックエンドとして使い、
– Github Enterpriseと連携する
やり方をまとめます。
最後までこの記事を読むと、Helmも、Droneもわかってしまう美味しい記事となっています。

なお先に白状すると、10分というのはGithubの場合(頑張ればそれくらいいけるんじゃないだろうか…?)で、
Github Enterpriseだと多分ネットワーク周りで作業が多いのでもっとかかります。

導入編

Droneって?

公式サイト
無料で使える、Go製のCI/CDツールです。
Github/Github Enterpriseなどと連携でき、リポジトリに簡単な .drone.yml を含めることでPRなどがhookされ、自動ビルドや自動デプロイを行うことができます。

Helmって?

Kubernetesを簡単に使うためのテンプレートファイルとそのコマンド群、みたいなイメージです。
k8sを使おうとすると大量のymlを書く必要がありますが、これはそれなりに苦痛です。
いわゆるベストな構成をみんなで共有できるように、コマンド一つで必要なPodやServiceなどのリソースを全て作成できるテンプレートファイル群にまとめられていて、それに自分の好みのパラメータなどを注入して使います。
Github
今回は、この中のDroneを作るテンプレートを使います。

Kubernetesって?

今までELB + EC2で作成していたようなサービスの「群」を、Dockerで全て作成できるようにしたイケてるインフラ環境です。
初めての方はこちら
初めての方はこちら

作り方

主に参考にしたのは、こちらのサイト
とはいえ最新版とけっこう違う & Github Enterpriseだと更にちょっと工夫が必要だったので、その点を主に説明します。

構築編

1. 周辺リソースを準備する

GKE上に構築する場合は、
– CloudSQL(HelmのDroneはデフォルトだとsqliteを使いますが、MySQLが必要ならば)
– GKE
あとは必要な権限を付与したサービスアカウントなどを発行しましょう。
Drone用のエンドポイントとなるFQDNを作るために、ドメインの取得やDNSレコードの設定などをします。グローバルIPも必要ですね。
Github Enterpriseと連携する場合はさらに、NATインスタンスの構築や、internal通信を許可するfirewallルールなどが必要になります。

2. Github EnterpriseでOauth application登録をする

Droneで使うのに必要なGithubのClientとSecretを発行するために、DroneのエンドポイントとなるFQDNなどを登録します。
Githubだとこのページ
Github Enterpiseはこちら

2. Droneの設定をymlに書いていく

Helmでは、デフォルトではvalues.ymlを用いてデプロイが行われます。
カスタムする場合は、values.ymlに自分ができる設定とその説明が全て書いてあるので、そのファイルをコピーするなどして自分のファイルを作成します。

以下、CloudSQLと連携する場合のymlのサンプルになります。

extraContainersで、GKEでCloud SQLを使うためにコンテナを追加します。
参考サイト:
https://qiita.com/quvority/items/34e394834a2fc4b8cf0a
http://yuki-toida.hatenablog.com/entry/2017/09/20/000000
https://cloud.google.com/sql/docs/mysql/connect-container-engine?hl=ja

extraVolumesでは、CloudSQLに接続できる権限を持ったサービスアカウントを発行して、それをk8sのsecretとしてデプロイしておき、drone-serverにマウントします。
https://github.com/kelseyhightower/gke-service-accounts-tutorial

ちなみに

この機能、執筆時点で昨日マージされた自分のPRでできるようになりました :tada:
Linux FoundationへのPRの出し方はこちらによくまとまってます。
PR作るまでがけっこう大変でした。

DRONEの環境変数系は0.7と0.8でかなり違うのでご注意を。

参考:

drone 0.7
https://medium.com/magnetis-backstage/how-to-deploy-drone-ci-to-kubernetes-205cd401595c
drone 0.8
http://docs.drone.io/release-0.8.0
http://docs.drone.io/database-settings/

3. Helmの初期化

Helmのインストールは brew install helm とかでシュッと入ります。
ただ、Helmを実行する権限をk8s内部で付与する必要があるので、下記のようなリソースを先にk8s内部に作成する必要があります。Helm公式

で、リソース作成。

これでhelmを利用する準備が整いました。

4.Helmでデプロイ

デプロイ時には helm upgrade -i <release name> -n <namespace> -f my_values.yml stable/drone などとコマンドを打つことになります。
releaseというのは、そのアプリを構成するservice, deploymentなどのk8sのリソースの1セットのバージョン管理の単位で、Helmでは名前をつけて管理します。
ver1 とか自分でわかるものを使いましょう。

無事に作成できていれば、Droneのコンソールにたどり着くはず!
使い方はこのあたりの記事をご参考に。
https://engineering.linecorp.com/ja/blog/detail/218
https://qiita.com/kurkuru/items/585ca5c83c48664273b2

シェアする

  • このエントリーをはてなブックマークに追加

フォローする