配置您的GitHub Actions构建器
此页面包含在使用我们的Setup Buildx Action时的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的特定版本,请在driver-opts
输入中使用image
选项。例如,要固定到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容器日志,您必须启用步骤调试日志记录,或在Docker Setup Buildx操作中设置--debug
buildkitd标志。
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-flags: --debug
- name: Build
uses: docker/build-push-action@v6
日志将在作业结束时提供。


BuildKit守护程序配置
如果您使用的是带有config
或buildkitd-config-inline
输入的docker-container
驱动程序(默认),则可以向构建器提供BuildKit配置。
注册表镜像
您可以使用工作流程中直接的内联块使用buildkitd-config-inline
输入配置注册表镜像。
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
buildkitd-config-inline: |
[registry."docker.io"]
mirrors = ["mirror.gcr.io"]
有关使用注册表镜像的更多信息,请参阅注册表镜像。
最大并行度
您可以限制BuildKit求解器的并行性,这对于低功耗机器特别有用。
您可以像前面的示例一样使用buildkitd-config-inline
输入,或者如果您愿意,可以使用存储库中的专用BuildKit配置文件和config
输入。
# .github/buildkitd.toml
[worker.oci]
max-parallelism = 4
name: ci
on:
push:
jobs:
buildx:
runs-on: ubuntu-latest
steps:
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
config: .github/buildkitd.toml
将附加节点添加到构建器
Buildx支持在多台机器上运行构建。这对于在本地节点上构建多平台镜像非常有用,对于QEMU无法处理的更复杂的情况,更是如此。在本地节点上构建通常具有更好的性能,并且允许您将构建分布到多台机器上。
您可以使用append
选项将节点附加到您正在创建的构建器。它采用YAML字符串文档的形式输入,以消除与GitHub Actions内在相关的限制:您只能在输入字段中使用字符串。
名称 | 类型 | 描述 |
---|---|---|
名称 | 字符串 | 节点名称。如果为空,则为其所属构建器的名称,后缀为索引号。如果您想在工作流程的基础步骤中修改/删除节点,这很有用。 |
端点 | 字符串 | 要添加到构建器的节点的Docker上下文或端点 |
driver-opts | 列表 | 附加特定于驱动程序的选项列表 |
buildkitd-flags | 字符串 | Buildkitd守护程序的标志 |
平台 | 字符串 | 已修复节点的平台。如果非空,则这些值优先于检测到的值。 |
以下是一个使用远程节点的示例,其中使用了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@2d028b70b5e397cf8314c6eaea229a6c3e34977a # v3.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插件调用。如果您想在自托管Runner中使用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:
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Set up builder1
uses: docker/setup-buildx-action@v3
id: builder1
- name: Set up builder2
uses: docker/setup-buildx-action@v3
id: builder2
- name: Build against builder1
uses: docker/build-push-action@v6
with:
builder: ${{ steps.builder1.outputs.name }}
target: mytarget1
- name: Build against builder2
uses: docker/build-push-action@v6
with:
builder: ${{ steps.builder2.outputs.name }}
target: mytarget2