LoginSignup
5
8

More than 5 years have passed since last update.

GitLab CI上でdocker-composeを使ってSelenium Grid環境を構築する

Last updated at Posted at 2019-01-09

ずっと出来ないと勘違いしてたのですが、Dockerの中でDockerって動かせるんですね。知りませんでした。
調べたら2013年頃の記事に「出来るようになったやで」と書いてありました。お恥ずかしい。
https://blog.docker.com/2013/09/docker-can-now-run-within-docker/

さて、Dockerの中でDockerが動くなら、Dockerの中でdocker-composeも動くわけで、ということはGitLab CIのDocker Executorの中でもdocker-composeを使って環境構築が出来るわけですね。
ちょうどSeleniumの実行環境をCIに乗せたいと思っていたので、せっかくなのでSelenium GridでChromeとFirefoxが動く環境をdocker-composeで構築してみました。

TL;DR

以下の2ファイルをプロジェクトルートに配置すればOKです。

gitlab-ci.yml
outsrc:
  image: docker:stable

  variables:
    DOCKER_HOST: tcp://docker:2375/
    DOCKER_DRIVER: overlay2

  services:
    - docker:dind

  before_script:
    - apk update
    - apk add --no-cache py-pip
    - pip install docker-compose

  script:
    - docker-compose up -d
    - # このへんにあなたのテストスクリプトを入れてね
docker-compose.yml
version: '2'
services:
  hub:
    image: selenium/hub
    ports:
      - 4444:4444

  firefox:
    image: selenium/node-firefox
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - hub
    environment:
      HUB_HOST: hub

  chrome:
    image: selenium/node-chrome
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - hub
    environment:
      HUB_HOST: hub

ハマったところ

Selenium Hubへのアクセス

お使いのテストフレームワーク上で、Seleniumのホストを指定するところがあると思いますが、ここの指定は

  • ホストOS上で実行する場合: docker
  • テストコードもdocker-compose上のコンテナで実行する場合: hub

となります。ホストOS上で実行する際、 localhost では動きませんので注意が必要です。

使うイメージは node とついてるほう

最初Seleniumの事を良く知らなくてハマったのですが、今回のようにSelenium Grid、つまり1つのHubと複数のNode(ブラウザがインストールされたコンテナ)で実行するときは、 selenium/node-*** を選ぶ必要があります。
selenium/standalone-*** は使えませんので注意してください!

5
8
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
5
8