GitLab CI を利用して自動ビルド、テスト環境を整えたい話

皆様、お疲れさまです。
最近、「人に説明する」ということに苦戦しています。
相手の知識セットと自分の伝えたい部分をきちんと弁えていることが重要なのではないかと思うのですが、どうにもうまくいきませんね。
上司にとても説明がうまい方がいるので、見習っていきたいですね。

経緯

社内では現在主にGitLabを使用し、プロジェクトの管理を行っております。
ある案件で、PHPのLintツールをかけてからコードをプッシュして欲しいとの要求が有りました。
しかし、普段Lintツールなどを利用していないため、Lint忘れ、Lintツール実行に時間がかかるなど、問題が発生していました。

VSCode上で自動的にLintツールが走るようにして解決しても良かったのですが、チームメンバー全員にそれを共有するとなると、まぁまぁめんどくさいですよね。
であれば、GitLabサーバー上でプッシュするだけでLintツールやテストを流せるようにしたら便利になるのではないかと思った次第です。

GitLab CI とは

GitLab上でビルド、テスト、デプロイを自動化するためのCI(継続的インテグレーション)ツールです。
GitLabに組み込まれているため、設定ファイルを含めてアップするだけでかんたんにビルド、テスト、デプロイを実現してくれます。
さらに、Runnerという仕組みを構成することで、GitLabが動いているサーバーとは別のサーバーでビルド、テスト、デプロイを実行することができます。

実際の構成

まず、Pushされた変更はクラウド上のGitLabにアップロードされます。
GitLab Runnerは定期的にクラウド上のGitLabに向けてFetchを行い、変更が取得された場合、.gitlab-ci.ymlの内容に基づいてビルド、テスト、デプロイを行います。

画像を見て分かる通りGitLabはGitLab Runnerに対して通知を行っておらず、一方通行の通信のみで構成可能となっています。

Registration Tokenを取得する

Gitlabの プロジェクト設定>CICD>Runner から次の画像の部分を探します。

赤く塗りつぶした部分(Registration Token)をコピーします。

GitLab Runner を立ち上げる

docker-compose を使用します。以下のdocker-compose.ymlを記述します。

version: "3"
services:
  runner:
    image: gitlab/gitlab-runner:alpine-v9.4.2
    tty: true
    container_name: docker-executor
    restart: always
    environment:
      - REGISTER_NON_INTERACTIVE=true
      - CI_SERVER_URL=https://[GitlabのURL]/
      - REGISTRATION_TOKEN=[上記でコピーしたRegistration Token]
      - RUNNER_EXECUTOR=docker
      - RUNNER_TAG_LIST=docker
      - RUNNER_NAME=Runner
      - RUNNER_LIMIT=1
      - DOCKER_IMAGE=docker:latest
      - DOCKER_VOLUMES=/var/run/docker.sock:/var/run/docker.sock

そして、次のコマンドを実行します。

docker-compose up -d
docker-compose exec runner gitlab-runner register

以上を実行したとき、プロジェクト設定>CICD>Runner の内容に以下のような表示がされていることを確認します。

以上で、runnerの設定は完了です。
続きはまた今度…