docker-compose でGitlabとGitlab-Runner構築

タイトルの通り、Docker上にGitlabとGitlab-Runnerを構築し、GitlabのリポジトリへのpushでGitlab-Runnerをはしらせるまで、いろいろな記事を参考にしてうまくいったので記録を残しておきます。

ほんの一か月前、Dockerに初めましてしたばかりなので、苦労しました。


# 参考にした記事
- docker-compose.yml
https://qiita.com/ronkabu/items/9643e578c1e3b8ee3043
- Gitlab-Runner register
https://ccie-go.com/gitlab-cicd-install/

# 筆者の環境
- OS Windows10
- Docker for Desktop version 20.10.14

# 手順

## 1,Docker-Composeの準備

適当なフォルダを用意し、docker-compose.ymlファイルを作ります。
私はhakuchangitlabというフォルダ名にしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/15a40e6f-b324-207c-5ae1-5786bfe0a11e.png)


docker-compose.ymlの中身は以下のサイトにあるYAMLファイルををコピペしますが、一行だけ書き換えました。

https://qiita.com/ronkabu/items/9643e578c1e3b8ee3043

書き換えたのは上から４行目の、labのイメージです。
上記のサイトのイメージはgitlab-eeを使用しているのですが、gitlab-ceに変えました。

```
version: '3.6'
services:
  lab:
    image: 'gitlab/gitlab-ce:latest'　　←変更後
    restart: always
    hostname: 'gitlab.my.com'
```



docker-compose.ymlができたら保存して、コマンドプロンプトからhakuchangitlabフォルダまで移動します。


では、docker-compose up -d　コマンドでdocker composeを構築します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/449901f7-bff8-ae9d-ce5e-3cf8f2b9afbe.png)

upが終わったらdocker psで確認してみます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/c32a3df9-356a-ac96-c979-ca06ba0ce41f.png)

gitlab-runnerもgitlab-ceもSTATUSがUPになっていれば大丈夫です。gitlab-ceは(health:starting)が(health:healthy)になるまで待ちます。大体２、３分かかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/d2705e6a-70e3-16e4-6f03-3c13b393c2b5.png)


healthyになったら、http://localhost:8080 にアクセスしてみます。

下の画面のように、GitlabのSign inページがつながれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/41426f11-610b-f54e-065c-992608541bad.png)

## 2 Gitlab リポジトリ

GitlabにSign inします
初期パスワードをgitlabコンテナから確認します。
docker psコマンドでgitlabのコンテナのIDを確認します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/cf498f2f-20fb-1a4c-2aac-fb0ac2d7d603.png)


コンテナに以下のコマンドで入ります。
```
docker exec -it コンテナのID /bin/bash
```

筆者の環境ではこんな感じに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/ee940421-47f4-06a3-50a5-b1769af6f36b.png)


gitlabにログインするパスワードは/etc/gitlab/initial_root_passwordにあるのでcatで中を見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/d1d6d789-72cc-8eb1-0c22-428d7c901688.png)

黄色で隠しているところがpasswordなので、gitlabのSign inページのパスワードにコピーします。スペースもコピーされてしまうのでご注意。
ユーザネームはrootを打ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/47c79321-caf4-f7cf-7291-2fea0d2087ea.png)

サインインできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/b1f33822-e505-c79d-bd82-0502f2b3dc33.png)



次はプロジェクトを作ってクローンしてみます。

New Project → create blank projectからプロジェクトを作ります。
私はプロジェクト名をproproにしました。
ここでProject URLのやじるしの部分をrootに変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/f9b33651-3721-5352-a476-bd955d98c674.png)

propro　プロジェクトができました。
このリポジトリをクローンしてみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/eac1b34c-b2e6-f822-6c51-fe5c3e13d2cb.png)

てきとうなディレクトリの中で以下のコマンドでcloneできます。
```
git clone http://localhost:8080/root/リポジトリ名.git
```

やってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/0b426c22-b642-f0e2-e746-b830b4eefe7f.png)

