GitLabを用いた継続的インテグレーション
GitLabを用いた継続的インテグレーション
前回(RancherとCI/CD)は、 そもそも継続的インテグレーション(CI)、継続的デプロイ・デリバリ(CD)とは何なのかという説明と、CI/CDを実現するためのツールとしてRancher PipelineとGitLab CI/CDを紹介しました。今回は一旦Rancherから離れ、GitLab CIを用いた継続的インテグレーションの実現方法について解説します。
最初にサンプルサプリケーションの構成について解説した後、今回利用するGitLab.comのアカウントおよび、プロジェクトの作成について説明します。その上でサンプルアプリケーションの実装とテストを解説した後、Dockerイメージの自動ビルドと自動テストをGitLabを活用して実現する方法を説明します。
サンプルアプリケーションの構成解説
まずサンプルとなるアプリケーションですが、ここではアプリケーションの実装とテスト、CIパイプラインの実装をお見せするのが主眼なので、おしゃれなUIを備えたWebアプリケーションや、高機能なCLIアプリケーションではなく、ごくシンプルなアプリケーションの作成にとどめたいと思います。
ここで、題材とするアプリケーションはREST APIで動作するシンプルなサーバサイドアプリケーションです(最終的にはマルチユーザ対応のToDo管理アプリケーションのクライアント・サーバサイド実装とする予定です)。構成イメージは図1に示す形になります。
もう少し具体的に理解してもらう目的で、今回作成するアプリケーションのソフトウェア構成を表1に示します。
コンポーネント | 構成 | 補足 |
---|---|---|
Webサーバ | Nginx | 実体はNGINX Ingress Controller |
サーバアプリケーション | Python 3.6.6 Django 2.1.5 Django REST framework 3.9.1 | pyenv、venvを利用 |
クライアントアプリケーション | Go 1.11.5 | goenvおよびGOPATHの切り替えにdirenvを利用。今回は出番なし |
データベース | MySQL 5.7 | 今回は出番なし |
サーバアプリケーションは少ない手数でRESTアプリケーションを書くという意図のもと、PythonとDjango REST Frameworkを利用します。今回、データベースの出番はありませんがMySQLを選択しました。
今回は作成の対象外ですが、クライアントサイドのアプリケーションはCLIアプリケーションを想定しています。どんな言語でもCLIアプリケーションの作成自体は可能ですが、配布および導入の容易化という観点からGo言語を採用します。
GitLab.comの準備
では、アプリケーションの構成について解説したので早速実装を始めたいところですが、ソースコードのリポジトリを準備しなければいけません。今回はGitLabのSaaS版であるGitLab.comを利用します。
アカウントの作成とログイン
GitLab.comのサインイン画面にアクセスし、画面の指示に従ってアカウントを作成してログイン、またはソーシャルアカウント(Google、Twitter)や、他のリポジトリサービスのアカウント(GitHub、Bitbucket)を使ってログインしてください(図2)。
ただし、ソーシャルログインを利用した場合、そのままではプライベートリポジトリからのコードのクローンやプッシュができないので、別途ログイン後にパスワードの設定が必要です(今回の本題からは外れるため、手順の解説は省略します)。
プロジェクトの作成
GitLabにログイン後、画面左上のドロップダウンメニュー(図3(1))を開き、New projectを選択(図3(2))します。
プロジェクトの作成画面が表示されたら、Blank projectを選択(図4(1))し、プロジェクトの名前を指定します(図4(2))。次に、リポジトリの可視性について設定します。今回は実際の業務におけるサービス開発に近い形を想定しているので、プライベートリポジトリを利用するためにPrivateを指定します(図4(3))。ここまで設定が完了したら、Create projectボタンをクリックします(図4(4))。
作成されたプロジェクトのページ(図5)に遷移します。
プロジェクトが作成されるとともに、gitを用いたコードリポジトリも作成されています。画面右側のドロップダウンメニュー(図6(1))を選択し、Clone with HTTPSからURLをコピーします(図6(2))。
ここで取得したURLを使ってgit cloneでリポジトリをローカルディスクにクローンします(リスト1)。
$ git clone https://gitlab.com/fufuhu/ti_rancher_k8s_sampleapp.git
今後、解説を進める際のファイルパスは、ローカルにクローンしたリポジトリのルートディレクトリからの相対パスとします。ここから先は、サーバサイドアプリケーションの実装とテストを進めていきましょう。