traPtitech / NeoShowcase

PaaS (Platform as a Service) on Docker 🐳 or k8s ☸
MIT License
53 stars 4 forks source link

長いビルドがキャンセルされる #879

Closed motoki317 closed 7 months ago

motoki317 commented 8 months ago

5~7分程度でキャンセルされてしまう場合がある

https://ns.trap.jp/apps/4e1d93846a3f1f70add1e1/builds

#12 266.6    Compiling indoc v2.0.4
#12 267.9    Compiling cron v0.1.0 (/app/cron)
#12 268.5    Compiling bot-client v0.1.0 (/app/bot-client)
#12 271.0    Compiling handler v0.1.0 (/app/handler)
#12 309.6    Compiling entrypoint v0.1.0 (/app/entrypoint)
#12 CANCELED
[ns-builder] Build failed: failed to solve: Canceled: context canceled

などと出てstatus: FAILEDになる

motoki317 commented 8 months ago

初出? 2023/12/15, 2m52s https://ns.trap.jp/apps/4e1d93846a3f1f70add1e1/builds/625607853177ec0a8b53ab 2023/12/17, 5m22s https://ns.trap.jp/apps/4e1d93846a3f1f70add1e1/builds/84f345964e7e5d4b0a1aff (v1.0.3 https://github.com/traPtitech/NeoShowcase/releases/tag/v1.0.3)

Pugma commented 7 months ago

これもビルドキャンセルの例です (他にも何回か同じアプリ内で起きている) https://ns.trap.jp/apps/270df450de902552140627/builds/f253e7036794923aebe7ab

motoki317 commented 7 months ago

一応stacktrace (%+v でprint可能)

time="2024-04-02T19:52:41Z" level=error msg="Build failed for ec53ca78a89650a34730f6: Canceled: context canceled
github.com/moby/buildkit/util/stack.Enable
    /go/pkg/mod/github.com/moby/buildkit@v0.13.1/util/stack/stack.go:77
github.com/moby/buildkit/util/grpcerrors.FromGRPC
    /go/pkg/mod/github.com/moby/buildkit@v0.13.1/util/grpcerrors/grpcerrors.go:198
github.com/moby/buildkit/util/grpcerrors.UnaryClientInterceptor
    /go/pkg/mod/github.com/moby/buildkit@v0.13.1/util/grpcerrors/intercept.go:41
google.golang.org/grpc.(*ClientConn).Invoke
    /go/pkg/mod/google.golang.org/grpc@v1.62.1/call.go:35
github.com/moby/buildkit/api/services/control.(*controlClient).Solve
    /go/pkg/mod/github.com/moby/buildkit@v0.13.1/api/services/control/control.pb.go:2234
github.com/moby/buildkit/client.(*Client).solve.func2
    /go/pkg/mod/github.com/moby/buildkit@v0.13.1/client/solve.go:274
golang.org/x/sync/errgroup.(*Group).Go.func1
    /go/pkg/mod/golang.org/x/sync@v0.6.0/errgroup/errgroup.go:78
runtime.goexit
    /usr/local/go/src/runtime/asm_amd64.s:1695
failed to solve
github.com/moby/buildkit/client.(*Client).solve.func2
    /go/pkg/mod/github.com/moby/buildkit@v0.13.1/client/solve.go:290
golang.org/x/sync/errgroup.(*Group).Go.func1
    /go/pkg/mod/golang.org/x/sync@v0.6.0/errgroup/errgroup.go:78
runtime.goexit
    /usr/local/go/src/runtime/asm_amd64.s:1695"

https://github.com/moby/buildkit/blob/2ae42e0c0c793d7d66b7a23424af6fd6c2f9c8f3/util/grpcerrors/grpcerrors.go#L182 https://github.com/moby/buildkit/blob/2ae42e0c0c793d7d66b7a23424af6fd6c2f9c8f3/util/grpcerrors/grpcerrors.go#L219-L224 https://github.com/grpc/grpc-go/blob/9952aa83979822b5915c3fcb2bb0f60afe55aa7d/codes/code_string.go#L35-L36

gRPCの向こう側から来ていて、status codeは CANCELLED, Messageは context canceled だとわかる

buildkitdのサーバー側

https://github.com/moby/buildkit/blob/2ae42e0c0c793d7d66b7a23424af6fd6c2f9c8f3/control/control.go#L340

motoki317 commented 7 months ago

dockerを使って再現しなかったと思ったら、livenessProbeによって再起動されてしまっていたっぽい

          livenessProbe:
            exec:
              command:
                - buildctl
                - debug
                - workers
            initialDelaySeconds: 5
            periodSeconds: 30

デフォルトのtimeoutSecondsが1なので、ホストがCPU/メモリきつくなるとタイムアウトしちゃってコンテナが再起動してしまうっぽい

          livenessProbe:
            exec:
              command:
                - buildctl
                - debug
                - workers
            initialDelaySeconds: 5
            periodSeconds: 30
            timeoutSeconds: 10
            failureThreshold: 5

https://github.com/traPtitech/manifest/commit/96eda7bfc631303e738ef0d9760602a9c04b29e8 ちょっと伸ばして、あとresources.limitsも付けてなかったので付けた

これで改善するか様子を見る