我正在尝试创建一个正确的 .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
答案 0 :(得分:1)
在您第一次尝试时(使用行docker run $CONTAINER_TEST_IMAGE npm install && npm test
),gitlab运行器会将命令分为docker run $CONTAINER_TEST_IMAGE npm install
和npm 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
都是基于图像而不是前一个容器的新容器。