如何在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"
你的跑步者已经在你的码头工人容器中执行script
。你的工作在这里做的是:
这基本上是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实现你的目标。