Help us understand the problem. What is going on with this article?

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

More than 3 years have 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を使って自動化しましょう!

ootaken
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした