Docker Composeを用いてCentOS7上でGitLab Runner Dockerを作成

# はじめに
どうも！生産技術部のエンジニアです。前回の[「proxy環境下でDocker Composeを用いてCentOS7上にGitLab Dockerを作成」][link-mypage_gitlab]で、DockerのインストールからGitLabの導入まで実施しました。今回は、GitLab Runnerの導入からGitLabとの連携まで実施していきます。

GitLabサーバを一から構築される方は、以下からご覧ください。
[「proxy環境下でDocker Composeを用いてCentOS7上にGitLab Dockerを作成」](https://qiita.com/TomoyukiSugiyama/items/ba7ef0ebab8242dbacb0)


[link-mypage_gitlab]:https://qiita.com/TomoyukiSugiyama/items/ba7ef0ebab8242dbacb0

# 環境
* CentOS : 7.6.1810
* Docker-CE : 19.03.1
* Docker Compose : 1.25.0-rc2
* GitLab-CE Docker : 12.2.0-ce.0
* GitLab Runner Docker: 12.2.0

# 前提条件
Docker、GitLabの導入が実施済みであること。
 
# GitLab Runnerのインストール・起動
`docker-compose.yml`を作成済みの場合は１.を飛ばしてください。２.では[前回][link-mypage_gitlab]作成した`docker-compose.yml`を修正しています。

1. GitLab Runner 用のディレクトリを作成＆移動  
`$ mkdir -p $HOME/docker/gitlab/ && cd $HOME/docker/gitlab/`
2. YAMLファイルを作成（中身は下記参照）  
`$ vi docker-compose.yml`  
3. Dockerコンテナの起動＆プロセスの確認  
`$ docker-compose up -d && docker-compose ps`

```gitlab_runner/docker-compose.yml
version: '3'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:latest'
    restart: always
    hostname: 'gitlab.example.com'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'https://gitlab.example.com'
        gitlab_rails['gitlab_shell_ssh_port'] = 4022
        # Add any other gitlab.rb configuration here, each on its own line
    ports:
      - '80:80'
      - '443:443'
      - '4022:22'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'
  runner:
    image: 'gitlab/gitlab-runner:latest' 
    restart: always
    volumes:
      - /srv/gitlab-runner/config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
```


# GitLabにGitLab Runnerを登録

GitLabをコンテナ内で起動した場合、以下のコマンドで登録します。(複数のRunnerを立ち上げる場合は、以下のコマンドを複数回実行することで可能になります。)
対話型で実行していますが、オプションの設定により[一行のコマンド][link-reg]で実行できます。

* gitlab-ci coordinator URL / gitlab-ci token  
起動したGitLabのサイトにログインし、`Admin area`の`Runners`をクリックすると確認できます。GitLabを起動したPCで確認した`http://localhost/`では上手く登録できませんでしたが、外部PCから確認したURLで登録可能でした。
* gitlab-ci description / gitlab-ci tags  
GitLabのUIで後から変更可能であるため、何も入力せず`Enter`で問題ないです。
* executor(custom, docker-ssh, parallels, ssh, docker+machine, docker-ssh+machine, kubernetes, docker, shell, virtualbox)  
Executorはプロジェクトをビルドする時に利用されます。[GitLabの公式ドキュメント][link-executor] を参考に選択してください。

[link-reg]:https://docs.gitlab.com/runner/register/index.html#one-line-registration-command
[link-executor]:https://docs.gitlab.com/runner/executors/README.html#i-am-not-sure

```bash:
# 設定したボリュームが/srv/gitlab-runner/configでない場合は、合わせてコマンドも修正してください。
$ docker run --rm -t -i -v /srv/gitlab-runner/config/:/etc/gitlab-runner gitlab/gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=6 revision=a987417a version=12.2.0
Running in system-mode.                            
                                                   
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab.example.com/
Please enter the gitlab-ci token for this runner:
XXXXXXXXYYYYYYYZZZZZ
Please enter the gitlab-ci description for this runner:
[hostname] my-runner
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag

Registering runner... succeeded                     runner=XXXXXXXX
Please enter the executor: custom, docker-ssh, parallels, ssh, docker+machine, docker-ssh+machine, kubernetes, docker, shell, virtualbox:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 
```
以上で設定完了になります。お疲れさまでした。先ほど確認した`Admin area`の`Runners`下部に、登録されたRunnerを確認する事が出来ます。

# 最後に
GitLab Runnerの導入まで完了しました。これから実際にCI/CDを実施したいと思います。ワクワク
環境構築と合わせて、Gitでの運用方法を検討していますが、なかなかいい方法が見つからず苦戦しています。
Gitのフローは、feature/master/pre-release/release/hotfixブランチで運用しようと思っています。

* 苦戦している所  
１.本番環境において、複数のプロジェクトのプログラムが同じフォルダ階層に存在する。フォルダA以下にプロジェクト1の1A.h、プロジェクト2の2A.h、フォルダB以下にプロジェクト1の1B.h、プロジェクト2の2B.hみたいな感じです。デプロイ時にフォルダ構成を変更すればいいと思っていますが、ローカルの実行環境も本番と同じフォルダ構成、、、サブモジュールとか使えば上手くいくんですか？？？  
２.１つのプロジェクト(リポジトリ)の最新版を複製し、別のプロジェクトを作成する必要があります。ベースにしたプロジェクトから変更した事がわかるように履歴を残したい。

Gitのプロ、教えてください！次回、進捗があれば記事にしたいと思います。

# ご参考
* [GitLab Docs 「Docker」](https://docs.gitlab.com/runner/register/index.html#docker)
* [GitLab Docs 「Executors」](https://docs.gitlab.com/runner/executors/README.html)
* [DockerHub 「gitlab/gitlab-runner」](https://hub.docker.com/r/gitlab/gitlab-runner)