【发布时间】:2021-11-22 12:27:08
【问题描述】:
我在 Github Actions(使用 buildx)中使用 build-push-action 构建 Docker 映像并将其推送到 AWS ECR 注册表。在推送映像之前(不幸的是,它有几个 GB),我想使用该映像来运行容器化 Python 测试。
build-push-action 有 docs 在这个确切的目标上 - 他们的示例建议构建映像,将其加载到 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
【问题讨论】:
标签: docker github-actions amazon-ecr