SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
Circle CI
and
Docker+Serverspec
2015-03-13 CIツール勉強会@福岡
やまだつよし
やまだつよし
➔ infra engineer
➔ twitter: @minimum2scp
➔ Debian,Ruby
about me
CI Newbie
Circle CI
motivation (1): chatops
● “GitHub 時代のデプロイ戦略”http://d.hatena.
ne.jp/naoya/20140502/1399027655
● “Slack / Hubot / GitHub / CircleCI による
ChatOpsなデプロイ方法”http://qiita.com/s-
kiriki/items/26bdf537169891b22653
motivation (2): Docker
● “Build and deploy Docker containers on
CircleCI” https://circleci.
com/integrations/docker
● “Continuous Integration and Delivery with
Docker” https://circleci.com/docs/docker
● Circle CIのビルドコンテナ内でのdockerの実行
をサポート
motivation (3): SSH
● “SSH access to builds” https://circleci.
com/docs/ssh-build
● GithubのSSH公開鍵でログイン
● 30分ほどで切断される
● sudo 利用可能
pricing
“Continuous Integration and Deployment on CircleCI just
got better: now it’s free.” http://blog.circleci.com/continuous-
integration-and-deployment-on-circleci-just-got-better-now-
its-free/
● 1コンテナは無料
● 追加1コンテナあたり $50/Month
● OSSプロジェクトでは追加で3コンテナ無料で利用可能(計4
コンテナ無料)
Demo: Getting Started with Circle CI
https://circleci.com/docs/getting-started
1. Circle CIにサインアップ
2. Circle CI に Github へのアクセス許可
3. プロジェクトをクリック
demo: minimum2scp/tdiary-style-gfm
を Circle CI でテストしてみます。
example of circle.yml
machine:
ruby:
version: 2.2.0
dependencies:
override:
- bundle install
test:
override:
- bundle exec rake spec
circle.yml how to
● “Configuring CircleCI” https://circleci.
com/docs/configuration
● “Sample circle.yml file“ https://circleci.
com/docs/config-sample
circle.yml: machine
machine:
ruby:
version: 2.2.0
services:
- elasticsearch
rvmでRuby 2.2.0を使用する
rubyの他にも nodejs, python, php, java などが使用可能です。
https://circleci.com/docs/languages
PostgreSQLやMySQL, Redis, MongoDB など
書かなくても起動しているデータベースもあります。
https://circleci.com/docs/environment#databases
データベースやサービスを起動する
circle.yml: dependencies
dependencies:
override:
- bundle install
依存ライブラリを
インストールする
コマンド
- Gemfile = bundle install (ruby)
- requirements.txt = pip install (python)
- package.json = npm install (nodejs)
のように自動的に依存ライブラリのインストール
方法を推測して実行するので、override しなくて
もインストールすることも可能です。
circle.yml: test
test:
override:
- bundle exec rake spec
テストを実行する
コマンド
Ruby, Railsでは Test::Unit, RSpec などのテストを自動的に推測して
実行してくれますので、(場合によりますが)overrideを書かなくてもテス
トを実行することが可能です。
(もちろん他の言語でも→ https://circleci.com/docs/languages)
minimum2scp/dockerfiles
https://github.com/minimum2scp/dockerfiles
● Debian sid amd64ベースのDockerコンテナ
集のリポジトリ
● serverspecによるコンテナのテスト
● Circle CI上でコンテナのビルドとテスト
git push
automated
build
CI
notification
notification
trigger automated build
circle.yml (Docker+Serverspec)
machine:
services:
- docker
dependencies:
override:
- cd baseimage;docker build -t minimum2scp/baseimage:latest .
- bundle install
test:
override:
- bundle exec rake spec:baseimage
Dockerfileに従って
Dockerコンテナをビルド
dockerコマンドが使えるようになる
ビルドしたコンテナに対し
てserverspecでテスト
Serverspec
describe package('git') do
it { should be_installed }
end
describe file('/etc/timezone') do
its(:content){ should include 'Asia/Tokyo' }
end
describe user('debian') do
it { should belong_to_group 'sudo' }
end
describe service('sshd') do
it { should be_enabled }
end
Docker+Serverspec on Circle CI
ハマりポイント
● serverspec(specinfra)のdockerバックエンド
● docker rm
● docker exec
test on Circle CI: ALL failed
70 examples, 70 failures
docker backend of serverspec
specinfra 2.12.3 (2015-02-01) の実装(抜粋)
module Specinfra::Backend
class Docker < Exec
# (snip)
def run_command(cmd, opts={})
cmd = build_command(cmd)
cmd = add_pre_command(cmd)
docker_run!(cmd)
end
specinfraのdockerバック
エンドのコード
テストに応じてコンテナに
対してコマンドを実行
def docker_run!(cmd, opts={})
opts = # (snip)
container = ::Docker::Container.create(opts)
begin
container.start
begin
stdout, stderr = container.attach(:logs => true)
result = container.wait
return CommandResult.new :stdout => stdout.join, :stderr =>
stderr.join, :exit_status => result['StatusCode']
rescue
container.kill
end
ensure
container.delete
# (snip)
コンテナの削除
ここで例外
コンテナ起動
コンテナ内での
コマンド実行結
果待ち
“docker rm” on Circle CI…?
machine:
services:
- docker
dependencies:
override:
- docker pull minimum2scp/baseimage:latest
test:
override:
- docker run --name c1 -d minimum2scp/baseimage:latest
- docker stop c1
- docker rm c1
コンテナを起動して停止して
削除するだけの簡単なテスト
docker rm: error!
docker rm
でエラー!
docker rm: error message
$ docker rm c1
Error response from daemon: Cannot destroy container c1:
Driver btrfs failed to remove root filesystem 431a239…
(snip)…: Failed to destroy btrfs snapshot: operation not
permitted
FATA[0000] Error: failed to remove one or more containers
docker rm c1 returned exit code 1
answer from support
this is a known limitation of our container permissions model. We have a "root"
user in the container which has a subset of the capabilities of the real root user,
this enables it to perform many of the same actions that you would ordinarily
need the real root user to perform.
Unfortunately, removing a btrfs snapshot to rm a docker image requires greater
capabilities than we can securely grant to the "root" user in the container
Fortunately you don't need to worry about any docker filesystems you've
created during the build. We completely destroy the container's filesystem
when the build is finished, removing any docker filesystems too
日本語でおk
● 既知の問題(セキュリティのための制限)
● docker rm -> btrfs スナップショット削除に必要
となる権限を与えられていない
● ビルド終了時に全部消えるから docker rm でき
ないことは気にしなくていい
monkey patch
## workaround for Circle CI
if ENV['CIRCLECI']
class Docker::Container
def remove(options={}); end
alias_method :delete, :remove
end
end
spec/spec_helper.rb
CircleCIではコンテナを削
除しない
more problems
✔ docker rm でエラー→コンテナを削除しない
❌ 遅い
● OS 種別の判定に数秒
● 70exampleの実行に約30秒
❌ まれによく偶発的にfailしていた
● CircleCIでは頻繁にランダムに発生
● ローカルPCではまれ(docker pullとテスト併走で再現)
use ssh backend
require 'serverspec'
require 'docker'
container = ::Docker::Container.create({'Image' => ENV['DOCKER_IMAGE']})
container.start
set :backend, :ssh
set :host, container.json['NetworkSettings']['IPAddress']
set :ssh_options, {:user => 'debian', :password => 'debian'}
set :os, :family => 'debian', :arch => 'x86_64', :release => '8.0'
sleep 3
docker-api gemを利用し
てコンテナを起動
コンテナのIPアド
レス等設定
OSの自動判定をスキップコンテナ内のsshd起動を待つ
spec/spec_helper.rb
SSHバックエンドを使用
kaizen
✔ docker rm でエラー→コンテナ削除しない
✔遅い→SSHバックエンドで高速化(10秒以内)
✔偶発的にfailしていた→failしなくなった
specinfra v2.13.0 (2015-02-13)
https://github.com/serverspec/specinfra/pull/315
“docker exec” on Circle CI…?
machine:
services:
- docker
dependencies:
override:
- docker pull minimum2scp/baseimage:latest
test:
override:
- docker run --name c1 -d minimum2scp/baseimage:latest
- docker exec c1 uname -a
コンテナを起動してdocker execで
コマンド実行するだけの簡単なテス
ト
docker exec: error
docker exec
でエラー!
docker exec: error message
$ docker exec c1 uname -a
FATA[0000] Error response from daemon:
Unsupported: Exec is not supported by the
lxc driver docker exec c1 uname -a returned
exit code 1
answer from support
I'm afraid that we don't support docker exec in CircleCI at
the moment. We are planning on a fix in the next month or
so.Would that work for you? Is it possible if you use another
workaround for the moment?
来月(2015年4月)あたりdocker exec使えるようになるらしいで
す!
news
We are planning to release an upgraded Linux container image on 2015-03-12
which includes a number of updates many people have been asking for,
notably:
● Postgres is updated to 9.4
● iojs is pre-installed on the container image
● Firefox is updated to 36
If you use Firefox for browser testing you should upgrade to Selenium 2.45 at
your earliest convenience. We'll be upgrading Chrome shortly, in the next
container image we release which is currently slated for the following week.
see also:
“Changelog”
https://circleci.com/changelog
“The Circle Blog | Testing made easy” http:
//blog.circleci.com/
www.magellanic-clouds.com

Weitere ähnliche Inhalte

Was ist angesagt?

Dockerで開発環境をデリバる
Dockerで開発環境をデリバるDockerで開発環境をデリバる
Dockerで開発環境をデリバるDaigou Harada
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響Masahito Zembutsu
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪Kunihiro TANAKA
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもんMasahito Zembutsu
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンRyo Nakamaru
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Masahito Zembutsu
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Masahiro Nagano
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイoshiro_seiya
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかえむ ばーど
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでRyo Nakamaru
 
Cloud founryインストール手順
Cloud founryインストール手順Cloud founryインストール手順
Cloud founryインストール手順Kotaro Noyama
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Masahito Zembutsu
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築gree_tech
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化Yuki Kanazawa
 

Was ist angesagt? (20)

Dockerで開発環境をデリバる
Dockerで開発環境をデリバるDockerで開発環境をデリバる
Dockerで開発環境をデリバる
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響コンテナ技術と普及がシステム・インテグレータに与える影響
コンテナ技術と普及がシステム・インテグレータに与える影響
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
Docker Swarm モード にゅうもん
Docker Swarm モード にゅうもんDocker Swarm モード にゅうもん
Docker Swarm モード にゅうもん
 
JAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオンJAWS-UG コンテナ支部 Docker入門 ハンズオン
JAWS-UG コンテナ支部 Docker入門 ハンズオン
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴Docker最新動向2017秋+セキュリティの落とし穴
Docker最新動向2017秋+セキュリティの落とし穴
 
Docker入門
Docker入門Docker入門
Docker入門
 
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
 
Jenkins with Docker
Jenkins with DockerJenkins with Docker
Jenkins with Docker
 
Dockerでデプロイ
DockerでデプロイDockerでデプロイ
Dockerでデプロイ
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
コンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのかコンテナ型仮想化とはなんだったのか
コンテナ型仮想化とはなんだったのか
 
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまでDockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
 
Cloud founryインストール手順
Cloud founryインストール手順Cloud founryインストール手順
Cloud founryインストール手順
 
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!Dockerライフサイクルの基礎 地雷を踏み抜けろ!
Dockerライフサイクルの基礎 地雷を踏み抜けろ!
 
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
 
【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化【dots. IT勉強会】開発環境のDocker化
【dots. IT勉強会】開発環境のDocker化
 

Andere mochten auch

VAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuokaVAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuokaichikaway
 
Jenkinsのおっさんを眺めるだけ
Jenkinsのおっさんを眺めるだけJenkinsのおっさんを眺めるだけ
Jenkinsのおっさんを眺めるだけNobukazu Hanada
 
CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡Koichiro Sumi
 
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08) 私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08) parrotstudio
 
