如何解决从gitlab运行程序上的docker容器访问存储库的问题
tl; dr
与gitlab运行程序一起使用的预期方法是什么,这种方法具有docker支持,完成的容器以及来自存储库的源代码?如何将源代码存储库安装到容器中?
我们目前正在使用docker支持将gitlab运行程序(本机)转换为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
manual解决了这个问题。 -v
的执行错误归因于将参数放置在错误的位置。下面的示例显示了正确的用法。
说明:
-
--rm
-使Docker退出时自动删除容器 -
-v
-使Docker将存储库/项目$CI_PROJECT_DIR
挂载在容器的/mnt
代码段:
validate:
stage: test
tags:
- docker
script:
- docker run --rm -v $CI_PROJECT_DIR:/mnt $CI_REGISTRY_IMAGE /bin/ash -c "/some/command /mnt/sourcecode/"
,
我相信,混淆是源于将两个本来应该分开的东西融合在一起。
如果要重用Docker映像,应在其自己的项目中构建并发布该映像。有些构建需要一些时间,因此您可以使用已构建的映像来节省时间。
一旦准备好要下拉图像,就可以继续使用该图像。
您在gitlab-ci.yml文件中调用该图像,然后它可以访问正在运行管道的项目的存储库。
在gitlab-ci.yml中,您使用'image'标签来指定您要使用的docker映像。您可以为单个作业指定图像。
image: python
python job:
script: python hello-world.py
java job:
image: golang
script: go run hello-world.go
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。