Circle CI が利用する Dokcer イメージに不具合がある場合の対処方法

2021/08/22 10:26:59

まとめ

~/.circleci/build_agent_settings.json に

cat ~/.circleci/build_agent_settings.json | jq '.LatestSha256="sha256:ae95af3e72f4b1e9d09f333deb7d5a42c6f66db4b49358973f40b4e907f9c4eb"'

の結果を置いておくと良い。

Circleci local execute fails
https://discuss.circleci.com/t/circleci-local-execute-fails/40682
と同じ症状・解決策。

経緯

知り合いのエンジニアより、Circle CI にて

circleci-demo-go $ circleci build --job build
Docker image digest: sha256:70aa4e886830adb56618f6d03b96905ea5e467d58729ba136417c9f888c9652d
====>> Spin up environment
Build-agent version ()
System information:
Server Version: 20.10.7
Storage Driver: overlay2
Backing Filesystem: extfs
Cgroup Driver: cgroupfs
Cgroup Version: 1
Kernel Version: 5.10.25-linuxkit
Operating System: Docker Desktop
OSType: linux
Architecture: x86_64
Starting container circleci/golang:1.12
Warning: No authentication provided, using CircleCI credentials for pulls from Docker Hub.
image is cached as circleci/golang:1.12, but refreshing...
1.12: Pulling from circleci/golang
Digest: sha256:ae191834590b2cdee6ca9bb6985f02e05b3f9b326536f83494f788889481b408
Status: Image is up to date for circleci/golang:1.12
Error: error starting container circleci/golang:1.12: Error response from daemon: --storage-opt is supported only for overlay over xfs with 'pquota' mount option
Error:
Unexpected environment preparation error: Error response from daemon: --storage-opt is supported only for overlay over xfs with 'pquota' mount option
Step failed
Task failed

といったエラーが出たとの報告を受けた。

circleci-demo-go https://github.com/CircleCI-Public/circleci-demo-go を動かしてみるだけのものである。

Docker for mac を用いた Mac 上のトラブルだった。

Circle CI が中で呼び出しているコマンドが知りたかったが、バイナリ配布 & クローズソース なので、分からず。 いろいろやった末

circleci local execute

の直後に、

ps aux

を別のターミナルで連打するという手法をとった。

/usr/local/bin/com.docker.cli run --interactive --tty --rm --volume /var/run/docker.sock:/var/run/docker.sock --volume /tmp/293296163_circleci_config.yml:/tmp/local_build_config.yml --volume /Users/test_user/circleci/circleci-hands-on:/Users/test_user/circleci/circleci-hands-on --volume /Users/test_user/.circleci:/root/.circleci --workdir /Users/test_user/circleci/circleci-hands-on circleci/picard@sha256:70aa4e886830adb56618f6d03b96905ea5e467d58729ba136417c9f888c9652d circleci build --config /tmp/local_build_config.yml

が実行されていた。 この直後、Docker 内でエラーが出ている様子だったので、circleci/picard が壊れているのでは、と推測した。

https://hub.docker.com/r/circleci/picard/tags から適当に探し、sha256 のハッシュ値を

a10bb09c1e8fc11aa9ffa1d6c1f2cdfb6dff9a0a87cb5c9bdd1e9be7107ec100

に変更して

docker run --tty --volume /var/run/docker.sock:/var/run/docker.sock --volume /tmp/293296163_circleci_config.yml:/tmp/local_build_config.yml --volume /Users/test_user/circleci/circleci-hands-on:/Users/test_user/circleci/circleci-hands-on --volume /Users/test_user/.circleci:/root/.circleci circleci/picard@sha256:a10bb09c1e8fc11aa9ffa1d6c1f2cdfb6dff9a0a87cb5c9bdd1e9be7107ec100 circleci build --config /tmp/local_build_config.yml

のようにしたところ、動作した。

Circle CI に問い合わせてみたらどうかと促した。

2021-07-20 に依頼者より連絡があり、

circleci/picard の変更に伴う問題とのこと。

以下の方法で古い circleci/picard のイメージが利用できるらしい。

circleci cli では ~/.circleci/build_agent_settings.json のファイルで circleci/picard のイメージを指定しているため、その sha を以下のようにして古いものへ変更できるようだ。

tmp=$(mktemp) && cat ~/.circleci/build_agent_settings.json | jq '.LatestSha256="sha256:ae95af3e72f4b1e9d09f333deb7d5a42c6f66db4b49358973f40b4e907f9c4eb"' > $tmp && mv $tmp ~/.circleci/build_agent_settings.json

どなたかの参考になれば。

ciecle_ci

Posted by tako