用docker优化gitlab-ci

时间:2018-06-20 07:19:00

标签: docker .net-core asp.net-core-mvc gitlab-ci gitlab-ci-runner

我有一个非常基本的asp.net核心mvc Web应用程序。

我已经安装了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服务器上设置了一个dockerRunner。

当我使用git推送内容时,构建和测试阶段将从gitlab-ci堆砌线开始。

一切似乎都正常。

我真的很想了解一切。

这是我的问题:

首先,我可以在工作控制台中看到以下内容:

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 Tests

跑步者首先创建一个docker容器。最后,我们可以看到启动测试的dotnet命令。 但是,在两者之间,我们可以看到工作是从存储库中获取源文件。这是逻辑,因为容器需要源文件。 但是,正如您所看到的,我的.gitlab-ci.yml中没有任何内容可下载源文件。这似乎是魔术吗?但是我讨厌计算中的魔术! 运行程序如何知道在哪个目录中下载哪些源文件?

第二个问题:在管道中创建了2个作业:一个用于构建,第二个用于测试。没有优化,第二个容器需要重新运行构建操作。有没有一种方法可以在单个Docker容器中执行此操作(以进行优化)。

第三个也是最后一个问题:作业已成功运行,但是当我键入以下命令时,我可以看到2个容器条目:

docker ps -a

我可以看到“ 11小时前已退出(0)”。为什么这些容器不会自动删除?如果我运行数百个测试,则我的跑步电脑将没有空间和内存!

谢谢

1 个答案:

答案 0 :(得分:0)

问题1:

  

跑步者如何知道要下载的源文件,在哪个目录中?

我认为研究gitlab文档将回答这个问题:

问题2:

  

为什么这些容器不会自动删除?如果我运行数百个测试,则我的跑步电脑将没有空间和内存!

很抱歉直截了当,但是很少使用Google搜索可以回答您的问题:https://gitlab.com/gitlab-org/gitlab-runner/issues/2151

gitlab开发人员Nikola Kovacs的答案:

  

这按预期工作。缓存容器必须在构建后保留,以便下一个构建可以使用缓存。   构建后将其删除会破坏其目的。

     

您可以使用它来自动进行清理:https://gitlab.com/gitlab-org/gitlab-runner-docker-cleanup