mirror of
https://github.com/moby/buildkit.git
synced 2026-08-04 14:50:21 +00:00
we use this script inside a rootless-pod (https://github.com/moby/buildkit/blob/master/examples/kubernetes/pod.rootless.yaml) to perform our builds and call it via a CI/CD tool, which returns a non-zero exit code, as the trap cannot kill the process, as it is already gone, in case everything went fine so we need to catch the error code from kill, which tries to kill a process that doesn't exist anymore and the suggestion is to just add || true, because we don't care about the exit code of kill ``` #17 DONE 4.2s sh: can't kill pid 65: No such process command terminated with exit code 1 ``` Signed-off-by: Steve Lohr <schdief.law@gmail.com>
61 lines
1.6 KiB
Bash
Executable File
61 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
# buildctl-daemonless.sh spawns ephemeral buildkitd for executing buildctl.
|
|
#
|
|
# Usage: buildctl-daemonless.sh build ...
|
|
#
|
|
# Flags for buildkitd can be specified as $BUILDKITD_FLAGS .
|
|
#
|
|
# The script is compatible with BusyBox shell.
|
|
set -eu
|
|
|
|
: ${BUILDCTL=buildctl}
|
|
: ${BUILDCTL_CONNECT_RETRIES_MAX=10}
|
|
: ${BUILDKITD=buildkitd}
|
|
: ${BUILDKITD_FLAGS=}
|
|
: ${ROOTLESSKIT=rootlesskit}
|
|
|
|
# $tmp holds the following files:
|
|
# * pid
|
|
# * addr
|
|
# * log
|
|
tmp=$(mktemp -d /tmp/buildctl-daemonless.XXXXXX)
|
|
trap "kill \$(cat $tmp/pid) || true; wait \$(cat $tmp/pid) || true; rm -rf $tmp" EXIT
|
|
|
|
startBuildkitd() {
|
|
addr=
|
|
helper=
|
|
if [ $(id -u) = 0 ]; then
|
|
addr=unix:///run/buildkit/buildkitd.sock
|
|
else
|
|
addr=unix://$XDG_RUNTIME_DIR/buildkit/buildkitd.sock
|
|
helper=$ROOTLESSKIT
|
|
fi
|
|
$helper $BUILDKITD $BUILDKITD_FLAGS --addr=$addr >$tmp/log 2>&1 &
|
|
pid=$!
|
|
echo $pid >$tmp/pid
|
|
echo $addr >$tmp/addr
|
|
}
|
|
|
|
# buildkitd supports NOTIFY_SOCKET but as far as we know, there is no easy way
|
|
# to wait for NOTIFY_SOCKET activation using busybox-builtin commands...
|
|
waitForBuildkitd() {
|
|
addr=$(cat $tmp/addr)
|
|
try=0
|
|
max=$BUILDCTL_CONNECT_RETRIES_MAX
|
|
until $BUILDCTL --addr=$addr debug workers >/dev/null 2>&1; do
|
|
if [ $try -gt $max ]; then
|
|
echo >&2 "could not connect to $addr after $max trials"
|
|
echo >&2 "========== log =========="
|
|
cat >&2 $tmp/log
|
|
exit 1
|
|
fi
|
|
sleep $(awk "BEGIN{print (100 + $try * 20) * 0.001}")
|
|
try=$(expr $try + 1)
|
|
done
|
|
}
|
|
|
|
startBuildkitd
|
|
waitForBuildkitd
|
|
$BUILDCTL --addr=$(cat $tmp/addr) "$@"
|
|
|