Selenium
Jenkins
docker
DockerDay 12

Docker ComposeでJenkinsとSelenium Gridを一気に立ち上げる

More than 1 year has passed since last update.

DockerでJenkins

JenkinsやSelenium Gridの環境構築の面倒くささ

本記事はDocker Advent Calendar 2015の12日目です。
手軽に始められるCIサーバーのJenkinsも実際に運用していこうとすると、以下のような問題が発生します。

  • たくさんのプラグインのインストールと設定が必要
  • Jenkinsの設定はバージョン管理ツールの対象外なので暗黙知になりやすい
  • 上記の伴い再度マスターを作るのも大変
  • 前提とするランタイムやビルドツール、ミドルウェアをスレーブ毎に設定するのが大変

最近は上記のような問題を解決するSaaSのCIサービスであるTravisCIやWerckerを使われている方も多いと思いますが、色々な制約がありJenkinsを使い続けている方も多いと思います。

Docker HubにあるJenkinsイメージ

Jenkinsでそれっぽいことができないかなあ、Dockerを使えばできるんじゃないかと、Docker Hubを探してみたら、ありましたよ!

https://hub.docker.com/r/blacklabelops/jenkins/

こちら公式よりいけていて、以下のようなことができます。

  • 起動時のプラグインの自動インストール
  • 設定ファイル(jenkins-master.env, jenkins-slave.env)によるセキュリティや共通設定
  • Docker Composeによるマスター・スレーブ同時起動、スレーブの追加、削減

https://github.com/blacklabelops/jenkins の通り

$ curl -O https://raw.githubusercontent.com/blacklabelops/jenkins/master/docker-compose.yml
$ curl -O https://raw.githubusercontent.com/blacklabelops/jenkins/master/jenkins-master.env
$ curl -O https://raw.githubusercontent.com/blacklabelops/jenkins/master/jenkins-slave.env
$ docker-compose up -d

で、起動

$ docker-compose scale slave=3

で、スレーブの追加。Jenkins側で何も設定する必要が無く、動的にスレーブが追加されます(Swarmという仕組みを使っています)。

Selenium Grid

Selenium GridもDocker Composeで

https://github.com/caarlos0/selenium-grid-on-docker-example/blob/master/docker-compose.yml
でJenkinsと同じように実現できます。

JenkinsとSelenium Gridを一つに繋げる

作りました

$ git clone https://github.com/ootaken/jenkins-and-selenium-on-docker.git

Chromeのノードを3台にするのも簡単です。

$ docker-compose scale chrome=3

Jenkinsスレーブに任意のものを使用する

例えば、ファイルアップロードやダウンロードのSeleniumテストが必要な場合、Selenium Gridのノードは使用できません。この場合、Jenkinsのスレーブ自体でローカルのSeleniumを実行する必要があり、ChromeやFirefox, Xvfbなどが必要です。
この場合、元々のスレーブのイメージを継承して必要なツールやソフトウェアを追加したイメージを作成し、それをJenkinsスレーブとして使うdocker-compose.ymlを作成します。

JenkinsのスレーブのイメージにChrome, Firefox, Xvfbを追加したイメージ

https://hub.docker.com/r/ootaken/swarm-selenium/

上記を使うdocker-compose.yml

https://github.com/ootaken/jenkins-with-selenium-slave-on-docker

まとめ

Dockerを使えばJenkinsとSelenium Gridの環境構築も一瞬でかつ簡単にスケールアップ、形式知化できます。開発環境構築は時間のかかる作業でしたが、本質的な作業ではないので是非とも環境構築もDockerを使って自動化しましょう!