从git repo进行Concourse构建docker-image复制

问题描述 投票:0回答:2

我正在尝试使用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文件可在构建时复制到我的映像中?谢谢。

docker dockerfile concourse concourse-git-resource concourse-pipeline
2个回答
0
投票

我不熟悉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目录。

0
投票

找到了一种方法。假定构建上下文是基本目录(例如,示例中的git-repo/compose)。结果,我要复制的文件不在可用目录下。如果您的Dockerfile不在根目录中,则如果您仍想访问其余相同/更高级别的文件,则需要在dockerfile参数中指定它。工作示例:

  - put: my-image
    params:
      build: git-repo
      dockerfile: git-repo/compose/Dockerfile
© www.soinside.com 2019 - 2024. All rights reserved.