ci: Use an init process to reap defunct processes.

When Github Actions run in Docker, the default pid 1 entrypoint is
`tail -f /dev/null`.  PID 1 is responsible for propagating signals to
its children, and calling `waitpid()` on defunct processes; `tail`
does not do these things.  This results in zombie processes piling up
inside the container, which is not an issue in most contexts.

However, it affects `start-stop-daemon`, which hangs when stopping
daemon processes, as they are never reaped.  This appears in CI as
`/etc/init.d/supervisor restart` never being able to succeed.

Run the docker container with `--init`, which spawns a
`/sbin/docker-init` PID 1 to handle the job of an init process.
This commit is contained in:
Alex Vandiver 2021-07-22 19:35:27 +00:00 committed by Tim Abbott
parent d78723b6e8
commit 2daad58afa
1 changed files with 6 additions and 2 deletions

View File

@ -142,7 +142,9 @@ jobs:
install-command: /tmp/production-install
name: ${{ matrix.name }}
container: ${{ matrix.docker_image }}
container:
image: ${{ matrix.docker_image }}
options: --init
runs-on: ubuntu-latest
needs: production_build
@ -228,7 +230,9 @@ jobs:
os: buster
name: ${{ matrix.name }}
container: ${{ matrix.docker_image }}
container:
image: ${{ matrix.docker_image }}
options: --init
runs-on: ubuntu-latest
needs: production_build