我有一个非常基本的asp.net核心mvc应用程序。
我已经安装了一个gitlab-ci服务器,并且我已经将我的源文件和项目文件推送到一个存储库。
我已经创建了这个.gitlab-ci.yml文件:
image: microsoft/dotnet:latest
stages:
- build
- test
build:
stage: build
script:
- dotnet restore
- dotnet build
test:
stage: test
script:
- dotnet test Tests我已经在gitlab服务器上设置了一个docker runner。
当我使用git推送一些东西时,阶段构建和测试作业在gitlab-ci pileline中开始。
一切似乎都很正常。
我真的很想了解一切。
以下是我的问题:
首先,我可以在作业控制台中看到类似以下内容:
Pulling docker image microsoft/dotnet:latest ...
Using docker image sha256:xxxxxx for microsoft/dotnet:latest ...
Running on runner-xxxxxx-concurrent-0 via myserver...
....
Fetching changes...
....
HEAD is now at xxxxxx test
Checking out xxxxxx as mybranch...
...
$ dotnet test Testsrunner首先创建一个docker容器。最后,我们可以看到启动测试的dotnet命令。但在两者之间,我们可以看到作业正在从我的存储库获取源文件。这是逻辑,因为容器需要源文件。但是,正如您所看到的,我的.gitlab-ci.yml中没有说明要下载源文件的内容。这看起来像是魔法?但是我讨厌计算中的魔法!runner如何知道要下载哪些源文件,位于哪个目录?
第二个问题:在管道中创建了两个工作:一个用于构建,另一个用于测试。没有优化,第二个容器需要重新运行构建操作。有没有办法在单一的docker容器中做到这一点(为了优化)。
第三个,也是最后一个问题:作业已成功运行,但当我键入以下命令时,我可以看到两个容器条目:
docker ps -a我可以看到"Exited (0) 11小时前“。为什么不自动删除这些容器?如果我运行数百个测试,我的跑步者计算机将没有空间和内存!
谢谢
发布于 2018-06-20 16:52:01
问题1:
运行器如何知道要下载哪些源文件,位于哪个目录?
我认为查看gitlab文档将会回答这个问题:
问题2:
为什么不自动删除这些容器?如果我运行数百个测试,我的跑步者计算机将没有空间和内存!
很抱歉这么直接,但稍微搜索一下可能已经回答了你的问题:https://gitlab.com/gitlab-org/gitlab-runner/issues/2151
gitlab开发人员Nikola Kovacs的回答:
这和预期的一样工作。缓存容器必须在构建后保留,以便下一次构建可以使用缓存。在构建之后删除它会违背它的目的。
您可以使用以下命令自动执行清理:https://gitlab.com/gitlab-org/gitlab-runner-docker-cleanup
https://stackoverflow.com/questions/50942435
复制相似问题