自分のチームをどう作る?
自分のチームをどう作る?自分のチームをどう作る?
自分のチームをどう作る?Masakatsu Sugii
 
"プロのプログラマ"を目指す初心者が最初に読むべきたった一冊の本
"プロのプログラマ"を目指す初心者が最初に読むべきたった一冊の本"プロのプログラマ"を目指す初心者が最初に読むべきたった一冊の本
"プロのプログラマ"を目指す初心者が最初に読むべきたった一冊の本parrotstudio
 
第3回全脳アーキテクチャ勉強会(山川)発表資料
第3回全脳アーキテクチャ勉強会(山川)発表資料第3回全脳アーキテクチャ勉強会(山川)発表資料
第3回全脳アーキテクチャ勉強会(山川)発表資料ドワンゴ 人工知能研究所
 
バラバラの同僚を社内勉強会でつなげよう
バラバラの同僚を社内勉強会でつなげようバラバラの同僚を社内勉強会でつなげよう
バラバラの同僚を社内勉強会でつなげようMasakatsu Sugii
 
iOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探すiOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探すKenji Tanaka
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Seiya Tokui
 
Deep Learning技術の今
Deep Learning技術の今Deep Learning技術の今
Deep Learning技術の今Seiya Tokui
 
ソフトウェア工学からコンピューターサイエンスへ (デブサミ2014)
ソフトウェア工学からコンピューターサイエンスへ (デブサミ2014)ソフトウェア工学からコンピューターサイエンスへ (デブサミ2014)
ソフトウェア工学からコンピューターサイエンスへ (デブサミ2014)Masayoshi Hagiwara
 
