name: Build und Push Docker Image on: push: branches: [main, Dev, beta] tags: ["v*"] env: REGISTRY: 172.29.0.2:3000 DOCKER_HOST: tcp://172.17.0.1:2375 jobs: build-and-push: runs-on: ubuntu-latest steps: - name: Code auschecken uses: actions/checkout@v4 - name: Docker-Daemon Diagnose run: | echo "--- Umgebungsvariablen (DOCKER_*) ---" env | grep -i docker || echo "keine DOCKER_* Variable gesetzt" echo "--- docker info ---" docker info - name: Bei der Registry anmelden run: echo "${{ secrets.REGISTRY_TOKEN }}" | docker login ${{ env.REGISTRY }} -u ${{ github.actor }} --password-stdin # Die Versionsnummer kommt aus der Datei VERSION im Repo-Root (z.B. # "1.4.0") - vor einem Release dort einfach den Wert erhoehen. # # Tags je nach Push: # - Branch main -> :latest und :v # - Branch Dev -> :dev und :v-dev # - Branch beta -> :beta und :v-beta # - Git-Tag "v1.4.0" -> genau :v1.4.0 (expliziter Versions-Release) # - immer zusaetzlich -> : (exakte Nachverfolgung) - name: Image-Namen und Tags bestimmen id: vars run: | IMAGE=${{ env.REGISTRY }}/${{ github.repository }} VERSION=$(tr -d '[:space:]' < VERSION) if [ "${{ github.ref_type }}" = "tag" ]; then TAGS="${{ github.ref_name }}" elif [ "${{ github.ref_name }}" = "main" ]; then TAGS="latest v${VERSION}" else BRANCH=$(echo "${{ github.ref_name }}" | tr '[:upper:]' '[:lower:]') TAGS="${BRANCH} v${VERSION}-${BRANCH}" fi echo "image=$IMAGE" >> "$GITHUB_OUTPUT" echo "tags=$TAGS" >> "$GITHUB_OUTPUT" echo "Ermittelte Tags: $TAGS" - name: Image bauen run: | BUILD_ARGS="" for TAG in ${{ steps.vars.outputs.tags }}; do BUILD_ARGS="$BUILD_ARGS -t ${{ steps.vars.outputs.image }}:${TAG}" done docker build $BUILD_ARGS -t ${{ steps.vars.outputs.image }}:${{ github.sha }} . - name: Image pushen run: | for TAG in ${{ steps.vars.outputs.tags }}; do docker push ${{ steps.vars.outputs.image }}:${TAG} done docker push ${{ steps.vars.outputs.image }}:${{ github.sha }}