gpt4 book ai didi

docker - Github 操作 : How to run containerized tests in a docker image built by build-push-action without doubling execution time

转载 作者:行者123 更新时间:2023-12-04 13:51:06 29 4
gpt4 key购买 nike

我正在使用 build-push-action在 Github Actions(使用 buildx)中构建 Docker 镜像并将其推送到 AWS ECR 注册表。在我推送镜像之前(不幸的是,它有几个 GB),我想使用该镜像来运行容器化的 Python 测试。build-push-actiondocs在这个确切的目标上 - 他们的示例建议构建镜像,将其加载到 Docker,使用 docker run ...然后推。然而,虽然构建镜像需要 7 分钟(从下载的缓存中),但将其加载到 Docker 还需要 7 分钟 - 所以它使 CI 管道的时间加倍。来自文档的示例:


- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Build and export to Docker
uses: docker/build-push-action@v2
with:
context: .
load: true
tags: ${{ env.TEST_TAG }}
- name: Test
run: |
docker run --rm ${{ env.TEST_TAG }}
- name: Build and push
uses: docker/build-push-action@v2
with:
context: .
platforms: linux/amd64,linux/arm64
push: true
tags: user/app:latest
您知道 任何加快/缩短加载时间的方法 或如何运行 docker run以其他方式在图像上?似乎问题是,对于加载,图像首先导出到 tarball,然后加载到 docker,它没有被任何类型的缓存加速。 (将图像推送到 ECR 并将其拉回 docker 几乎更快。)但是,没有加载,我无法获取图像。
在 Dockerfile 中运行测试是一种有效的快速解决方法。但是接下来我们遇到了同样的问题——如何在没有脏黑客的情况下获得输出文件(例如覆盖率统计数据)。
谢谢。
为了完整起见,添加我要放置测试的真实示例:

- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

- name: Build Image and Push to ECR
uses: docker/build-push-action@v2
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
with:
context: .
push: true
build-args: |
build_id=${{ github.sha }}
tags: |
${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:latest
cache-from: type=registry,ref=${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:latest
cache-to: type=inline

最佳答案

我的问题部分基于对 BuildX 及其在示例工作流程中的作用的错误假设。 (我认为您必须使用 BuildX 才能在操作中使用 BuildKit,而我们的 Dockerfile 使用了一些 BuildKit 功能)
我在 Docker BuildX image not showing in docker image ls 中找到了部分问题的答案和一个 blog post Multi-arch build and images, the simple way .
通过使用 setup-buildx-action步骤,BuildKit 构建不会直接加载到 docker 的多平台镜像(因为您需要加载单平台镜像)。我们目前不需要多平台构建,我们更喜欢 CI 的速度。所以删除 setup-buildx-action从工作流造成的,单平台图像出现在docker images它可以立即用于运行测试(没有明显的将单平台图像加载到 docker 的时间开销)。
IE。注释掉这一步有助于:

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
一旦我们的管道变得更加复杂和冗长,我们可能会再次开始构建多平台镜像,但就目前而言,在运行中节省 6 分钟更有意义。
注意:请随意添加您的答案/评论。我相信有比删除 buildx 设置更好的解决方案,而且我想知道是否有一个智能解决方案来构建多平台解决方案并将图像加载到 docker images快速地。

关于docker - Github 操作 : How to run containerized tests in a docker image built by build-push-action without doubling execution time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69396004/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com