あのアニメのOp,edっぽいアニメーションを実装する話
あのアニメのOp,edっぽいアニメーションを実装する話あのアニメのOp,edっぽいアニメーションを実装する話
あのアニメのOp,edっぽいアニメーションを実装する話Kenji Tanaka
 
東急ハンズを支える技術
東急ハンズを支える技術東急ハンズを支える技術
東急ハンズを支える技術Tomoaki Imai
 
20160820 iOSDC Lunch Session「東急ハンズのPOSから学んだ、業務iOSアプリの向き合い方」
20160820 iOSDC Lunch Session「東急ハンズのPOSから学んだ、業務iOSアプリの向き合い方」20160820 iOSDC Lunch Session「東急ハンズのPOSから学んだ、業務iOSアプリの向き合い方」
20160820 iOSDC Lunch Session「東急ハンズのPOSから学んだ、業務iOSアプリの向き合い方」Yusuke KUROIWA
 

Andere mochten auch (19)

Walter の進捗と今後
Walter の進捗と今後Walter の進捗と今後
Walter の進捗と今後
 
VAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuokaVAddy - CI勉強会 fukuoka
VAddy - CI勉強会 fukuoka
 
Jenkinsのおっさんを眺めるだけ
Jenkinsのおっさんを眺めるだけJenkinsのおっさんを眺めるだけ
Jenkinsのおっさんを眺めるだけ
 
CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡
 
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08) 私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
私に作る時間がないのはどう考えても仕事が悪い!? (Gunma.web #10 2012/09/08)
 
自分のチームをどう作る?
自分のチームをどう作る?自分のチームをどう作る?
自分のチームをどう作る?
 
"プロのプログラマ"を目指す初心者が最初に読むべきたった一冊の本
"プロのプログラマ"を目指す初心者が最初に読むべきたった一冊の本"プロのプログラマ"を目指す初心者が最初に読むべきたった一冊の本
"プロのプログラマ"を目指す初心者が最初に読むべきたった一冊の本
 
第3回全脳アーキテクチャ勉強会(山川)発表資料
第3回全脳アーキテクチャ勉強会(山川)発表資料第3回全脳アーキテクチャ勉強会(山川)発表資料
第3回全脳アーキテクチャ勉強会(山川)発表資料
 
バラバラの同僚を社内勉強会でつなげよう
バラバラの同僚を社内勉強会でつなげようバラバラの同僚を社内勉強会でつなげよう
バラバラの同僚を社内勉強会でつなげよう
 
iOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探すiOSアプリケーションアーキテクチャ選定の鍵を探す
iOSアプリケーションアーキテクチャ選定の鍵を探す
 
全脳アーキテクチャ勉強会 第2回 (山川)
全脳アーキテクチャ勉強会 第2回 (山川)全脳アーキテクチャ勉強会 第2回 (山川)
全脳アーキテクチャ勉強会 第2回 (山川)
 
ビジネスモデル設計ワークショップ
ビジネスモデル設計ワークショップビジネスモデル設計ワークショップ
ビジネスモデル設計ワークショップ
 
Deep learning実装の基礎と実践
Deep learning実装の基礎と実践Deep learning実装の基礎と実践
Deep learning実装の基礎と実践
 
Deep Learning技術の今
Deep Learning技術の今Deep Learning技術の今
Deep Learning技術の今
 
ビジネスモデルの詳細定義
ビジネスモデルの詳細定義ビジネスモデルの詳細定義
ビジネスモデルの詳細定義
 
ソフトウェア工学からコンピューターサイエンスへ (デブサミ2014)
ソフトウェア工学からコンピューターサイエンスへ (デブサミ2014)ソフトウェア工学からコンピューターサイエンスへ (デブサミ2014)
ソフトウェア工学からコンピューターサイエンスへ (デブサミ2014)
 
あのアニメのOp,edっぽいアニメーションを実装する話
あのアニメのOp,edっぽいアニメーションを実装する話あのアニメのOp,edっぽいアニメーションを実装する話
あのアニメのOp,edっぽいアニメーションを実装する話
 
東急ハンズを支える技術
東急ハンズを支える技術東急ハンズを支える技術
東急ハンズを支える技術
 
20160820 iOSDC Lunch Session「東急ハンズのPOSから学んだ、業務iOSアプリの向き合い方」
20160820 iOSDC Lunch Session「東急ハンズのPOSから学んだ、業務iOSアプリの向き合い方」20160820 iOSDC Lunch Session「東急ハンズのPOSから学んだ、業務iOSアプリの向き合い方」
20160820 iOSDC Lunch Session「東急ハンズのPOSから学んだ、業務iOSアプリの向き合い方」
 

Ähnlich wie Circle ci and docker+serverspec

Docker handson
Docker handsonDocker handson
Docker handsonkoda3
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎Daisuke Hiraoka
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Yuichi Ito
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Naoki Nagazumi
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方Kento Aoyama
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on dockerHiroshi Miura
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術までAkihiro Suda
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築Saito5656
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)Iwana Chan
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念Masahito Zembutsu
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西Masahide Yamamoto
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編Masahito Zembutsu
 
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Masahito Zembutsu
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよnpsg
 

