我正在构建一个docker镜像,作为github actions中CD的一个步骤,我最近启用了多个架构构建,因为我使用的是M2 Mac,所以我也想构建arm。我注意到启用后,我的构建时间飙升。
是我做错了什么,还是这是意料之中的事?
步骤:
# Build and push Docker image with Buildx (don't push on PR)
# https://github.com/docker/build-push-action
- name: Build and push Docker image
id: build-and-push
uses: docker/[email protected]
with:
context: ./src
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64
cache-from: type=gha
cache-to: type=gha,mode=max
字符串
我也注意到我现在看到这些消息:
#19 7.855 warning Pattern ["string-width@^4.1.0"] is trying to unpack in the same destination "/usr/local/share/.cache/yarn/v6/npm-string-width-cjs-4.2.3-269c7117d27b05ad2e536830a8ec895ef9c6d010-integrity/node_modules/string-width-cjs" as pattern ["string-width-cjs@npm:string-width@^4.2.0"]. This could result in non-deterministic behavior, skipping.
型
1条答案
按热度按时间ukqbszuj1#
为多个架构构建Docker镜像确实会增加构建时间,尤其是在单台机器上构建时。这是因为Docker必须为每个架构构建单独的镜像,这可能非常耗时。
当你构建多个架构时,Docker使用QEMU来模拟目标架构。这个模拟过程可能比原生构建慢,特别是对于复杂的应用程序。
如果增加的构建时间是一个问题,您可以考虑以下几个选项:
为了利用GitHub Actions的并行性,您可以将构建拆分为单独的作业,并使用构建矩阵来指定不同的架构。以下是如何设置的示例:
字符串
这个GitHub操作工作流中的并行度由
strategy.matrix
键决定。解决github.repository_owner:
这就是如何运行shell脚本将用户名转换为一个MySQL env变量。
型
在GitHub Actions中,
GITHUB_ENV
是一个特殊的环境文件。当您以NAME=VALUE
向此文件写入字符串时。env上下文是GitHub Actions中可用的上下文,包含运行者可用的环境变量。当您写入GITHUB_ENV
文件时,您设置的环境变量将添加到此上下文。