.NET CoreのDockerコンテナに入ったWebアプリをTravisCIでCI
2017.08.02
VisualStudioで作成された.dcprojをdotnetコマンドでビルドしようとすると、"Microsoft.Docker.Sdkのほにゃららがない"と言われる。
これを言われるのはWindows環境でもLinux環境でも。dotnet cliでイシューとして挙げられている。
VS2017 Docker-Compose Project breaks build on command line
必要なSDKはdotnet cliのディレクトリにはないが、VisualStudioのディレクトリには入っている。これを使えばまあできんこともないが、一時的な策になってしまう。
dotnetコマンドで.dcprojをビルドするのはここではあきらめる。
そもそもぼくはなにがしたいのか。VisualStudioで作ったdocker-compose入りのプロジェクトをビルドしたかった。TravisCI上でdotnetコマンドでプロジェクトをビルドして、そこから出てきたDockerイメージをDocker hubへプッシュしたかった。
まあそもそも.dcprojのビルドは、dotnetコマンドでは無理だがVisualStudioを使えばビルドできる。それを踏まえて。
代替案
・必要なファイルを開発環境のWindowsで用意してTravisCIへ送って、DockerイメージをTravisCIでビルドしてテストがうまくいったら、Docker hubへプッシュ
・開発環境でVisualStudioでビルドしたDockerイメージをTravisCIでプルしてテスト。テストに通ったらDockerイメージをリネームしてプッシュ
一つ目。デフォで必要なビルドしてファイルがgitでignoreされているので、ここのデフォ設定をいじらなければならない。その結果、変更を追いかけるファイルが増えてアレ
二つ目。手っ取り早い。これでいいや。まあ暫定なので、.dcprojがビルドできないバグが直ったら改めて考える。
一通りやってみたGithubリポジトリ↓
https://github.com/hMatoba/DNCinDocker
ロクに参考資料がないのをトライアンドエラーでやったので、コミットタイトルは超適当。
.NET CoreのWebアプリが作成できたらリリース設定でプロジェクトをビルドし、WebアプリのDockerイメージを得る。Dockerイメージには"ci"というタグをつけておくことにする。そのイメージをDocker hubへプッシュしておく。
Docker hubにプッシュしてあるイメージを使ったTravisCIでのテストを用意する。TestWithSeleniumというプロジェクトでSeleniumを使ったテストを用意した。これをdocker-composeで管理する。TravisCI上で使うためのdocker-composeファイルを用意する。
上記を使ってTravisCI上でテストを走らせる。
成功後にDockerイメージをリネームしてプッシュするので、Docker hubのIDとパスワードを使わなければならない。これは環境変数で埋め込む。
一通りファイルがそろったのでGithubへプッシュしてみる。そのままTravisCIへ流れるように設定してある。
TravisCIでテストはとおっている様子。
Docker hubに、開発環境からプッシュされたciタグのイメージと、TravisCIからプッシュされたlatestタグのイメージが上がっている。
ちなみにTravisCIで行っているコードの中身としては、必要なもののインストールとテストだけである。必要なものはdocker-composeとPythonのSeleniumドライバだけ。あとのテストコードはdocker-composeとPythonで処理される。つまり、このテストはWindowsでも実行できる。開発環境でもテストを検証できるってこと。便利。
The imported project "C:\Program Files\dotnet\sdk\1.0.0\Sdks\Microsoft.Docker.Sdk\Sdk\Sdk.props" was not found.
これを言われるのはWindows環境でもLinux環境でも。dotnet cliでイシューとして挙げられている。
VS2017 Docker-Compose Project breaks build on command line
必要なSDKはdotnet cliのディレクトリにはないが、VisualStudioのディレクトリには入っている。これを使えばまあできんこともないが、一時的な策になってしまう。
dotnetコマンドで.dcprojをビルドするのはここではあきらめる。
そもそもぼくはなにがしたいのか。VisualStudioで作ったdocker-compose入りのプロジェクトをビルドしたかった。TravisCI上でdotnetコマンドでプロジェクトをビルドして、そこから出てきたDockerイメージをDocker hubへプッシュしたかった。
まあそもそも.dcprojのビルドは、dotnetコマンドでは無理だがVisualStudioを使えばビルドできる。それを踏まえて。
代替案
・必要なファイルを開発環境のWindowsで用意してTravisCIへ送って、DockerイメージをTravisCIでビルドしてテストがうまくいったら、Docker hubへプッシュ
・開発環境でVisualStudioでビルドしたDockerイメージをTravisCIでプルしてテスト。テストに通ったらDockerイメージをリネームしてプッシュ
一つ目。デフォで必要なビルドしてファイルがgitでignoreされているので、ここのデフォ設定をいじらなければならない。その結果、変更を追いかけるファイルが増えてアレ
二つ目。手っ取り早い。これでいいや。まあ暫定なので、.dcprojがビルドできないバグが直ったら改めて考える。
一通りやってみたGithubリポジトリ↓
https://github.com/hMatoba/DNCinDocker
ロクに参考資料がないのをトライアンドエラーでやったので、コミットタイトルは超適当。
.NET CoreのWebアプリが作成できたらリリース設定でプロジェクトをビルドし、WebアプリのDockerイメージを得る。Dockerイメージには"ci"というタグをつけておくことにする。そのイメージをDocker hubへプッシュしておく。
Docker hubにプッシュしてあるイメージを使ったTravisCIでのテストを用意する。TestWithSeleniumというプロジェクトでSeleniumを使ったテストを用意した。これをdocker-composeで管理する。TravisCI上で使うためのdocker-composeファイルを用意する。
docker-compose.travis.yml
version: '2'
services:
dncindocker:
image: matoba/dncindocker:ci
ports:
- "8080:80"
selenium:
image: selenium/standalone-chrome
ports:
- "4444:4444"
links:
- dncindocker:webapp
上記を使ってTravisCI上でテストを走らせる。
language: csharp
mono: none
dotnet: 1.0.4
dist: trusty
services:
- docker
env:
- DOCKER_COMPOSE_VERSION=1.8.0
before_install:
- sudo rm /usr/local/bin/docker-compose
- curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
- chmod +x docker-compose
- sudo mv docker-compose /usr/local/bin
- docker-compose -f docker-compose.travis.yml config
- docker-compose -f docker-compose.travis.yml build
- docker-compose -f docker-compose.travis.yml up -d
- sudo pip install selenium
script:
- cd ./TestWithSelenium
- python setup.py test
after_success:
- docker tag matoba/dncindocker:ci matoba/dncindocker:latest
- docker login -u="${DOCKER_USERNAME}" -p="${DOCKER_PASSWORD}"
- docker push matoba/dncindocker:latest
matrix:
fast_finish: true
成功後にDockerイメージをリネームしてプッシュするので、Docker hubのIDとパスワードを使わなければならない。これは環境変数で埋め込む。
一通りファイルがそろったのでGithubへプッシュしてみる。そのままTravisCIへ流れるように設定してある。


TravisCIでテストはとおっている様子。

Docker hubに、開発環境からプッシュされたciタグのイメージと、TravisCIからプッシュされたlatestタグのイメージが上がっている。
ちなみにTravisCIで行っているコードの中身としては、必要なもののインストールとテストだけである。必要なものはdocker-composeとPythonのSeleniumドライバだけ。あとのテストコードはdocker-composeとPythonで処理される。つまり、このテストはWindowsでも実行できる。開発環境でもテストを検証できるってこと。便利。
comment: 0