Ähnlich wie Circle ci and docker+serverspec (20)

Docker handson
Docker handsonDocker handson
Docker handson
 
Docker & Kubernetes基礎
Docker & Kubernetes基礎Docker & Kubernetes基礎
Docker & Kubernetes基礎
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Docker超入門
Docker超入門Docker超入門
Docker超入門
 
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
Docker/Aarukas入門ハンズオン資料~第1回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方Docker入門: コンテナ型仮想化技術の仕組みと使い方
Docker入門: コンテナ型仮想化技術の仕組みと使い方
 
Docker社内勉強会
Docker社内勉強会Docker社内勉強会
Docker社内勉強会
 
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編Dockerのキホンその2 Docker Compose Swarm Machine 利用編
Dockerのキホンその2 Docker Compose Swarm Machine 利用編
 
ゆるふわなDockerの使い方
ゆるふわなDockerの使い方ゆるふわなDockerの使い方
ゆるふわなDockerの使い方
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 
WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築WSL2+docker+JupyterとVS Codeリモート環境の構築
WSL2+docker+JupyterとVS Codeリモート環境の構築
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)社内勉強会資料(Varnish Module)
社内勉強会資料(Varnish Module)
 
DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念DockerとDocker Hubの操作と概念
DockerとDocker Hubの操作と概念
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料Docker道場「Dockerの基本概念」0825インフラ勉強会資料
Docker道場「Dockerの基本概念」0825インフラ勉強会資料
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 

Kürzlich hochgeladen

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Kürzlich hochgeladen (8)

TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

