CI/CD für Go-Projekte: Einrichtung von GitHub Actions

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung: Warum CI/CD für Go-Projekte wichtig ist



Moderne Entwicklung mit Go (Golang) erfordert nicht nur das Schreiben von sauberem und effizientem Code, sondern auch die Einrichtung von Prozessen, die das Testen, Bauen und Ausliefern von Anwendungen automatisieren. CI/CD (Continuous Integration / Continuous Delivery) ist eine Reihe von Praktiken, die es ermöglichen, Änderungen schnell und sicher in die Produktion zu bringen. Für Go-Entwickler ist GitHub Actions aufgrund der engen Integration mit Repositories und der einfachen Einrichtung zu einem der beliebtesten Tools geworden.



In diesem Artikel werden wir besprechen, wie man eine vollständige CI/CD-Pipeline für ein Go-Projekt mit GitHub Actions erstellt. Sie erfahren, wie Sie Tests, das Erstellen von Binärdateien und das Deployment auf einen Server automatisieren. Alle Beispiele sind in Go (Golang) mit praktischen Schritten.



1. Grundlagen von GitHub Actions für Go



GitHub Actions ist ein integriertes System zur Automatisierung von Arbeitsabläufen (workflows). Jeder workflow ist eine YAML-Datei, die die Schritte zum Bauen, Testen und Bereitstellen beschreibt. Für Go-Projekte umfasst eine minimale Pipeline:



  • Installation von Go
  • Caching von Abhängigkeiten
  • Ausführen von Tests
  • Bauen der Anwendung


Struktur der workflow-Datei



Erstellen Sie im Stammverzeichnis des Repositorys das Verzeichnis .github/workflows/ und die Datei ci.yml. Hier ist eine grundlegende Konfiguration für Go:



name: CI für Go Projekt

on: push: branches: [ main, develop ] pull_request: branches: [ main ]

jobs: build-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4

- name: Go installieren uses: actions/setup-go@v5 with: go-version: '1.22'

- name: Module cachen uses: actions/cache@v3 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go-

- name: Abhängigkeiten laden run: go mod download

- name: Code linten run: go vet ./...

- name: Tests ausführen run: go test -v -race -coverprofile=coverage.out ./...

- name: Binärdatei bauen run: go build -o myapp ./cmd/main.go


Dieser workflow wird bei einem Push in main oder develop sowie bei der Erstellung eines pull request ausgelöst. Er überprüft den Code auf Fehler, führt Tests mit dem race-Flag (Data Race Detector) aus und erstellt die Binärdatei.



2. Erweiterte Pipeline: Testen und Codequalität



Eine grundlegende Überprüfung ist gut, aber für ein ernsthaftes Go-Projekt wird mehr benötigt. Fügen wir statische Analyse und eine Überprüfung der Codeabdeckung hinzu.



Hinzufügen von golangci-lint



golangci-lint ist ein Aggregator für Linter, der go vet, errcheck, staticcheck und andere umfasst. Fügen wir es dem workflow hinzu:



      - name: golangci-lint installieren        uses: golangci/golangci-lint-action@v4        with:          version: latest

- name: Linter ausführen run: golangci-lint run ./...


Codeabdeckungsbericht



Die Testabdeckung ist eine wichtige Qualitätsmetrik. GitHub Actions kann Berichte erstellen und sogar PRs bei niedriger Abdeckung blockieren:



      - name: Abdeckungsbericht erstellen        run: go test -coverprofile=coverage.out -covermode=atomic ./...

- name: Minimale Abdeckung prüfen run: | go tool cover -func=coverage.out | grep total | awk '{print $3}' | sed 's/%//' > coverage.txt if [ $(cat coverage.txt) -lt 70 ]; then echo "Codeabdeckung ist kleiner als 70%" exit 1 fi


Jetzt wird der workflow fehlschlagen, wenn die Testabdeckung unter 70% fällt. Dies ist eine hervorragende Praxis, um die Qualität eines Go-Projekts aufrechtzuerhalten.



3. Docker-Image bauen und veröffentlichen



Go-Anwendungen werden oft als Docker-Container bereitgestellt. GitHub Actions ermöglicht das automatische

Blogs

Buchempfehlungen