Docker Hub 自动构建 - 如何访问克隆的存储库内容?

Docker Hub Automated Builds - How to access cloned repository content?

我已经在 github 存储库提交上设置了自动构建并且 docker 集线器开始在每个存储库更新时构建但是在 Dockerfile 中我无法访问我的存储库中的任何源文件。即使我添加 RUN ls -R / 来查看构建日志,我也可以验证我的源文件中的 none 已被提取到该机器中。那么如何从 Dockerfile 脚本访问我的存储库内容呢?

如果您正在使用 GitHub 操作,您需要有这条小线

steps:
  - uses: actions/checkout@v2

在您可以访问代码之前。请参阅这个最小示例:

on:
  push:

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Run tests
        run: |
          docker build .

第一步是在 docker 集线器中配置 构建规则

Build Context 是您希望在克隆存储库中访问的目录位置。如果您需要完整的源代码内容,可以留下 /.

Dockerfile location 指示来自 Build Context 的路径。如果它在源代码库的根目录中。它应该只是 Dockerfile,如果它在任何目录(例如 /app)中,它应该是 app/Dockerfile

例如,要在任何给定的构建阶段访问完整的存储库内容,您应该复制 克隆的内容到当前构建阶段

FROM ubuntu:20.04 AS base
WORKDIR /src
COPY . .
RUN ls

第 1 行 - 初始化构建阶段并命名 'base'

第 2 行 - 将当前构建阶段的工作目录设置为 /src,因此一切都将到达此位置

第 2 行 - 将所有文件和目录从已关闭的存储库根目录复制到当前构建阶段的工作目录。 构建上下文 在此处执行操作,因为您可以从该构建上下文访问回购内容,如果您将其保留为 /,您将在 /src 目录中复制完整的回购。

第 3 行 - 运行 ls 命令只是为了检查根存储库目录内容是否可用。

请记住,由于您已将源代码复制到 /src 目录中,因此只能从当前构建阶段访问它。如果您通过像这样添加另一个 FROM some-image as final 行来初始化另一个构建阶段,那么在这里您无法直接访问 /src 目录。为了从一个构建阶段访问文件到另一个构建阶段,您需要知道构建阶段的名称和访问内容的行将如下所示:

FROM some-image as final
WORKDIR /finalFiles
COPY --from=base /app/someFile .
RUN ls

这里我们从 soure repo 的根文件夹中复制了一些文件(如果 docker hub 中的构建上下文被指定为 /)到 /finalFiles 目录中。