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 install
和npm 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"