Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CI環境をDockerで再現する/Build the testing containers

CI環境をDockerで再現する/Build the testing containers

litencatt

April 26, 2017
Tweet

More Decks by litencatt

Other Decks in Technology

Transcript

  1. .drone.yml の中身 build: rspec_container: image: ruby:2.2.2 environment: LANG: C.UTF-8 RAILS_ENV:

    test TEST_MYSQL_HOST: 127.0.0.1 commands: # phantomjs をDL してコピー ... # mysql-client をインストー ル ... - bundle install --quiet --path /tmp/bundle --without prod - bin/rake db:create >/dev/null && bin/rake db:migrate >/d - bin/rspec -f p - bin/rubocop ...
  2. Docker コンテナ作成 # Dockerfile FROM ruby:2.2.2 ENV LANG C.UTF-8 ENV

    RAILS_ENV test ENV TEST_MYSQL_HOST muurb_db_1 RUN apt-get update -qq >/dev/null && apt-get install -qq wget >/ # mysql RUN apt-get install -qq mysql-client >/dev/null # phantomjs RUN test -f /tmp/phantomjs-2.1.1-linux-x86_64/bin/phantomjs || w RUN tar xjf /tmp/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /tmp RUN cp /tmp/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/ # rails RUN bundle install --quiet --path /tmp/bundle --without producti RUN bin/rake db:create >/dev/null && bin/rake db:migrate >/dev/n
  3. Docker コンテナ作成 spec コンテナ $ docker pull ruby:2.2.2 $ docker

    build -t spec . Docker le を元にimage をビルド $ docker run -it --link db spec bash spec コンテナ起動 db コンテナ起動後に実行します
  4. Docker コンテナ作成 db コンテナの作成 $ docker pull mysql:5.5 $ docker

    run --name db -e \ MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql:5.5
  5. コンテナ間の通信について drone はこのあたり書いとくだけでよしなにいける # .drone.yml ... compose: image: mysql:5.5 Docker

    の場合、 --link オプションを付与してspec とdb コンテナ間通信設定している $ docker run -it --link db spec bash
  6. コンテナ間の通信について --link オプション付与時 環境変数にdb の情報が自動的に設定される root@39b8b67cc3a8:/tmp/muu# env | grep DB_

    DB_PORT=tcp://172.17.0.2:3306 DB_PORT_3306_TCP=tcp://172.17.0.2:3306 DB_PORT_3306_TCP_PORT=3306 DB_PORT_3306_TCP_PROTO=tcp DB_ENV_MYSQL_ALLOW_EMPTY_PASSWORD=yes DB_ENV_GOSU_VERSION=1.7 DB_ENV_MYSQL_VERSION=5.5.55 DB_ENV_no_proxy=*.local, 169.254/16 DB_NAME=/muurb_spec/muurb_db_1 DB_PORT_3306_TCP_ADDR=172.17.0.2 DB_ENV_MYSQL_MAJOR=5.5
  7. コンテナ内へのファイルの渡し方 テストするレポジトリのディレクトリを渡したい docker run -v src_dir:dst_dir でMac 側のディレクト リをマウントしたが$bin/rake db:create

    が全然実行 されない… なので、Docker le でADD するように変更した ( コンテナbuild 時にsrc_dir をdst_dir へコピー)
  8. まとめ テスト失敗原因調査のためDocker にてロー カル環 境にテスト環境を構築 CI 時のテスト環境の基本的な仕組み( .drone.yml ) と、Docker

    の基本的な使い方を習得 え? docker-compose でまとめてビルドとかできる? … それはまた別のお話