From 2bdf0b2e11a0ad6d05911eab399c0847f618b507 Mon Sep 17 00:00:00 2001 From: Robert Rapp Date: Mon, 31 Aug 2026 00:13:07 +0200 Subject: [PATCH] Workflow an den Runner anpassen: Docker-CLI nachruesten, kein buildx Der Runner ist mit ubuntu-latest:docker://node:20-bookworm registriert, Jobs laufen also in einem node-Image. Darin gibt es weder docker-CLI noch Daemon - jeder docker-Aufruf scheiterte an "command not found", unabhaengig davon ob als Action oder als Shell-Schritt. Der Job laedt jetzt die statische docker-CLI (ohne Daemon) nach und baut ueber den vom Runner durchgereichten Socket. buildx entfaellt: der Runner ist amd64, ein einfacher docker build genuegt und spart die Plugin-Installation. Ein vorgeschalteter Schritt protokolliert CLI, Socket und DOCKER_HOST, ohne selbst fehlzuschlagen - damit im Log steht, woran es liegt, falls der Socket nicht durchgereicht wird. Co-Authored-By: Claude Opus 5 --- .gitea/workflows/build.yml | 49 +++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index f573797..bc52725 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -22,34 +22,49 @@ jobs: submodules: recursive fetch-depth: 0 - # Bewusst reine Shell-Schritte statt docker/*-Actions: die muessten vom - # Runner erst von github.com geladen werden, was auf selbst gehosteten - # Gitea-Instanzen haeufig nicht klappt. Dieselben Befehle laufen bereits - # erfolgreich im Jenkinsfile von lichterei-web. - - name: Buildx vorbereiten + # Der Runner fuehrt Jobs in node:20-bookworm aus. Dort gibt es kein + # Docker. Dieser Schritt schlaegt nicht fehl, sondern protokolliert nur, + # was vorhanden ist - damit im Log sichtbar wird, woran es liegt, falls + # der Build danach scheitert. + - name: Umgebung protokollieren run: | - docker buildx inspect gitea-builder >/dev/null 2>&1 \ - && docker buildx use gitea-builder \ - || docker buildx create --name gitea-builder --use - docker buildx inspect --bootstrap + grep PRETTY_NAME /etc/os-release || true + printf 'docker-CLI: '; command -v docker || echo 'fehlt' + printf 'Docker-Socket: '; test -S /var/run/docker.sock && echo 'vorhanden' || echo 'fehlt' + printf 'DOCKER_HOST: %s\n' "${DOCKER_HOST:-nicht gesetzt}" + + # Nur die CLI (rund 30 MB), kein Daemon. Gebaut wird ueber den vom + # Runner durchgereichten Socket. + - name: Docker-CLI nachruesten + run: | + if ! command -v docker >/dev/null 2>&1; then + curl -fsSL https://download.docker.com/linux/static/stable/x86_64/docker-27.3.1.tgz \ + | tar xz -C /usr/local/bin --strip-components=1 docker/docker + fi + docker --version - name: An der Registry anmelden run: | echo "${{ secrets.REGISTRY_TOKEN }}" \ - | docker login ${{ env.REGISTRY }} \ + | docker login "${{ env.REGISTRY }}" \ --username "${{ secrets.REGISTRY_USER }}" \ --password-stdin - - name: Bauen und pushen + # Bewusst ohne buildx: der Runner ist amd64, ein einfacher docker build + # genuegt und spart die Plugin-Installation. + - name: Bauen run: | - docker buildx build \ - --platform linux/amd64 \ + docker build \ --file docker/Dockerfile \ - --tag ${{ env.IMAGE }}:latest \ - --tag ${{ env.IMAGE }}:${{ gitea.sha }} \ - --push \ + --tag "${{ env.IMAGE }}:latest" \ + --tag "${{ env.IMAGE }}:${{ gitea.sha }}" \ . + - name: Pushen + run: | + docker push "${{ env.IMAGE }}:latest" + docker push "${{ env.IMAGE }}:${{ gitea.sha }}" + - name: Abmelden if: always() - run: docker logout ${{ env.REGISTRY }} || true + run: docker logout "${{ env.REGISTRY }}" || true