6
6

More than 5 years have passed since last update.

CI/CDのためにGitLab RunnerをDockerで動かす準備~EHW2018「環境整備⑧」

Last updated at Posted at 2018-12-29

概要

このエントリは、「Enterprise "hello, world" 2018 Advent Calendar 2018」の12/21向けのものです。このAdvent Calendarでは、複数個のエントリにまたがる話の流れも鑑みつつ、なるべく1エントリで1つのトピックをカバーできるようにする予定です。

このエントリで記載するトピックは、CI/CDのためにGitLab RunnerをDockerで動かす準備です。

今までのトピックをつなげると、1台のPCの中の「コンテナ盆栽」環境は、下図のようになります。

EHW2018DevEnv(1)(1)(1).png

前提

おことわり

  • このEnterpfise "hello, world"シリーズは、ネタのためのエントリです。実環境でそのまま利用ことを目的とはしていません。
  • 動かしやすさを優先してセキュリティを意図的に低くする設定など入れてありますのでご注意ください。

想定読者

「Enterprise "hello, world" 2018」的なネタとしては、下記のような状況を想定しています。

CI/CDの考え方から言って、GitLabにリポジトリを作ったあとには、デプロイの前にテストを実行しなくてはいけない。

GitLab Runnerの準備

GitLab Runnerとは

Gitlab Runnerは、GitLabでCI/CDを実現する際に用いる、GitLabからジョブの指示を受け取って結果を返すワーカです。

ワーカの動作のさせ方は、指定したホスト内でプログラムとして動かしたり、Dockerコンテナ内で動かしたりなどいくつかの方法があります。何ができて何ができるかは、サイト内に表があります。
表をちらっとみると、Kubernetesで動かす方法が、もっともできることの数が多いのですが、このエントリでは、次に出来ることの数が多いDockerコンテナとして動かします。

GitLab

GitLab Runnerのインストールにあたり、GitLabからのトークンが必要となります。
管理者権限(今までのAdvent Calendarの手順では"root")でログインし、GitLabの"/admin/runners"にアクセスします。

Screenshot_2018-12-28_09-01-01.png

Screenshot_2018-12-28_08-36-08.png

  gitlab-runner:
    image: gitlab/gitlab-runner:latest
      restart: always
      hostname: gitlab-runner.ehw2018.local
    networks:
      - extnet
    container_name: gitlab-runner.ehw2810
    volumes:
      - '${CONF_DIR}/gitlab-runner:/etc/gitlab-runner'
      - '/var/run/docker.sock:/var/run/docker.sock'
    depends_on:
      - gitlab
    networks:
      - int_net
$ sudo docker run --rm -t -i -v ~/ehw2018/second-dev-env/conf_dir/gitlab-runner:/etc/gitl-runner --name gitlab-runner gitlab/gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=6 revision=f100a208 version=11.6.0
Running in system-mode.                            

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.3.220/
Please enter the gitlab-ci token for this runner:
5nkCdHE4b7uHsjx6fJch
Please enter the gitlab-ci description for this runner:
[4cbc2529a46b]: Shared Runner
Please enter the gitlab-ci tags for this runner (comma separated):
test
Registering runner... succeeded                     runner=5nkCdHE4
Please enter the executor: docker-ssh, shell, virtualbox, docker, parallels, ssh, docker+machine, docker-ssh+machine, kubernetes:
docker
Please enter the default Docker image (e.g. ruby:2.1):
alpine:3.8.2
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

Screenshot_2018-12-28_09-07-05.png

$ sudo docker-compose up gitlab-runner

起動の様子