cloneのときユーザ名とパスワードを求められるので、gitlabにサインインするときに使ったrootとコンテナ内のinitial_root_passwordのパスワードを入れます。

プロジェクトができたてでクローンすると失敗するので何回かcloneしてみてください。




## 3 Gitla-runnerをGitlabに登録

Gitlabでリポジトリができたので、Gitlab-runnerを登録して使えるようにしたいと思います。
参考にしたページは以下のページです。




https://ccie-go.com/gitlab-cicd-install/

まず、gitlabから登録に必要な情報を確認します。
さっきつくったプロジェクトの左のSetting > CI/CDをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/e8965672-554b-4dc6-1882-5c6d765a60b8.png)

Runnersをクリックする。Specific runnersにURLとTOKENがあります。必要なのは赤線で隠してあるこのTOKENです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/578f22ac-e6eb-3516-197a-43cd884bebb6.png)



TOKENを確認したら、Gitla-runnerを登録します。
gitlab-runnerのコンテナに入ります。
docker ps コマンドでgitlab-runnerのコンテナIDを確認し↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/4abdee67-aa82-1767-a3d4-b018a5165cc4.png)
以下のコマンドでgitlab-runnerのコンテナに入ります。

```
docker exec -it コンテナID　/bin/bash
```


コンテナ内にはいったら、以下のコマンドで登録を開始します。
```
gitlab-runner register
```

リポジトリの内容を登録します。
重要なのは最初のEnter The　instance URLで、http://gitLab/　をうつこと。
トークンは先ほど確認したTOKENをうつ。
Enter an Executerは今回Dockerを、Enter the defuult docker imageは
ruby:2.7を指定しました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/fc06d97f-3cdc-14f5-6e81-a94746615f62.png)



成功したら、次に/etc/gitlab-runner/config.tomlを編集します。
その前に、docker netowrk lsでネットワークを確認すると

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/66a92b47-e059-870c-890b-125abbc108e0.png)

gitlab-netowrkがdocker composeのネットワークです。

/etc/gitlab-runner/config.tomlを編集します。gitlab-runnerコンテナに入り、
```
vi /etc/gitlab-runner/config.toml
```
で編集。ちなみにViがなかったので、apt-get updateしてからapt-get install viもしくはvimでインストールしました。

config.tomlファイルを開いたら、写真の一番下の行のように、先ほど確認したネットワークをnetwork_mode = "ネットワーク"で追加します。

![スクリーンショット 2022-06-03 143323.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/13ac4969-b516-4ba0-8b56-f53cc23cfa03.png)


保存して閉じたら。コンテナを抜けます。

コンテナの設定ファイルを書き換えたので、反映するためにDocker composeをリスタートします。

```
docker compose restart
```

http://localhost:8080　を確認します。リスタートしたのでまた２，３分待ちます。


先ほどのRunnersを確認すると、Avaibale specific runnersにrunnerが登録されているのがわかります。Editを押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/5f8696d7-f75c-8db2-0e2e-a3b169391fb7.png)



タグがなくてもCIを実行できるように、Run untagged jobsをチェックしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/e4868790-fa49-812c-df06-83f59bddedfb.png)


## 4 CIの実行

実際にCIでHello Worldしてみます。

先ほどcloneしたリポジトリの中に　.gitlab-ci.ymlファイルを作ります。

.gitlab-ci.ymlの中身は、ちゃんとGitlab-Runnerが動くか確認する多面いhello Worldを表示させるための簡単なジョブを書いてます。

```.gitlab-ci.yml
stages:
  - echo

echo-job:
  stage: echo
  script: 
    - echo "Hello World!"
```
.gitlab-ci.ymlを作ったらコミットし、pushします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/2d2c1a9a-f942-c4f2-507c-6d5879e40a61.png)


Gitlabを見てみるとGitlab-runnerが実行されてHelloWorldが出ました～。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/495717/54b65b5b-12c4-02aa-6549-d2b261231b26.png)