【发布时间】:2020-09-14 18:20:28
【问题描述】:
tl;dr
与具有 docker 支持和已完成容器以及来自存储库的源代码的 gitlab 运行器一起工作的预期方式和理念是什么?如何将源代码存储库挂载到容器中?
我们目前正在将我们的 gitlab 运行器(本机)转换为具有 docker 支持的 gitlab 运行器。它们的工作原理不同,我仍然无法理解如何将它们用于我们的目的。 尽管问题有点宽泛,但我尝试将其限制在更具体的用例中。
假设我们想在一个编程项目(例如 Java 或 C++)中进行代码分析,这应该在推送到开发分支后定期进行。
第 1 阶段:构建容器 为此,我创建了一个 docker 文件并在那里组装所有必需的应用程序和库。我将这个容器推送到我们的注册表中,以便可以一次又一次地使用它。只有当我修改了 dockerfile 时,才应该重新构建它。
第 2 阶段:验证源代码 这一步要拉取Docker容器并分析源码。我的问题来了:容器如何从存储库中获取源代码?
我已经尝试通过-v 使用 docker 调用包含源代码文件夹,但它似乎不起作用。我收到-v 不是可执行程序的错误消息。所以我猜这种可能性不是故意的。
另一种可能性是在构建容器时集成源代码,但我认为这没有用。另一种可能性是通过config.toml 包含一条路径,类似于-v,但即使这样对我来说似乎也不是正确的解决方案。我只能通过ssh 访问配置文件。
另一种解决方案是通过 git 检查正在运行的容器中的源代码......也不漂亮。
长话短说:使用已完成的容器和来自存储库的源代码的预期方式和理念是什么?
我们将 gitlab 运行器与 shell 执行器一起使用。
variables:
DOCKER_DRIVER: overlay2
DOCKER_BUILDKIT: 1
CI_REGISTRY: ***
CI_REGISTRY_IMAGE: ***/test
CI_REGISTRY_USER: ***
CI_REGISTRY_PASSWORD: ***
stages:
- build
- test
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
build_container:
stage: build
only:
changes:
- Dockerfile
tags:
- docker
before_script:
- docker pull $CI_REGISTRY_IMAGE:latest
script:
- docker build --cache-from $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE .
after_script:
- docker push $CI_REGISTRY_IMAGE:latest
validate:
stage: test
script:
- docker run $CI_REGISTRY_IMAGE /script/to/validate/code
【问题讨论】:
标签: docker gitlab gitlab-ci gitlab-ci-runner