如何在gitlab-ci.yml中将文件从存储库复制到用于作业的docker容器中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在gitlab-ci.yml中将文件从存储库复制到用于作业的docker容器中相关的知识,希望对你有一定的参考价值。
如何在gitlab-ci
作业中使用我的项目将文件添加到Docker中。假设我在.gitlab-ci.yml
工作不足。
build:master:
image: ubuntu:latest
script:
- cp sample.txt /sample.txt
stage: build
only:
- master
如何在ubuntu映像中复制sample.txt?我在想,因为它已经是一个正在运行的容器,所以我们不能直接执行复制命令但必须运行
docker cp sample.txt mycontainerID:/sample.txt
但是又如何获得mycontainerID?因为它将在gitlab运行器内运行,并且每次运行都会分配任何随机ID。我的假设是错的吗?请建议
该文件已在容器内。如果仔细阅读CI / CD构建日志,您将在拉动图像并启动它之后看到最顶层,您的存储库将被克隆到正在运行的容器中。
您可以在/ builds / organization / repository下找到它 (请注意,这些是变量,您必须根据实际组织和名称进行调整) 或者使用变量$ CI_PROJECT_DIR
实际上,这是启动作业时“你”所在的目录。
例如,来自存储库https://gitlab.com/bluebrown/gitlab-ci-playground的.gitlab-ci.yml
image: alpine
test:
script:
- echo "the project directory is - $CI_PROJECT_DIR"
- cat $CI_PROJECT_DIR/README.md ; echo
- echo "and where am I? - $PWD"
返回此管道输出:正如您所看到的,我可以在容器内打印出README.md的内容。
你的跑步者已经在你的码头工人容器中执行script
。你的工作在这里做的是:
- 使用Ubuntu映像启动一个容器并在那里挂载你的Git项目。
- 从Git项目根到容器的cp sample.txt
- 停止容器说“完成工作”
这基本上是image
的意思:使用此docker镜像启动一个容器,该容器将执行脚本部分中列出的命令。
我并不完全明白你想要实现的目标。如果它是一个构建作业,那么为什么不实际从Dockerfile中复制文件并配置你的作业以使用docker build
构建它?执行docker build -t your/image:latest -f build/Dockerfile .
的Runner shell执行程序会很好。然后在一些Docker注册表(例如Gitlab或Docker Hub)中推送此图像。
如果真的你的目标更复杂并且你只想将文件添加到正在运行的容器中,你可以使用相同的Runner(使用shell执行器,而不是docker,所以没有image
)并运行类似的东西
- docker run --name YOUR_CONTAINER_NAME -v $PWD:/mnt ubuntu:latest cp /mnt/sample.txt /sample.txt
- docker commit -m "Commit Message" -a "You" YOUR_CONTAINER_NAME your/image:latest
- docker push your/image:latest
- docker rm YOUR_CONTAINER_NAME
注意:我不是100%肯定第一个可以工作,但这是从容器创建图像的一般想法,而不依赖于实际的Dockerfile,如果你真的无法用Dockerfile实现你的目标。
以上是关于如何在gitlab-ci.yml中将文件从存储库复制到用于作业的docker容器中的主要内容,如果未能解决你的问题,请参考以下文章
如何将存储库中的文件复制到用于作业的 Docker 容器中,在 gitlab-ci.yml
如何从 .net 项目文件中获取 gitlab-ci.yml 文件中的项目版本?