2017-07-02 94 views
3

我正在嘗試創建一個正確的.gitlab-ci.yml文件。這是針對在線 gitlab.com不適用於自行託管的Gitlab。大多數(如果不是全部)文檔都是關於一個自託管的gitlab實例的。Gitlab Mocha測試和Docker標記問題

我想要的是在構建的容器上運行我的Mocha-Chai測試,當測試通過時,我想構建一個圖像並將其存儲在Gitlab註冊表中,並使用與最新的git標籤匹配的標記。

測試部分

我無法運行測試,無論我嘗試,我總是得到摩卡沒有找到

以下是我的.yml文件。構建部分正在工作。 問題出在版本映像的測試部分和docker標籤部分。我從官方gitlab文檔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 

我也試過

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 

得到了YML文件中的所有相同的結果:

sh: mocha: not found

的測試腳本噸的package.json

"test": "mocha ./Test", 

我都嘗試把摩卡和薛寶釵在devDependencies和依賴性。

"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 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

謝謝,這工作。我確實把所有東西都放在我的Docker鏡像中,但是這個回覆讓我朝着正確的方向發展。 @stacktrace感謝您的解釋,很有幫助。但是你的回答是錯誤的,我的基本形象Alpine沒有bash殼,只有sh殼。 –

+0

@EricDelaCruz:很好。考慮到你沒有提到你的基本圖像是什麼,很難真正知道「正確」的答案是什麼。我的觀點是你需要將你的命令封裝在任何可用的shell中,這樣跑步者不會將你的命令分成兩部分。 – Stacktrace

+0

@Stacktrace,是的,這是關鍵。我不確定'mocha'命令是否可以在沒有-g全局安裝的情況下工作。 – Robert

1

在你第一次嘗試(與線docker run $CONTAINER_TEST_IMAGE npm install && npm test),該gitlab亞軍分離命令到docker run $CONTAINER_TEST_IMAGE npm installnpm test。您可能會注意到,第二個命令未在Docker容器中運行。

第二次嘗試,docker run $CONTAINER_TEST_IMAGE npm test要求在碼頭圖像中已經安裝了摩卡咖啡。

對於您的第三次嘗試:

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 runner不會將命令分成兩部分。

類似下面應該工作:

test: 
    stage: test 
    script: 
    - docker pull $CONTAINER_TEST_IMAGE 
    - docker run $CONTAINER_TEST_IMAGE /bin/bash -c "npm install --only=dev; npm test"