[英]Run aarch64 Docker image in GitHub x86 container workflow
我正在測試一個 GitHub 工作流,該工作流檢查代碼是否在 arm64 上編譯,使用 Linux/aarch64 Docker 容器進行構建。 我知道 GitHub 容器僅是 x86 ,但是我想知道是否可以在 docker 上的 docker55D3B7C9ECFCBCD08EBFCBCD08EBECCZE4 上執行多架構圖像。
在 GitHub 上執行 CI 作業並且容器初始化正常: https://github.com/facebookincubator/hsthrift/runs/4835956150?check_suite_focus=true#step:2:14
/usr/bin/docker pull ghcr.io/donsbot/hsthrift/ci-base:ghcup-arm64v8
ghcup-arm64v8: Pulling from donsbot/hsthrift/ci-base
...
Digest: sha256:4c09341793d78efb74ad751b55152637d00b6297049458923825368fffb5485d
Status: Downloaded newer image for ghcr.io/donsbot/hsthrift/ci-base:ghcup-arm64v8
ghcr.io/donsbot/hsthrift/ci-base:ghcup-arm64v8
/usr/bin/docker create .. --cpus 2 ... --entrypoint "tail" ghcr.io/donsbot/hsthrift/ci-base:ghcup-arm64v8 "-f" "/dev/null"
a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef
/usr/bin/docker start a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef
a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef
/usr/bin/docker ps --all --filter id=a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef --filter status=running --no-trunc --format "{{.ID}} {{.Status}}"
a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef Up Less than a second
/usr/bin/docker inspect --format "{{range .Config.Env}}{{println .}}{{end}}" a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef
CI=true
HOME=/github/home
GITHUB_ACTIONS=true
PATH=/root/.ghcup/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
TZ=Europe/London
LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/x86_64-linux-gnu:
所以一切看起來都很好,很開心。 但由於 VM 未運行,該作業在第一個 exec 步驟中失敗。
來自守護程序的錯誤響應:容器 a63c28c54f278781f85a4ca85e3b1f5c3dd7c0d6b125fbcfd0e1d2f57ad0b0ef 未運行
這可以在各種主機上本地成功運行。
這個缺失的部分是標准 GitHub 'container' docker 引擎中的多架構支持。
我們可以手動調用新的 docker 容器中的交叉編譯步驟,而不是使用“容器”方法。 這是由 run-on-arch-action 自動完成的,它負責將 qemu 和 docker 放入正確的 state。
docker 運行 --rm --privileged multiarch/qemu-user-static --reset -p 是
https://github.com/uraimo/run-on-arch-action
在非 x86 上構建的 yml 文件現在看起來像:
build-on-aarch64:
runs-on: ubuntu-latest
name: ci (arm64)
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build in arm64 container
uses: uraimo/run-on-arch-action@v2.1.1
with:
arch: aarch64
distro: ubuntu20.04
# Install deps into the container. With the token, the container will be cached
# The image is cached publically like a package
githubToken: ${{ github.token }}
install: |
.. install packages for the arm container (e.g. Dockerfile steps)
run: |
.. run build steps on the container
此操作實質上為我們構建了 Docker 映像,設置了 qemu,負責緩存它,並使用 GitHub 運行程序主機的正確仿真運行它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.