Circle ci and docker+serverspec

  • 2. やまだつよし ➔ infra engineer ➔ twitter: @minimum2scp ➔ Debian,Ruby about me
  • 5. motivation (1): chatops ● “GitHub 時代のデプロイ戦略”http://d.hatena. ne.jp/naoya/20140502/1399027655 ● “Slack / Hubot / GitHub / CircleCI による ChatOpsなデプロイ方法”http://qiita.com/s- kiriki/items/26bdf537169891b22653
  • 6. motivation (2): Docker ● “Build and deploy Docker containers on CircleCI” https://circleci. com/integrations/docker ● “Continuous Integration and Delivery with Docker” https://circleci.com/docs/docker ● Circle CIのビルドコンテナ内でのdockerの実行 をサポート
  • 7. motivation (3): SSH ● “SSH access to builds” https://circleci. com/docs/ssh-build ● GithubのSSH公開鍵でログイン ● 30分ほどで切断される ● sudo 利用可能
  • 8. pricing “Continuous Integration and Deployment on CircleCI just got better: now it’s free.” http://blog.circleci.com/continuous- integration-and-deployment-on-circleci-just-got-better-now- its-free/ ● 1コンテナは無料 ● 追加1コンテナあたり $50/Month ● OSSプロジェクトでは追加で3コンテナ無料で利用可能(計4 コンテナ無料)
  • 9. Demo: Getting Started with Circle CI https://circleci.com/docs/getting-started 1. Circle CIにサインアップ 2. Circle CI に Github へのアクセス許可 3. プロジェクトをクリック demo: minimum2scp/tdiary-style-gfm を Circle CI でテストしてみます。
  • 10. example of circle.yml machine: ruby: version: 2.2.0 dependencies: override: - bundle install test: override: - bundle exec rake spec
  • 11. circle.yml how to ● “Configuring CircleCI” https://circleci. com/docs/configuration ● “Sample circle.yml file“ https://circleci. com/docs/config-sample
  • 12. circle.yml: machine machine: ruby: version: 2.2.0 services: - elasticsearch rvmでRuby 2.2.0を使用する rubyの他にも nodejs, python, php, java などが使用可能です。 https://circleci.com/docs/languages PostgreSQLやMySQL, Redis, MongoDB など 書かなくても起動しているデータベースもあります。 https://circleci.com/docs/environment#databases データベースやサービスを起動する
  • 13. circle.yml: dependencies dependencies: override: - bundle install 依存ライブラリを インストールする コマンド - Gemfile = bundle install (ruby) - requirements.txt = pip install (python) - package.json = npm install (nodejs) のように自動的に依存ライブラリのインストール 方法を推測して実行するので、override しなくて もインストールすることも可能です。
  • 14. circle.yml: test test: override: - bundle exec rake spec テストを実行する コマンド Ruby, Railsでは Test::Unit, RSpec などのテストを自動的に推測して 実行してくれますので、(場合によりますが)overrideを書かなくてもテス トを実行することが可能です。 (もちろん他の言語でも→ https://circleci.com/docs/languages)
  • 15. minimum2scp/dockerfiles https://github.com/minimum2scp/dockerfiles ● Debian sid amd64ベースのDockerコンテナ 集のリポジトリ ● serverspecによるコンテナのテスト ● Circle CI上でコンテナのビルドとテスト
  • 17. circle.yml (Docker+Serverspec) machine: services: - docker dependencies: override: - cd baseimage;docker build -t minimum2scp/baseimage:latest . - bundle install test: override: - bundle exec rake spec:baseimage Dockerfileに従って Dockerコンテナをビルド dockerコマンドが使えるようになる ビルドしたコンテナに対し てserverspecでテスト
  • 18. Serverspec describe package('git') do it { should be_installed } end describe file('/etc/timezone') do its(:content){ should include 'Asia/Tokyo' } end describe user('debian') do it { should belong_to_group 'sudo' } end describe service('sshd') do it { should be_enabled } end
  • 19. Docker+Serverspec on Circle CI ハマりポイント ● serverspec(specinfra)のdockerバックエンド ● docker rm ● docker exec
  • 20. test on Circle CI: ALL failed 70 examples, 70 failures
  • 21. docker backend of serverspec specinfra 2.12.3 (2015-02-01) の実装(抜粋) module Specinfra::Backend class Docker < Exec # (snip) def run_command(cmd, opts={}) cmd = build_command(cmd) cmd = add_pre_command(cmd) docker_run!(cmd) end specinfraのdockerバック エンドのコード テストに応じてコンテナに 対してコマンドを実行
  • 22. def docker_run!(cmd, opts={}) opts = # (snip) container = ::Docker::Container.create(opts) begin container.start begin stdout, stderr = container.attach(:logs => true) result = container.wait return CommandResult.new :stdout => stdout.join, :stderr => stderr.join, :exit_status => result['StatusCode'] rescue container.kill end ensure container.delete # (snip) コンテナの削除 ここで例外 コンテナ起動 コンテナ内での コマンド実行結 果待ち
  • 23. “docker rm” on Circle CI…? machine: services: - docker dependencies: override: - docker pull minimum2scp/baseimage:latest test: override: - docker run --name c1 -d minimum2scp/baseimage:latest - docker stop c1 - docker rm c1 コンテナを起動して停止して 削除するだけの簡単なテスト
  • 24. docker rm: error! docker rm でエラー!
  • 25. docker rm: error message $ docker rm c1 Error response from daemon: Cannot destroy container c1: Driver btrfs failed to remove root filesystem 431a239… (snip)…: Failed to destroy btrfs snapshot: operation not permitted FATA[0000] Error: failed to remove one or more containers docker rm c1 returned exit code 1
  • 26. answer from support this is a known limitation of our container permissions model. We have a "root" user in the container which has a subset of the capabilities of the real root user, this enables it to perform many of the same actions that you would ordinarily need the real root user to perform. Unfortunately, removing a btrfs snapshot to rm a docker image requires greater capabilities than we can securely grant to the "root" user in the container Fortunately you don't need to worry about any docker filesystems you've created during the build. We completely destroy the container's filesystem when the build is finished, removing any docker filesystems too
  • 27. 日本語でおk ● 既知の問題(セキュリティのための制限) ● docker rm -> btrfs スナップショット削除に必要 となる権限を与えられていない ● ビルド終了時に全部消えるから docker rm でき ないことは気にしなくていい
  • 28. monkey patch ## workaround for Circle CI if ENV['CIRCLECI'] class Docker::Container def remove(options={}); end alias_method :delete, :remove end end spec/spec_helper.rb CircleCIではコンテナを削 除しない
  • 29. more problems ✔ docker rm でエラー→コンテナを削除しない ❌ 遅い ● OS 種別の判定に数秒 ● 70exampleの実行に約30秒 ❌ まれによく偶発的にfailしていた ● CircleCIでは頻繁にランダムに発生 ● ローカルPCではまれ(docker pullとテスト併走で再現)
  • 30. use ssh backend require 'serverspec' require 'docker' container = ::Docker::Container.create({'Image' => ENV['DOCKER_IMAGE']}) container.start set :backend, :ssh set :host, container.json['NetworkSettings']['IPAddress'] set :ssh_options, {:user => 'debian', :password => 'debian'} set :os, :family => 'debian', :arch => 'x86_64', :release => '8.0' sleep 3 docker-api gemを利用し てコンテナを起動 コンテナのIPアド レス等設定 OSの自動判定をスキップコンテナ内のsshd起動を待つ spec/spec_helper.rb SSHバックエンドを使用
  • 31. kaizen ✔ docker rm でエラー→コンテナ削除しない ✔遅い→SSHバックエンドで高速化(10秒以内) ✔偶発的にfailしていた→failしなくなった
  • 33. “docker exec” on Circle CI…? machine: services: - docker dependencies: override: - docker pull minimum2scp/baseimage:latest test: override: - docker run --name c1 -d minimum2scp/baseimage:latest - docker exec c1 uname -a コンテナを起動してdocker execで コマンド実行するだけの簡単なテス ト
  • 34. docker exec: error docker exec でエラー!
  • 35. docker exec: error message $ docker exec c1 uname -a FATA[0000] Error response from daemon: Unsupported: Exec is not supported by the lxc driver docker exec c1 uname -a returned exit code 1
  • 36. answer from support I'm afraid that we don't support docker exec in CircleCI at the moment. We are planning on a fix in the next month or so.Would that work for you? Is it possible if you use another workaround for the moment? 来月(2015年4月)あたりdocker exec使えるようになるらしいで す!
  • 37. news We are planning to release an upgraded Linux container image on 2015-03-12 which includes a number of updates many people have been asking for, notably: ● Postgres is updated to 9.4 ● iojs is pre-installed on the container image ● Firefox is updated to 36 If you use Firefox for browser testing you should upgrade to Selenium 2.45 at your earliest convenience. We'll be upgrading Chrome shortly, in the next container image we release which is currently slated for the following week.
  • 38. see also: “Changelog” https://circleci.com/changelog “The Circle Blog | Testing made easy” http: //blog.circleci.com/