2017-07-02 14 views
3

正しい.gitlab-ci.ymlファイルを作成しようとしています。 オンライン gitlab.comは自己ホストGitlabではありません。たいていの場合(すべてではないにしても)ドキュメントは自己ホストgitlabインスタンスに関するものです。Gitlabモカテストとドッカータグの問題

構築したコンテナでMocha-Chaiテストを実行し、テストが合格すると、イメージを作成し、最新のgitタグと一致するタグを付けてGitlabレジストリに保存します。

テスト一部

私はいつもモカがを見つけていない取得してみてください何でも、実行中のテストを取得することはできません。

以下は私の.ymlファイルです。ビルドセクションが機能しています。 問題は、テストセクションとリリースイメージのドッカータグ部分にあります。私はまた、

test: 
    stage: test 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker run $CONTAINER_TEST_IMAGE npm test 

test: 
    stage: test 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker run $CONTAINER_TEST_IMAGE npm install mocha -g 
    - docker run $CONTAINER_TEST_IMAGE npm install chai -g 
    - docker run $CONTAINER_TEST_IMAGE npm test 

を試してみましたthe official gitlab documentation

image: docker:latest 
services: 
- docker:dind 

stages: 
- build 
- test 
- release 
- deploy 

variables: 
    CONTAINER_TEST_IMAGE: registry.gitlab.com/edelacruz/cloudtrader-microservices:$CI_COMMIT_REF_NAME 
    CONTAINER_RELEASE_IMAGE: registry.gitlab.com/edelacruz/cloudtrader-microservices:latest 

before_script: 
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com/edelacruz/cloudtrader-microservices 

build: 
    stage: build 
    script: 
    - docker build --pull -t $CONTAINER_TEST_IMAGE . 
    - docker push $CONTAINER_TEST_IMAGE 

test: 
    stage: test 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker run $CONTAINER_TEST_IMAGE npm install && npm test 

公式gitlabドキュメントからYMLファイルを持って、すべて同じ結果:

sh: mocha: not found

テストスクリプトpackage.jsonでtは私がdevDependenciesにし、依存関係に入れモカとチャイの両方を試してみました

"test": "mocha ./Test", 

です。私は、タグの一部を省略する場合

"devDependencies": { 
    "chai": "^4.0.2", 
    "mocha": "^3.4.2" 
    } 

"dependencies": { 
    "chai": "^4.0.2", 
    "mocha": "^3.4.2" 
    }, 

タグ部

variables: 
    CONTAINER_TEST_IMAGE: registry.gitlab.com/edelacruz/cloudtrader-microservices:$CI_COMMIT_REF_NAME 
    CONTAINER_RELEASE_IMAGE: registry.gitlab.com/edelacruz/cloudtrader-microservices:latest 

before_script: 
    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com/edelacruz/cloudtrader-microservices 

release-image: 
    stage: release 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE:$CI_COMMIT_TAG 
    - docker push $CONTAINER_RELEASE_IMAGE 
    only: 
    - master 

リリース - 画像は動作します。 しかし、私は自分のイメージにgitタグを付け加えたいと思っています。最新やマスターではありません。 (ラインdocker run $CONTAINER_TEST_IMAGE npm install && npm test付き)あなたの最初の試みで

$ docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE:$CI_COMMIT_TAG Error parsing reference: "registry.gitlab.com/edelacruz/cloudtrader-microservices:" is not a valid repository/tag: invalid reference format ERROR: Job failed: exit code 1

enter image description here

答えて

1

は、最初のアプローチでこれを使用します。

test: 
    stage: test 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker run $CONTAINER_TEST_IMAGE sh -c 'npm install -g mocha && npm install && npm test' 

私はグローバルにインストールモカを追加しました。後の方法で試したことは、すべてのdocker runがイメージに基づく新しいコンテナであり、以前のコンテナではないため動作しませんでした。

+0

ありがとうございました。私はすべての後に私のドッカーの画像にすべてを入れましたが、この返信は正しい方向に私を得た。あなたの説明のために@stacktraceに感謝します。しかしあなたの答えは間違っていました。私のベースイメージアルパインにはbashシェルがなく、shシェルだけでした。 –

+0

@EricDelaCruz:これは問題ありません。あなたの基本イメージが何であるかは言及していないことを考慮すると、「正しい」答えが実際に何であるかを実際に知ることは難しいです。私の要点は、ランナーがあなたのコマンドを2つに分割しないように、どんなシェルでもコマンドをラップする必要があるということでした。 – Stacktrace

+0

@Stacktrace、はい、それがポイントでした。 'mocha'コマンドが-gグローバルインストールなしで動作できるかどうかはわかりません。 – Robert

1

、gitlabランナーはdocker run $CONTAINER_TEST_IMAGE npm installnpm testにコマンドを分離します。気づいたとおり、2番目のコマンドはドッカーコンテナ内で実行されません。

docker run $CONTAINER_TEST_IMAGE npm testは、mochaが既にドッカーイメージにインストールされている必要があります。あなたの3回目のために

docker run $CONTAINER_TEST_IMAGE npm install mocha -g 
docker run $CONTAINER_TEST_IMAGE npm install chai -g 
docker run $CONTAINER_TEST_IMAGE npm test 

の各コマンドは、実際に(つまり、コマンドは同じドッキングウィンドウコンテナ内で実行する必要があることを示すものは何もありません。)別のドッキングウィンドウコンテナ上で実行されます。

これを解決する最も簡単な方法は何ですか。あなたの最初の試みは実際にはかなり近いです。 gitlabランナーがコマンドを2つに分割しないようにするだけで済みます。

次のようなものが動作するはずです:

test: 
    stage: test 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker run $CONTAINER_TEST_IMAGE /bin/bash -c "npm install --only=dev; npm test" 
関連する問題