【GitLab】GitLab-Runnerを試用してみた

# GitLab-Runnerとは
ここ最近Artifactoryばかり使っていたので1ヶ月ぶりにGitLabに触れてみました。
何となくGitLabの設定画面を眺めていた所、「Runner」という謎の項目があったので少し調べていました。
![Git_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858317/ce058fdc-0b00-0029-7b2e-cbd51673acd7.png)
RunnerとはGitLabのプロジェクト内で変更が発生した際に自動でジョブを実行し、ビルドやテスト等を行う機能のことです。
こういった機能をCI/CD（継続的インテグレーション/継続的デリバリー）と呼んでいるらしいです。
CI/CDの代表的なツールとしてJenkinsが存在していますが、Jenkinsは私の現場でも使用されているので近いうちに触れてみようと思います。
RunnerはJenkinsの機能をGitLab上でも利用可能にする拡張機能みたいなものの様です。
今回はRunnerを試しに使ってみます。

# 事前準備
Runnerを使用するためには事前にDockerが必要ですので、以下コマンドでDockerのインストールと起動を行います。
なお、筆者の環境では仮想マシンにrootでログインしているため```sudo```コマンドは省略しています。

```
yum install -y docker
systemctl start docker

↓必要に応じてdockerの自動起動有効化
systemctl enable docker
```

次にRunnerをインストールし、起動します。
以下のコマンドを順番に実行します。

```
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | bash
yum -y install gitlab-runner
systemctl start gitlab-runner

↓必要に応じてrunnerの自動起動有効化
systemctl enable gitlab-runner
```

Runnerのインストールが完了しましたので、次は初期設定を実施します。
以下のコマンドを実行して対話形式での設定を行います。

```
gitlab-runner register

以下設定画面
Runtime platform                                    arch=amd64 os=linux pid=2227 revision=943fc252 version=13.7.0
Running in system-mode.

Enter the GitLab instance URL (for example, https://gitlab.com/):
http://＜gitlabのURL＞
Enter the registration token:
＜gitlabの登録トークン＞
Enter a description for the runner:
 ＜任意＞
Enter tags for the runner (comma-separated):
＜タグ（Enterで省略可能）＞
Registering runner... succeeded                     runner=xxxxxxxx
Enter an executor: docker, docker-ssh, parallels, shell, ssh, virtualbox, docker+machine, custom, kubernetes, docker-ssh+machine:
＜Enter an executor:の後ろにリストアップされている項目から選択（shell等）＞
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
```

上記コマンドで設定する際に必要となる設定値の「URL」と「登録トークン」はGitLabの以下画面から確認できます。
場所は「管理者エリア」 - 「概要」 - 「Runner」です。
![Git_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858317/ec8a0538-24ab-aded-9900-1bf6a1eff71d.png)

設定が完了するとGitLabのRunnerの設定画面に以下の通り登録されます。

![Git_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858317/71dc28d5-fce6-abca-1200-e75e6ec23e12.png)

# Runnerの動作確認
Runnerの使用準備が完了しましたので、早速Runnerを使ってみたいと思います。
今回は以下のJAVAプログラムをビルドして実行する動作を実行していきます。

```ruby:javatest.java
class javatest{
        public static void main(String[]args){
                System.out.println("Hello World");
        }
}
```

Runnerを使用するには、各プロジェクトの直下に```.gitlab-ci.yml```ファイルを配置し、その中にRunnerを実行するための定義を記載します。
```job:```の下にRunnerで実行するジョブの内容を記載していきます。
```script:```はRunnerでシェルスクリプトを実行するコマンドになります。

```ruby:.gitlab-ci.yml
job:
  script:
    - cat javatest.java
```

上記```.gitlab-ci.yml```ファイルをGitLab上で作成しますと、自動でRunnerが起動されます。
手動で実行する場合はGitLabのプロジェクト画面左側にある「CI / CD」 - 「パイプライン」をクリックし、移動後の画面内にある「パイプライン実行」をクリックします。
![Git_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858317/2ef0526e-3730-754e-3e89-4572fbab1eac.png)
その後、以下の画面に移りますので「パイプラインを実行」をクリックします。
![Git_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858317/98af5734-c0e1-db86-3017-97adfb9f59ae.png)
しばらく待つと以下のような画面になります。
青枠内に「成功」と表示されたら完了です。
実行内容を表示するには以下画面のオレンジ枠内をクリックします。
![Git_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858317/d68982c6-8d5a-f707-1cb2-155653b86b39.png)
Runnerの実行内容は以下の通りとなっています。
青枠内には```.gitlab-ci.yml```ファイルの```script:```で指定したコマンドが表示され、緑枠内にその実行結果が表示されています。
問題なくジョブが完了しましたらオレンジ枠内の様に```Job successded```と表示されます。
![Git_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858317/bd73b0d6-3db1-0182-15bb-5de5ab23b10e.png)
折角なのでこのjavaファイルをビルドして実行というそれっぽい動作を実現してみました。
```.gitlab-ci.yml```ファイルの中身を以下の通り書き換えます。

```ruby:.gitlab-ci.yml
job:
  script:
    - javac javatest.java
    - java javatest
```

以下GitLabのファイル編集画面となりますが、オレンジ枠内が変更内容です。
このまま青枠内の「Commit changes」をクリックすると自動でRunnerが動きます。
![Git_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858317/5823c330-2f86-e028-2235-2635b4660ccb.png)
コミット実行後、プロジェクトの左側にあるメニューから「CI / CD」 - 「パイプライン」を選択しますと、以下の通り自動実行されたジョブの結果が表示されています。
![Git_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858317/ca9d3d1b-60b4-f8bf-291d-d520a0854873.png)
上記画面の「成功」ボタンをクリックし、ジョブの実行内容を表示します。
以下実行内容となりますが、```javac javatest.java```の実行結果としてエラー等が表示されていないため、また```java javatest```の実行結果でオレンジ枠内の通り```Hello World```が返ってきていますので、ビルドに成功している様です。
![Git_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/858317/da0ee27d-b3ff-806b-1511-b30530eb26e4.png)
以上でRunnerを使用したプログラムのPushから自動ビルドと実行までの一連の流れが実現できました。