ローカルマシンにGitLab Runnerを導入してGitLabでCI/CDする方法

## はじめに
やりたいことはタイトルの通り。

[公式ドキュメント](https://docs.gitlab.com/runner/install/)を見れば分かると言いたいが、ちょっと苦戦したのでメモ。

実はローカルマシンではなくクラウド上の仮装マシン等に入れる場合もこの方法でいけるが、自分がローカルマシンに入れたのと、ローカルマシンに入れるパターンが多いと思ったのでこのタイトルにした。

## 環境
* GitLab 11.11.8

## 準備

### 1. Docker環境を用意する

OSに合わせてDocker for Mac, Docker for Windowsなどインストールする。
ここはいろんな資料がネットに落ちてるのでググってほしい。

参考
* [DockerをMacにインストールする](https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81#%E7%B5%82%E3%82%8F%E3%82%8A%E3%81%AB)
* [Docker for Windowsをインストール](https://ops.jig-saw.com/tech-cate/docker-for-windows-install)
* [Install Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/)

### 2. GitLab Runnerのセットアップ

公式ドキュメントには[ローカルのファイルシステムをマウントする方法](https://docs.gitlab.com/runner/install/docker.html#option-1-use-local-system-volume-mounts-to-start-the-runner-container)と[Docker Volumeを使う方法](https://docs.gitlab.com/runner/install/docker.html#option-2-use-docker-volumes-to-start-the-runner-container)の2つがあるが、後者を使うことにした。

以下ローカルマシンでコマンドを実行する。

#### 2-1. config用のvolumeを作成する。

```shell
docker volume create gitlab-runner-config
```

#### 2-2. GitLab Runnerのコンテナを立ち上げる

```shell
docker run -d --name gitlab-runner --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v gitlab-runner-config:/etc/gitlab-runner \
    gitlab/gitlab-runner:latest
```

#### 2-3. 立ち上げたコンテナを登録する
これを各GitLabプロジェクト毎に行う。

##### 2-3-1. これを実行
```shell
docker run --rm -it -v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:latest register
```

##### 2-3-2. 使用しているGitLabのURLを入力する
```
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com
```

##### 2-3-3. GitLabプロジェクトのトークンを入力する

トークンはGitLabプロジェクトの `Settings->CI/CD->Runners` で確認できる。

`Settings` は強権限が無いと閲覧できないので注意。

```
Please enter the gitlab-ci token for this runner
xxx
```

##### 2-3-4. Runnerの説明を書く
```
Please enter the gitlab-ci description for this runner
[hostname] my-runner
```

##### 2-3-5. Runnerに紐づけるタグをカンマ区切りで指定する
```
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag
```

##### 2-3-6. Runner Executerを指定する
今回は `docker` を選んだ。
Docker以外でも実行できるらしい。

```
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker
```

##### 2-3-7. デフォルトイメージを指定する
今回は `alpine:latest` にした

```
Please enter the Docker image (eg. ruby:2.6):
alpine:latest
```

##### 2-3-8. Runnerが登録されたか確認する（2020/08/21 11:25更新）
GitLabプロジェクトの `Settings->CI/CD->Runners->Runners activated for this project` を確認

![runner.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187545/c3d8d1e2-1b7d-2c46-8cb0-177b7b71f9f3.png)

Runnerの詳細ページに行き、IPアドレスがローカルマシンのIPアドレスと同じか確認する。

![ip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187545/97c217b7-2d61-007c-3032-205943b82ae4.png)


### 3. .gitlab-ci.ymlを設定する
適当なブランチで `.gitlab-ci.yml`を作成する。

書き方は[公式ドキュメント](https://docs.gitlab.com/ee/ci/quick_start/#creating-a-simple-gitlab-ciyml-file)やグーグル先生を参照してほしい。

```.gitlab-ci.yml
image: python:latest
stages:
    - test
unittest:
    stage: test
    script:
        - echo "hoge"
```

### 4. 適当にコミットをプッシュする
プッシュしたコミットを見るとCIの結果が表示されている。

![ci-result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187545/6fa1546c-dc1d-f471-5dbb-7449fb47ecb2.png)


## おわりに
GitLab Runnerをローカルマシンで動かすことができた。

次はAWSのアクセスキーをGitLab Runnerで使う方法とか書きたい。


## 参考
* [GitLab CI/CDパイプライン設定リファレンス(日本語訳:GitLab CI/CD Pipeline Configuration Reference)](https://qiita.com/ynott/items/1ff698868ef85e50f5a1)