Gitlab Mocha测试和Docker Tag问题

时间:2017-07-02 13:09:12

标签: docker mocha gitlab

我正在尝试创建一个正确的 .gitlab-ci.yml 文件。这是针对在线 gitlab.com而不是针对自托管的Gitlab。大多数(如果不是全部)文档都是关于自托管的gitlab实例。

我想要的是在构建的容器上运行我的Mocha-Chai测试,当测试通过时,我想构建一个图像并将其存储在Gitlab注册表中,其标记与我最新的git标记相匹配。

测试部分

我无法让测试运行,无论我尝试什么,我总是得到未找到Mocha

以下是我的 .yml 文件。构建部分正在运行。 问题出在测试部分和版本映像的docker标记部分。我从官方gitlab文档the official gitlab documentation

获得了yml文件
@Component({
  selector: 'my-app',
  template: `
    <div>
      <div *ngFor="let row of data; let index = $index">
        <div>{{row}}</div>
        <div (click)="removeRow(index)">X</div>
      </div>
    </div>
  `,
})
export class App {
  data:string[];
  constructor() {
    this.data = ['a', 'b','c']
  }

  removeRow(index) {
    this.data.splice(index, 1);
  }
}

我也试过

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

所有相同的结果:

  

sh:mocha:未找到

package.json 中的测试脚本是

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

我尝试将mocha和chai放在devDependencies和依赖项中。

 "test": "mocha ./Test",

标记部分

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

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

如果我遗漏标签部分,则发布图像有效。 但我真的想用git标签标记我的图像,而不是使用最终版本或主人标记。

  

$ docker tag $ CONTAINER_TEST_IMAGE   $ CONTAINER_RELEASE_IMAGE:$ CI_COMMIT_TAG解析引用时出错:   “registry.gitlab.com/edelacruz/cloudtrader-microservices:”不是   有效的存储库/标记:无效的引用格式错误:作业失败:退出   代码1

enter image description here

2 个答案:

答案 0 :(得分: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要求mocha已安装在泊坞窗图片中。

第三次尝试:

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"

答案 1 :(得分: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'

我添加了全局安装的mocha。您在后面的方法中尝试的内容不起作用,因为每个docker run都是基于图像而不是前一个容器的新容器。