配置 GitHub Actions 构建器
此页面包含有关在使用我们的设置 Buildx 操作时配置 BuildKit 实例的说明 。
版本固定
默认情况下,该操作将尝试使用 GitHub Runner(构建客户端)上可用的最新版本的 Buildx 和最新版本的 BuildKit(构建服务器)。
要固定到特定版本的 Buildx,请使用version
输入。例如,要固定到 Buildx v0.10.0:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
version: v0.10.0
要固定到特定版本的 BuildKit,请使用输入image
中的选项
driver-opts
。例如,要固定到 BuildKit v0.11.0:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: image=moby/buildkit:v0.11.0
BuildKit 容器日志
要在使用docker-container
驱动程序时显示 BuildKit 容器日志,您必须
启用步骤调试日志记录,或--debug
在
Docker 设置 Buildx操作中设置 buildkitd 标志:
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-flags: --debug
- name: Build
uses: docker/build-push-action@v5
with:
context: .
日志将在作业结束时可用:


BuildKit 守护进程配置
如果您使用带有或输入的驱动程序(默认),您可以
向构建器
提供BuildKit 配置:docker-container
config
config-inline
注册表镜像
您可以直接在工作流程中使用内联块并输入以下内容来配置注册表镜像config-inline
:
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
config-inline: |
[registry."docker.io"]
mirrors = ["mirror.gcr.io"]
有关使用注册表镜像的更多信息,请参阅 注册表镜像。
最大并行度
您可以限制 BuildKit 求解器的并行性,这对于低功率机器特别有用。
您可以config-inline
像前面的示例一样使用输入,或者如果您需要输入,也可以使用存储库中的专用 BuildKit 配置文件
config
:
# .github/buildkitd.toml
[worker.oci]
max-parallelism = 4
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
config: .github/buildkitd.toml
将附加节点附加到构建器
Buildx 支持在多台机器上运行构建。对于 QEMU 无法处理的更复杂的情况,这对于在本机节点上构建多平台映像非常有用 。在本机节点上构建通常具有更好的性能,并且允许您将构建分布在多台计算机上。
您可以使用该选项将节点附加到您正在创建的构建器append
。它接受 YAML 字符串文档形式的输入,以消除与 GitHub Actions 本质上相关的限制:您只能在输入字段中使用字符串:
姓名 | 类型 | 描述 |
---|---|---|
name | 细绳 | 节点的名称。如果为空,则为所属构建器的名称,带有索引号后缀。如果您想要修改/删除工作流程的基础步骤中的节点,则设置它非常有用。 |
endpoint | 细绳 | 要添加到构建器的节点的Docker 上下文或端点 |
driver-opts | 列表 | 其他特定于驱动程序的选项列表 |
buildkitd-flags | 细绳 | buildkitd守护进程的标志 |
platforms | 细绳 | 节点的固定 平台。如果不为空,则值优先于检测到的值。 |
remote
以下是使用带有驱动程序
和
TLS 身份验证的远程节点的示例
:
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: remote
endpoint: tcp://oneprovider:1234
append: |
- endpoint: tcp://graviton2:1234
platforms: linux/arm64
- endpoint: tcp://linuxone:1234
platforms: linux/s390x
env:
BUILDER_NODE_0_AUTH_TLS_CACERT: ${{ secrets.ONEPROVIDER_CA }}
BUILDER_NODE_0_AUTH_TLS_CERT: ${{ secrets.ONEPROVIDER_CERT }}
BUILDER_NODE_0_AUTH_TLS_KEY: ${{ secrets.ONEPROVIDER_KEY }}
BUILDER_NODE_1_AUTH_TLS_CACERT: ${{ secrets.GRAVITON2_CA }}
BUILDER_NODE_1_AUTH_TLS_CERT: ${{ secrets.GRAVITON2_CERT }}
BUILDER_NODE_1_AUTH_TLS_KEY: ${{ secrets.GRAVITON2_KEY }}
BUILDER_NODE_2_AUTH_TLS_CACERT: ${{ secrets.LINUXONE_CA }}
BUILDER_NODE_2_AUTH_TLS_CERT: ${{ secrets.LINUXONE_CERT }}
BUILDER_NODE_2_AUTH_TLS_KEY: ${{ secrets.LINUXONE_KEY }}
远程构建者的身份验证
以下示例演示如何使用 SSH 或 TLS 处理远程构建器的身份验证。
SSH认证
为了能够使用
docker-container
驱动程序连接到 SSH 端点,您必须在 GitHub Runner 上设置 SSH 私钥和配置:
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up SSH
uses: MrSquaare/ssh-setup-action@523473d91581ccbf89565e12b40faba93f2708bd # v1.1.0
with:
host: graviton2
private-key: ${{ secrets.SSH_PRIVATE_KEY }}
private-key-name: aws_graviton2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
endpoint: ssh://me@graviton2
TLS 认证
您还可以
使用远程驱动程序设置远程 BuildKit 实例。为了简化工作流程中的集成,您可以使用环境变量来使用 BuildKit 客户端证书设置身份验证tcp://
:
BUILDER_NODE_<idx>_AUTH_TLS_CACERT
BUILDER_NODE_<idx>_AUTH_TLS_CERT
BUILDER_NODE_<idx>_AUTH_TLS_KEY
占位符<idx>
是节点在节点列表中的位置。
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: remote
endpoint: tcp://graviton2:1234
env:
BUILDER_NODE_0_AUTH_TLS_CACERT: ${{ secrets.GRAVITON2_CA }}
BUILDER_NODE_0_AUTH_TLS_CERT: ${{ secrets.GRAVITON2_CERT }}
BUILDER_NODE_0_AUTH_TLS_KEY: ${{ secrets.GRAVITON2_KEY }}
独立模式
如果您没有在 GitHub Runner 上安装 Docker CLI,则会直接调用 Buildx 二进制文件,而不是将其作为 Docker CLI 插件调用。如果您想kubernetes
在自托管运行器中使用驱动程序,这可能会很有用:
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: kubernetes
- name: Build
run: |
buildx build .
孤立的建设者
以下示例展示了如何为不同的作业选择不同的构建器。
这可能有用的一个示例场景是当您使用 monorepo,并且您想要将不同的包精确定位到特定的构建器时。例如,某些包的构建可能特别耗费资源,并且需要更多的计算。或者他们需要配备特定功能或硬件的构建者。
有关远程构建器的更多信息,请参阅
remote
驱动程序
和
附加构建器节点示例。
name: ci
on:
push:
branches:
- "main"
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
id: builder1
- uses: docker/setup-buildx-action@v3
id: builder2
- name: Builder 1 name
run: echo ${{ steps.builder1.outputs.name }}
- name: Builder 2 name
run: echo ${{ steps.builder2.outputs.name }}
- name: Build against builder1
uses: docker/build-push-action@v5
with:
builder: ${{ steps.builder1.outputs.name }}
context: .
target: mytarget1
- name: Build against builder2
uses: docker/build-push-action@v5
with:
builder: ${{ steps.builder2.outputs.name }}
context: .
target: mytarget2