如何使用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。我的假设是错误的吗?请建议
答案 0 :(得分:3)
该文件已经在容器内部。如果您仔细阅读CI / CD构建日志,则在拉动映像并启动它之后,您将在最上方看到,您的存储库将克隆到正在运行的容器中。
您可以在 / builds / organization / repository
下找到它
(请注意,这些是变量,您必须调整以适应实际的组织和名称)
或使用变量 $ CI_PROJECT_DIR
实际上是开始作业时所在的目录“您”。
例如,来自存储库https://gitlab.com/bluebrown/gitlab-ci-playground的.gitlab-ci.yml
<a href="/" *ngIf="!rowNode.node.children">{{rowData.name}}</a>
<span *ngIf="rowNode.node.children">{{rowData.name}}</span>
答案 1 :(得分:-1)
您的跑步者已经在您的Docker容器中执行script
。
您在这里所做的工作是:
这基本上就是image
的意思:使用此docker镜像启动一个容器,该容器将执行脚本部分中列出的命令。
我不确定您要达到的目标。如果是构建工作,那么为什么不真正从Dockerfile中复制文件并配置您的工作以使用docker build
进行构建呢?一个运行docker build -t your/image:latest -f build/Dockerfile .
的Runner shell执行程序就可以了。然后,将该映像推送到某些Docker注册表中(例如,Gitlab或Docker Hub)。
如果您的目标确实更复杂,并且您只想向正在运行的容器中添加文件,则可以使用相同的Runner(使用shell执行程序,而不是docker executor,因此不需要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实现您的目标。