Gitlab Mochatesting和Docker标签问题

我正在尝试创build一个正确的.gitlab-ci.yml文件。 这是在线 gitlab.com不是为自己托pipe的Gitlab。 大多数(如果不是全部的话)文档是关于一个自己托pipe的gitlab实例。

我想要的是在构build的容器上运行我的Mocha-Chaitesting,当testing通过时,我想要构build一个图像并将其存储在Gitlab Registry中,并使用与最新的git标签相匹配的标签。

testing部分

我无法得到testing运行,无论我尝试我总是得到摩卡没有find

下面是我的.yml文件。 生成部分正在工作。 问题是在testing部分和释放镜像的docker标签部分。 我从官方的gitlab文档中得到了官方的gitlab文档中的yml文件

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 

所有相同的结果:

sh:摩卡:找不到

package.json中的testing脚本是

  "test": "mocha ./Test", 

我尝试把mocha和chai放在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标签$ CONTAINER_TEST_IMAGE $ CONTAINER_RELEASE_IMAGE:$ CI_COMMIT_TAGparsing引用时出错:“registry.gitlab.com/edelacruz/cloudtrader-microservices:”不是有效的资源库/标签:无效的引用格式错误:作业失败:退出代码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是一个基于图像的新容器,而不是以前的容器。

在你的第一次尝试(使用行docker run $CONTAINER_TEST_IMAGE npm install && npm test ),gitlab docker run $CONTAINER_TEST_IMAGE npm install将命令分离为docker 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 

每个命令实际上都在一个单独的docker容器上运行(即没有任何指示需要在同一个docker容器中运行这些命令)。

那么,解决这个问题最简单的方法是什么? 你的第一次尝试实际上非常接近。 你只需要确保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"