2017-01-05 14 views
1

mongodbテスト用に構築されたドッカーイメージがあります。 zhaoyi0113/mongo-uatから見つけることができます。このイメージからドッカーコンテナを起動すると、スタートアップに数分かかるmongodbインスタンスがいくつか作成されます。今私はこのコンテナの内部で統合テストケースを無人機CIで実行したいと考えています。ドローンパイプラインのドッカーコンテナ内で統合テストを実行する方法

pipeline: 
    build: 
    image: node:latest 
    commands: 
     - npm install 
     - npm test 
     - npm run eslint 
    integration: 
    image: zhaoyi0113/mongo-uat 
    commands: 
     - npm install 
     - npm run integration 

最初はnodejsプロジェクトでユニットテストを実行することで、このパイプラインでは二つのステップがあります。以下は、私の.drone.ymlファイルです。 2番目のものintegrationは、mongodbドッカー画像で統合テストケースを実行するために使用されます。

drone execを実行すると、エラーfailed to connect to mongo instanceが返されます。私は、mongodbのインスタンスが起動するまでに数分かかるためだと思います。コマンドnpm installnpm run integrationは、mongodbインスタンスの起動後に実行する必要があります。どうすればビルドコマンドを遅らせることができますか?

EDIT1

画像zhaoyi0113/mongo-uatはMongoDBの環境を持っています。いくつかのmongodbインスタンスが作成されます。私はこのコンテナを起動するのにこのコマンドを実行することができますdocker run -d zhaoyi0113/mongo-uatこのコンテナに接続してからmongodbのインスタンスを見ることができます。ドローンがドッカーのコンテナをどのように起動するのかよく分かりません。

+0

これは完全なYAMLの例ですか? mongodbドッカーの画像はどこで始まっていますか? http://readme.drone.io/usage/services-guide/を見ましたか? –

+0

はい、それは完全なyamlファイルです。 mongodbドッカーは、このイメージ「zhaoyi0113/mongo-uat」に組み込まれています。サービスセクションでmongodbなどのサービスを –

+0

に宣言する必要があります。例については、http://readme.drone.io/usage/services-guideを参照してください。パイプラインでサービスを開始することはベストプラクティスとはみなされません。 –

答えて

3

統合テストに推奨されるアプローチは、YAMLのサービスセクションで、あなたのサービスコンテナを配置することである[1] [2]

そこで私はYAMLファイルの下に作成しますモンゴサービスコンテナを開始するためです。 Mongoサービスは既定のポート127.0.0.1から開始され、パイプラインコンテナからアクセスできます。

pipeline: 
    test: 
    image: node 
    commands: 
     - npm install 
     - npm run test 
    integration: 
    image: node 
    commands: 
     - npm run integration 

services: 
    mongo: 
    image: mongo:3.0 

これは、MySQL、Postgres、Mongoなどのサービスのテストに推奨される方法です。

[1] http://readme.drone.io/usage/getting-started/#services
[2] http://readme.drone.io/usage/services-guide/

関連する問題