-
Notifications
You must be signed in to change notification settings - Fork 209
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ubuntu22のdocker buildのCDが落ちてる #1525
Comments
なぜか直ったのでcloseします。 |
同じ原因かどうかは不明ですが、再発した感じなのでReopenします。 ざっくり調べてみた感じ、QEMU周りで問題が発生しているようです。 |
reopen感謝です!! ちょっとちゃんと把握できてないのでもし知ってたら知りたいのですが、これ問題が起きてるのってクロスコンパイル周りなんですかね? まあ待っても解決するかもですが、いずれまた同じ問題が出そうなのと、arm64でビルドした方が綺麗な気がするので・・・! |
私のfork先でもdocker buildが上手くいかない事象が起きたため共有させていただきます(完全に別問題だったらすみません)。 Lines 70 to 85 in b13c61b
|
@aoirint いつも頼ってしまってすみません!! 今回ビルドが落ちてる所って、最近増えたGithub Actions環境のarm64環境でビルドすれば実は問題なく動いたりしそうですかね・・・? ビルドするだけならそんなに難しくないと思うのですが、docker buildしたものを良い感じにプッシュできないといけないんですよね。 ![]() あとビルドキャッシュ周りとかが難しく、もしよかったらお力お借りできればなと・・・・・!!! |
以前のエラーと今のエラーが同じ原因だとすると、amd64 CPUの上でarm64 CPUをエミュレートしてarm64バイナリを動作させるためのQEMUの不具合のようなので、QEMUを使わないネイティブarm64環境でビルドすれば問題なさそうですね。
調べた感じできそうではあるんですが、地道に作る感じになりそうですね...。
いまはamd64イメージとarm64イメージを1つのjob(build-docker)でまとめてビルドしていますが、
CPUを切り替えるために別々のjob(build-docker改)でビルドしたあと、後続のjob(新設build-docker-manifest)で1つのタグにまとめてpushする作りにする必要がありそうです。 だいたいの実装の流れは考えたので、これで取り組んでみます。
docker/build-push-actionを2回実行するだけ(build-dockerでCPUごとに1回ずつ、build-docker-manifestで1回)で済んだら、それが一番いいかも?(docker/build-push-actionにいろいろメタデータを付ける機能があったりするので、細かいこと考えずにそれに乗っかれるから) |
おーなるほどです!! それぞれのアーキテクチャでビルドしたあと、一度pushしないといけない感じなんですね! imageのタグを自動で決定する方法?も興味深いです。(メタデータを付ける機能の事を意図してます。僕が何か勘違いしてるかも) |
imageのタグを自動で決定する方法とは意図が違っていて、あまり正確なことがわかっていないですが、Dockerの出所証明(Provenance Attestation)という機能で、ビルドに使ったDockerfileの内容や、ビルドに使ったプラットフォーム(ここではGitHub Actions)、バージョン管理システム上のバージョン(ここではGitHub上のリポジトリURLやコミットハッシュ)などを記録する仕組みがあるらしく、その記録方法を意図していました。
ビルドに使っているdocker/build-push-actionでは、なにかしらの出所証明がデフォルトで記録されるようなので、何も気にしなくてよさそうなんですが、手動でイメージをいじると消えてしまうかもしれないので、こっちのイメージには付いているけれどこっちには付いていない、というような状態にはなりそうです。 そのアンバランスがちょこっと気になるくらいで、自動で付いてこないならいったん消えていていいんじゃないかなと思っています。
|
Docker公式actionのdocker/metadata-actionを使って、いまの命名規則に沿ったルールを作ることができれば、 バージョン文字列がPEP440準拠、レジストリが - name: Generate Docker metadata for ghcr.io
id: meta-ghcr
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=ref,event=branch,suffix=-{{sha}}
type=ref,event=branch
type=pep440,pattern={{version}}
type=pep440,pattern={{major}}
type=pep440,pattern={{major}}.{{minor}}
type=raw,value=latest,enable={{is_default_branch}}
- name: Generate Docker build cache source metadata
id: meta-buildcache-source
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=raw,value=main-buildcache,enable=${{ startsWith(github.ref, 'refs/tags/v') }}
type=ref,event=branch,suffix=-buildcache
- name: Generate Docker build cache destination metadata
id: meta-buildcache-destination
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
tags: |
type=ref,event=branch,suffix=-buildcache
- name: Generate Docker build cache metadata vars
id: meta-buildcache-vars
shell: bash
env:
DOCKER_METADATA_BUILDCACHE_SOURCE_OUTPUT_JSON: ${{ steps.meta-buildcache-source.outputs.json }}
DOCKER_METADATA_BUILDCACHE_DESTINATION_OUTPUT_JSON: ${{ steps.meta-buildcache-destination.outputs.json }}
run: |
{
echo "cache-from<<EOF"
for tag in $(jq -r '.tags[]' <<< "$DOCKER_METADATA_BUILDCACHE_SOURCE_OUTPUT_JSON"); do
echo "type=registry,ref=${tag}"
done
echo "EOF"
} >> $GITHUB_OUTPUT
{
echo "cache-to<<EOF"
for tag in $(jq -r '.tags[]' <<< "$DOCKER_METADATA_BUILDCACHE_DESTINATION_OUTPUT_JSON"); do
echo "type=registry,ref=${tag},mode=max"
done
echo "EOF"
} >> $GITHUB_OUTPUT |
おーなるほどです!!
なるほどーーー!! 個人的にはpythonだったほうがメンテしやすいかもとか思いました!! 検討してくださってありがとうございます! |
不具合の内容
タイトルのとおりです。なぜかubuntu22のdocker buildが落ちています。
https://github.com/VOICEVOX/voicevox_engine/actions/runs/13191733524/job/36847704280
現象・ログ
毎回エラーが違います。
例えば5回目のログはこんな感じです。
logs_34058244472.zip
再現手順
forkして
build-docker
workflowを動かす期待動作
buildがうまくいく。
その他
原因も課題もいろいろよくわかっていません・・・。
Discordでの会話のコピーを貼ります。
The text was updated successfully, but these errors were encountered: