我正在尝试使用Concourse管道提取git存储库,然后从git存储库中的dockerfile中构建/推送Docker映像。 dockerfile中具有COPY命令,可将文件从存储库复制到映像中。通常,我会挂载一个卷以能够在构建时复制这些文件,但是找不到在Concourse中进行复制的方法。这是我正在尝试的内容:
# pipeline.yml
resources:
- name: git-repo
type: git
source:
uri: <the-git-url>
branch: master
private_key: ((source-git-ssh-key))
- name: my-image
type: docker-image
source:
repository: gcr.io/path_to_image
username: _json_key
password: ((gcp-credential))
jobs:
...
- get: git-repo
trigger: true
- put: my-image
params:
build: git-repo/compose
# dockerfile located at git-repo/compose/Dockerfile
FROM ...
...
# git-repo/scripts/run-script.sh
COPY scripts/run-script.sh /
...
[如何使git-repo / scripts / run-script.sh文件可在构建时复制到我的映像中?谢谢。
我不熟悉Concourse,但是作为Docker的规则,您只能将包含在构建上下文中的内容COPY
放入映像中(即,它们位于构建目录或构建目录的子目录中) )。从您的配置文件...
- put: my-image
params:
build: git-repo/compose
看起来您的构建上下文为git-repo/compose
。由于您要包含的脚本位于该目录(git-repo/scripts/run-script.sh
)的outside中,因此在构建过程中将不可用。
解决方案是重新组织您的git-repo
。例如,您可以:
scripts/
目录移到compose/
目录中。Dockerfile
移出compose/
并进入主git-repo
目录。找到了一种方法。假定构建上下文是基本目录(例如,示例中的git-repo/compose
)。结果,我要复制的文件不在可用目录下。如果您的Dockerfile不在根目录中,则如果您仍想访问其余相同/更高级别的文件,则需要在dockerfile
参数中指定它。工作示例:
- put: my-image
params:
build: git-repo
dockerfile: git-repo/compose/Dockerfile