$ sudo docker-compose up gitlab-runner
WARNING: Some networks were defined but are not used by any service: intnet
samba is up-to-date
second-dev-env_gitlab_1_3d4e620e72db is up-to-date
Starting gitlab-runner.ehw2810 ... done
Attaching to gitlab-runner.ehw2810
gitlab-runner.ehw2810 | Runtime platform                                    arch=amd64 os=linux pid=7 revision=f100a208 version=11.6.0
gitlab-runner.ehw2810 | Starting multi-runner from /etc/gitlab-runner/config.toml ...  builds=0
gitlab-runner.ehw2810 | Running in system-mode.                            
gitlab-runner.ehw2810 |                                                    
gitlab-runner.ehw2810 | Configuration loaded                                builds=0
gitlab-runner.ehw2810 | Listen address not defined, metrics server disabled  builds=0
gitlab-runner.ehw2810 | Listen address not defined, session server disabled  builds=0

管理画面をリロードすると、「Runners currently online」が1になっています。

Screenshot_2018-12-28_09-09-10.png

CIの実行

.gitlab-ci.ymlファイルを用意して、commit, pushします。

image: alpine:3.8.2

stages:
    - hello

print_hello:
    stage: hello
    tags:
        - test
    script:
        - echo hello, world!

で、これでコミットするとジョブコケますので、いくつか足回りの設定を加えます。
これまでのエントリの設定通りだと、下記のように、gitlab.ehw2018.localが名前解決できないでエラーとなるでしょう。

Screenshot_2018-12-29_23-26-06.png

gitlab-runnerの設定

gitlab-runnerの設定ファイル(/etc/gitlab-runner/config.toml)に、network_modeとして、docker-composeのカスタムネットワークを指定します。

(一部抜粋。全体は下記の折りたたみにあります)
[[runners]]
  [runners.docker]
    network_mode = "ehw2018.local"

/etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "Shared Runner"
  url = "http://192.168.3.220/"
  token = "adf4e4b7cf8de25e9bcd7e44d5d71a"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:3.8.2"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    network_mode = "ehw2018.local"
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

docker-composeの、ネットワーク設定も、ドメイン名が「dhw2018.local」変えておきます。

(一部抜粋)
networks:
  extnet:
    name: ehw2018.local
  intnet:
    name: ehw2018-internal.local

設定を直し、「$ sudo docker-compose down」して「$ sudo docker-compose up -d」したあとで、しばらくしてGitLabが再起動したあたりで、CIをもう一度「Retry」で走らせてみます。

Screenshot_2018-12-29_23-44-24.png

文字列をechoするだけのジョブは成功しました。ここまでで、GitLabからGitLab-runnerを動作させ、内部でCI用のジョブが動作するところまでが確認できました。

パイプラインを変更

.gitlab-ci.ymlを下記のように書き換え、coommit+pushします。前述のものと異なり、

  • イメージは、nodeの公式のもので、alpineベースのものを使用しています(npmがすぐ動くように)
  • testのステージを追加し、npmでのパッケージのダウンロードと、テスト(mithrilのospec)を実行しています
image: node:8-alpine

stages:
    - test

exec_test:
    stage: test
    tags:
        - test
    script:
        - npm install
        - npm run test

commit+pushすると

Screenshot_2018-12-29_23-54-54.png

テストが成功しました。これで、GitLabにソースがpushされるたびに、テストが実行できる環境ができました。

補足: api-serverの方

第18日目の、Ginで書いたAPI Serverについて、.gitlab-ci.ymlは以下のような感じになります。

image: golang:1.11-alpine

stages:
    - test

before_script:
  - mkdir -p /go/src/ehw2018.io/greetings-server/
  - cp -fr ../greetings-server /go/src/ehw2018.io
  - cd /go/src/ehw2018.io/greetings-server

exec_test:
    stage: test
    tags:
        - test
    script:
        - apk add make
        - apk add git
        - apk add build-base
        - go get -u github.com/golang/dep/cmd/dep
        - make depensure
        - make bin/greetings-server
        - make test

まとめ

このエントリでは、「Enterprise "hello, world" 2018 Advent Calendar 2018」(EHW2018)の21日目として、CI/CDのためにGitLab RunnerをDockerで動かす準備をトピックとして取り上げました。

EHW2018のネタとしては、このあと、ついにデプロイができるのではないかとを考えています。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6