見出し画像

Now in REALITY Tech #54 サーバチームのCI/CDパイプライン

REALITYのサーバチームエンジニアのKuyamaです。
今週の「Now in REALITY Tech」では、REALITYのサーバチームにおけるCI/CDパイプラインについて説明したいと思います。

そもそも、CI/CDとは何か?
ということについては、ググれば沢山の情報がヒットしますので、ここでは割愛します。
簡単に言ってしまえば、アプリケーションのビルドからデプロイまでの流れを自動化するということです。

このビルドからデプロイまでの流れを自動化することのメリットとして、以下の2つが大きく挙げられます。

・各エンジニアが複雑なコマンドを叩く必要がなくなる。
・ビルド、デプロイが共通の環境で行われることで、個人の環境によって結果が左右されることがなくなる。

REALITYのサーバ構成

前提条件として、REALITYのサーバ構成とリソースの管理について軽く説明します。

REALITYのサーバでは、マイクロサービスアーキテクチャを採用しており、複数のサーバがバックエンドで動いています。

これらのサーバはGoogle Kubernetes Engine (GKE) 上で動いており、各サーバのソースコードはGithub上で管理しています。
また、GKE上の各リソースを定義するKubernetesのマニフェストファイルは、1つのリポジトリにまとめており、Github上で管理しています。

REALITYサーバチームのCI/CDパイプライン全体図

上記のサーバ構成、リソースの管理を前提に、サーバチームが現在使用しているCI/CDパイプラインについての図をお見せします。

図にある通り、サーバチームにおけるCI/CDパイプラインでは、Google Cloud Platform の Cloud Build、Github Actions、Argo CDを使用しています。

各ツールがどのように動作するか、詳しく述べていきます。

Cloud Build によるDockerイメージ作成

まず、REALITYのソースコードリポジトリのデプロイ用ブランチへのコミットのマージをトリガーとして、Cloud Build が自動的に発火します。

Cloud Build では、デプロイ用ブランチの内容から Docker イメージのビルドを行い、ビルド結果を Container Registry に保存します。
この時、作成した Docker イメージには、ビルド実行時の コミットハッシュをタグとして付与しておきます。
ビルドが完了したら、Github Actions に通知を行い、次の処理を実行させます。

Github Actions による Kubernetes マニフェストの書き換え

Cloud Build からの通知を受けた Github Actions では、Github 上で管理している Kubernetes のマニフェストファイルの書き換えを行います。

具体的には、各サーバの deployment リソースのマニフェストにおける、Dockerイメージで指定しているタグを、新しくビルドしたDockerイメージのタグで書き換えます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: appgateway
spec:
  template:
    spec:
      containers:
        - name: appgateway
          image: appgateway:hogehoge // hogehogeの部分が書き換えられる

Argo CD による自動デプロイ

Github 上の Kubernetes マニフェストファイルを書き換えると、Argo CDが書き換えを検知します。

この状態で、Argo CD の GUI から「Sync」ボタンを押すと、マニフェストに沿って Argo CD がデプロイを行なってくれます。

Argo CDの操作画面

まとめ

ビルドからデプロイまでを自動化することによって、各エンジニアはよりアプリケーションの開発にのみ集中できるようになります。
全体の生産性を上げるのにとても役立ちますので、皆さんもぜひ本記事を参考に、自分のプロダクトの CI/CDパイプラインを整備してみてください!

REALITYでは現在一緒に働く仲間を積極的に募集しています!
こういった職場が楽しそう!一緒に働きたい!と思った方は、カジュアル面談も実施していますので下記のリンクをチェックしてみてください!

REALITYエンジニアカジュアル面談お申し込みフォーム