TL ; DR
在 WebP Cloud Services ,我们所有的组件都是容器化部署的,代码托管和 CI/CD 都是在 GitHub 和 GitHub Actions 上面完成,这套比较 “现代” 的工作流让我们的工作量节省了很多时间和成本。
但是在之前的文章 Hetzner CAX 系列 ARM64 服务器性能简评以及 WebP Cloud Services 在其上的实践 中我们测试发现 Hetzner ARM64 的机器性价比非常不错之后我们便将基础设施全部迁移到了 Hetzner 上。
由于开始使用 ARM64 的机器,我们便需要支持 Multi-Arch 的 Docker 镜像,一开始我们继续沿用了 GitHub Actions 的 Job ,用 QEMU 直接构建镜像:
- name: Build and push tagged images
if: startsWith(github.ref, 'refs/tags/')
uses: docker/build-push-action@v3
with:
context: .
platforms: linux/amd64, linux/arm64
push: true
tags: |
ghcr.io/${{ github.event.repository.full_name }}:${{ steps.imageTag.outputs.tag }}
然后便发现这么做会导致我们镜像构建速度从之前的 2min 不到变为了 20+min
为了解决这个问题,我们尝试使用 GitHub Actions 官方 Runner 和我们在 Hetzner 上的 Self-hosted runner 分别原生构建对应架构的镜像并通过一个额外 Job 缝合两个镜像的方式制作 Multi-Arch 镜像,将时间缩短到了 2min 左右
为此,我们写了一篇博客记录了我们的完整的改造步骤和其中遇到的坑:「混合部署 GitHub Actions Runner:Multi Arch 镜像构建速度飙升 10 倍!」: https://blog.webp.se/github-actions-hybrid-runner-zh/
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.