GitLabでCI/CDを行う場合は、GitLabに組み込みのGitLab CI/CDを使用できます。 GitLab CI/CDは、GitLab上のコミットを検知して、GitLab Runnerが指定されたジョブを実行するという仕組みで動いています。
この時に使用されているGitLab RunnerというツールはGitLabからは独立しており、自前のホストにもインストールし実行できます。そのため、これを使ってWindows環境でのCI/CDを簡単に構築できます。
弊社のGroongaのサポートサービスを利用されているお客様の中には、Windows環境でGroongaを動かしているお客様もいらっしゃり、Windows環境でのビルドやテストも実施する必要があります。
以前は、お客様向けのWindowsパッケージを自社のWindows環境へインストールし、テストスクリプトを流して、問題なければリリースノートを書いて提供するという作業フローでした。 しかし、この作業フローではパッケージのインストールやテストスクリプトの実行は手作業で実施しているため、効率が悪いという問題がありました。 また、これらの手順は提供直前に実施していたため、この時点で問題が発覚するとお客様へパッケージ提供が遅れてしまうというリスクも孕んでいました。
GitLab RunnerはWindowsにも簡単にインストールできます。また、GitLab CIは定期的にジョブを実行することができるため、毎晩その時点の最新のGroongaを使って、お客様向けのパッケージをビルドおよびテストするようにもできます。
これらを実施したことにより、手作業で実行する作業がリリースノートの作成のみになり、パッケージ提供までの時間を短縮できました。 また、毎晩テストを実施するので問題を早期に発見しやすくなり、提供前に慌てて修正するというようなことがなくなりました。
では、具体的にどのようにWindow環境でのCI/CDを構築したかを以下に記載します。
インストール
-
まずは、GitLab Runnerのバイナリーを格納するディレクトリーを作成します。
-
公式サイトからGitLab Runnerのバイナリーをダウンロードして、1で作成したディレクトリーに格納します。 ダウンロードURLは https://docs.gitlab.com/runner/install/windows.html#installation に記載があります。
-
格納したバイナリーのファイル名を
gitlab-runner.exe
にリネームします。 -
管理者権限でコマンドプロンプトまたは、PowerShellを実行し、以下のコマンドを実行して、対象のプロジェクトにGitLab Runnerを登録します。
./gitlab-runner.exe register
-
上記のコマンドを実行すると、いくつか質問されるので、順に回答を入力していきます。
-
まずは、以下のように対象のGitLabプロジェクトのURLを聞かれるので、対象のプロジェクトのURLを入力します。
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
-
次に gitlab-ci トークンを聞かれるので、入力します。
-
gitlab-ci トークンは、GitLabの対象のプロジェクトのSettings -> CI/CD -> Runners の "Set up a specific Runner manually" に記載されています。
Please enter the gitlab-ci token for this runner
-
次に登録するGitLab Runnerの説明を記載します。
Please enter the gitlab-ci description for this runner
-
次に登録するGitLab Runnerにタグをつけます。
Please enter the gitlab-ci tags for this runner (comma separated):
-
次にExecuterを指定します。 弊社で使用しているテストスクリプトはPowerShellで動くため、
shell
を指定しました。Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
-
管理者権限でコマンドプロンプトまたは、PowerShellを実行し、以下のコマンドを実行して、WindowsサービスとしてGitLab Runnerをインストールします。
.\gitlab-runner.exe install .\gitlab-runner.exe start
-
GitLabの対象のプロジェクトのページを開いて、Settings -> CI/CD -> Runnersに上記手順で登録したGitLab Runnerが表示されていれば、インストール完了です。
WindowsへのGitLab Runnerのインストールは、以下の公式ドキュメントにも記載されています。
https://docs.gitlab.com/runner/install/windows.html
ジョブの作成
GitLab Runnerに実行させたいジョブは、.gitlab-ci.yml
というファイルにYAML形式で記述し対象のリポジトリのトップレベルにpushします。
この例では、Executor
にshell
を選択したので、実行するスクリプトはWindowsバッチで記述しています。
.gitlab-ci.yml
をpushすると、以後、コミットを契機に.gitlab-ci.yml
に記述したスクリプトがGitLab Runnerをインストールしたホスト上で実行されます。
ジョブの定期実行
ジョブは、リポジトリへのコミットのみを契機に実行されるだけではなく、定期的に実行することもできます。 定期的に実行するには、以下のように実施します。
対象プロジェクトのページを開いて CD/CI -> Schedulesを選択します。
"Scheduling Pipelines"というページに遷移するので、そこで、New schedule
ボタンを押下します。
以下の項目を入力する画面に遷移するので、それぞれ適切な値を設定します。
-
Description
- この定期実行の説明を書きます
-
Interval Pattern
- どのくらいの間隔で実行するかを指定します。
-
Cron Timezone
- タイムゾーンを指定します。
-
Target Branch
- どのブランチを対象にジョブを実行するかを指定します。
-
Variables
-
ある特定のジョブだけ定期的に実行したい場合や、ある特定のジョブだけ実行間隔を変えたい場合に使用します。
-
例えば、
.gitlab-ci.yml
に以下のように記述すると、このVariables
の項目にWEEKLY
が指定されているスケジュールに従ってtest regression
のジョブが実行されることになり、Variables
の項目にWEEKLY
が指定されていないスケジュールの実行時は、test regression
のジョブは実行されなくなります。
"test regression": stage: test tags: - xxxx only: variables: - $WEEKLY
-
パッケージ提供のような定期的に発生する作業にかかる時間を減らすことで、別の課題に時間を使うことができ、お客様にとってもメリットになります。また、作業の過程で、GitLab Runnerの不具合を発見したので、以下の内容でアップストリームへ報告しました。
このように、クリアコードではお客さんのメリットになる作業をすると同時に、アップストリームへの問題報告やパッチ提供をして、フリーソフトウェアの推進を日常的に実施しています。