windowsでGitlab Runnerを構築してみた話

## 対象読者
1. gitlab runnerを手軽に動かしてみたい方
1. Gitlab CI/CD パイプラインに興味のある方

## 環境情報
windows

```cmd
> systeminfo
OS 名:                  Microsoft Windows 10 Home
OS バージョン:          10.0.19042 N/A ビルド 19042
```

docker 

```cmd
> docker version
Client:
 Cloud integration: 1.0.17
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.16.4
 Git commit:        f0df350
 Built:             Wed Jun  2 12:00:56 2021
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       b0f5bc3
  Built:            Wed Jun  2 11:54:58 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.6
  GitCommit:        d71fcd7d8303cbf684402823e425e9dd2e99285d
 runc:
  Version:          1.0.0-rc95
  GitCommit:        b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
```

kubectl
\* docker desktop for windowsのダッシュボードの設定でKubernetesを有効化できます。
\* docker desktop for windowsをInstall時にkubectlがInstallされます。

```cmd
> kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.1", GitCommit:"5e58841cce77d4bc13713ad2b91fa0d961e69192", GitTreeState:"clean", BuildDate:"2021-05-12T14:18:45Z", GoVersion:"go1.16.4", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.1", GitCommit:"5e58841cce77d4bc13713ad2b91fa0d961e69192", GitTreeState:"clean", BuildDate:"2021-05-12T14:12:29Z", GoVersion:"go1.16.4", Compiler:"gc", Platform:"linux/amd64"}
```

helm

```cmd
> helm version
version.BuildInfo{Version:"v3.6.1", GitCommit:"61d8e8c4a6f95540c15c6a65f36a6dd0a45e7a2f", GitTreeState:"clean", GoVersion:"go1.16.5"}
```
## 構築(作業ベース)

### 1.kubernetes上にgitlab-runnerをデプロイするためにnamespaceを作成する

```cmd
> kubectl create namespace gitlab-runner
namespace/gitlab-runner created
> kubectl get namespace
NAME              STATUS   AGE
default           Active   22h
gitlab-runner     Active   22h
kube-node-lease   Active   22h
kube-public       Active   22h
kube-system       Active   22h
```
### 2.helmにgitlabレポジトリを追加する
\* 私の環境はすでに入れていたので、下記が出力されました。

```cmd
> helm repo add gitlab https://charts.gitlab.io
"gitlab" has been added to your repositories
```
### 3.レポジトリ上にあるgitlab-runnerのバージョンを確認する

```cmd
> helm search repo -l gitlab/gitlab-runner
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
gitlab/gitlab-runner    0.30.0          14.0.0          GitLab Runner
gitlab/gitlab-runner    0.29.0          13.12.0         GitLab Runner
gitlab/gitlab-runner    0.28.0          13.11.0         GitLab Runner
gitlab/gitlab-runner    0.27.0          13.10.0         GitLab Runner
gitlab/gitlab-runner    0.26.0          13.9.0          GitLab Runner
```

### 4.gitlab-runnerをカスタムでデプロイするためのvalues.yamlを作成し、下記を記述する

```yaml
gitlabUrl: "https://gitlab.com/" # group or projectのCI/CDの設定から確認してください
runnerRegistrationToken: ""      # group or projectのCI/CDの設定から確認してください
runners:
  privileged: true               # docker in docker でCI/CDを実行する場合は必ず設定してください
```

### 5.kubernetes上にgitlab-runnerをデプロイする

```cmd
> helm install --namespace gitlab-runner gitlab-runner -f ./values.yaml gitlab/gitlab-runner
NAME: gitlab-runner
LAST DEPLOYED: Wed Jun 23 01:42:31 2021
NAMESPACE: gitlab-runner
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Your GitLab Runner should now be registered against the GitLab instance reachable at: "https://gitlab.com/"
```
### 6.kubernets上にデプロイされたかを確認する

```cmd
> kubectl get pods -n gitlab-runner
NAME                                          READY   STATUS    RESTARTS   AGE
gitlab-runner-gitlab-runner-*********-*****   1/1     Running   0          10m
```
### 7.gitlab上でRunnerが登録されているかを確認する
runnerRegistrationTokenで設定したgroup,projectのSettings>CI/CD>Runnersにデプロイされたものと比較する
\* 私はGroup Runnerとして設定したので、`Available group runners: 1` として出ています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/515008/af4ab39b-5da1-a8e7-8876-a629da6a2f04.png)

### 8.CI/CDパイプラインを回してみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/515008/fdab0abf-e1aa-6f96-af0c-d0530e8fac79.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/515008/aa8eb2a8-e97d-9e93-f506-0b654ebee875.png)

## 終わりに
windows上でGitLab RunnerをGitlabの公式手順通りにInstallしてパイプラインを実行してみてもあまりいい結果が得られませんでした。
最終的にはDocker Desktop for WindowsのKubernetes上にHelmを使ってGitlab Runnerをデプロイしているので、Manged KubernetesのAmazon EKSやGoogle GKEを使ったほうがいろいろ楽だとは思います。
個人でGitlabのCI/CDパイプラインを実行してみたり、お手軽にCI/CDパイプラインを勉強してみたいが、EKSやGKEを使わずにWindows10でお試しに実行してみたい！っていう稀有な方向けです💦
\* 深夜テンションで書いているので文言等が若干怪しいとは思いますが、温かい目で見ていもらえると幸いです。

### 参考ページ
[Docker Desktop for Windows](https://hub.docker.com/editions/community/docker-ce-desktop-windows)
[Helm v3.6.1](https://github.com/helm/helm/releases/tag/v3.6.1)
[Gitlab Runner Helm Chart](https://docs.gitlab.com/runner/install/kubernetes.html)
[Gitlab Required configuration](https://docs.gitlab.com/runner/install/kubernetes.html#required-configuration)
[Gitlab CI/CD privileged-mode](https://docs.gitlab.com/runner/install/kubernetes.html#running-docker-in-docker-containers-with-gitlab-runner)

#### 更新日時
2021/06/24

---