ci: shim docker version and publish quality gate status

This commit is contained in:
bstein 2026-04-10 05:19:11 -03:00
parent 515a0ea516
commit 0afa6e1b6d

71
Jenkinsfile vendored
View File

@ -59,6 +59,8 @@ spec:
IMAGE_NAMESPACE = 'registry.bstein.dev/infra'
TAG_SUFFIX = '-arm64'
REGISTRY_URL = 'registry.bstein.dev'
SUITE_NAME = 'harbor-arm-build'
PUSHGATEWAY_URL = 'http://platform-quality-gateway.monitoring.svc.cluster.local:9091'
}
options {
disableConcurrentBuilds()
@ -80,6 +82,17 @@ spec:
cp /docker-config/config.json "${DOCKER_CONFIG}/config.json"
# Make the Docker CLI invoke podman (buildah backend).
ln -sf /usr/bin/podman /usr/local/bin/docker
# Harbor's build scripts parse `docker --version`; emulate Docker output so
# environment checks pass while still delegating real commands to podman.
cat > /usr/local/bin/docker <<'EOF'
#!/bin/sh
if [ "${1:-}" = "--version" ] || [ "${1:-}" = "version" ]; then
echo "Docker version 24.0.0, build podman-shim"
exit 0
fi
exec /usr/bin/podman "$@"
EOF
chmod +x /usr/local/bin/docker
mkdir -p "${XDG_RUNTIME_DIR}"
'''
}
@ -197,6 +210,64 @@ spec:
}
}
post {
success {
container('builder') {
sh '''
set -euo pipefail
suite="${SUITE_NAME}"
gateway="${PUSHGATEWAY_URL}"
fetch_counter() {
status="$1"
line="$(curl -fsS "${gateway}/metrics" 2>/dev/null | awk -v suite="${suite}" -v status="${status}" '
/^platform_quality_gate_runs_total\{/ {
if (index($0, "job=\\"platform-quality-ci\\"") && index($0, "suite=\\"" suite "\\"") && index($0, "status=\\"" status "\\"")) {
print $2
exit
}
}
' || true)"
[ -n "${line}" ] && printf '%s\n' "${line}" || printf '0\n'
}
ok_count="$(fetch_counter ok)"
failed_count="$(fetch_counter failed)"
ok_count=$((ok_count + 1))
cat <<METRICS | curl -fsS --data-binary @- "${gateway}/metrics/job/platform-quality-ci/suite/${suite}" >/dev/null
# TYPE platform_quality_gate_runs_total counter
platform_quality_gate_runs_total{suite="${suite}",status="ok"} ${ok_count}
platform_quality_gate_runs_total{suite="${suite}",status="failed"} ${failed_count}
METRICS
'''
}
}
failure {
container('builder') {
sh '''
set -euo pipefail
suite="${SUITE_NAME}"
gateway="${PUSHGATEWAY_URL}"
fetch_counter() {
status="$1"
line="$(curl -fsS "${gateway}/metrics" 2>/dev/null | awk -v suite="${suite}" -v status="${status}" '
/^platform_quality_gate_runs_total\{/ {
if (index($0, "job=\\"platform-quality-ci\\"") && index($0, "suite=\\"" suite "\\"") && index($0, "status=\\"" status "\\"")) {
print $2
exit
}
}
' || true)"
[ -n "${line}" ] && printf '%s\n' "${line}" || printf '0\n'
}
ok_count="$(fetch_counter ok)"
failed_count="$(fetch_counter failed)"
failed_count=$((failed_count + 1))
cat <<METRICS | curl -fsS --data-binary @- "${gateway}/metrics/job/platform-quality-ci/suite/${suite}" >/dev/null
# TYPE platform_quality_gate_runs_total counter
platform_quality_gate_runs_total{suite="${suite}",status="ok"} ${ok_count}
platform_quality_gate_runs_total{suite="${suite}",status="failed"} ${failed_count}
METRICS
'''
}
}
always {
echo "done"
}