CI/CD für Go-Projekte mit GitHub Actions: Vollständiger Leitfaden

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 in CI/CD für Go-Projekte



Moderne Entwicklung mit Go (Golang) erfordert nicht nur qualitativ hochwertigen Code, sondern auch zuverlässige Automatisierung von Build-, Test- und Bereitstellungsprozessen. CI/CD (Continuous Integration / Continuous Deployment) ist ein Ansatz, der es ermöglicht, jede Codeänderung automatisch zu überprüfen, Tests auszuführen und die fertige Anwendung an die Benutzer auszuliefern. In diesem Artikel werden wir im Detail besprechen, wie man eine CI/CD-Pipeline für Go-Projekte mit GitHub Actions einrichtet.



GitHub Actions ist ein integriertes CI/CD-System, mit dem Sie Workflows direkt im GitHub-Repository erstellen können. Für Go-Entwickler ist dies besonders praktisch, da es keine Einrichtung externer Dienste erfordert und sich leicht in die bestehende Infrastruktur integrieren lässt.



Warum gerade GitHub Actions für Go?



  • Kostenlos für öffentliche Repositories — bis zu 2000 Build-Minuten pro Monat kostenlos
  • Integrierte Go-Unterstützung — offizielle Actions zur Einrichtung der Umgebung
  • Flexibilität — kann auf Ubuntu, Windows, macOS ausgeführt werden
  • Caching — Beschleunigung von Builds durch Caching von Go modules
  • Matrix-Testing — parallele Ausführung mit verschiedenen Go-Versionen


Erstellung einer grundlegenden CI/CD-Pipeline



Beginnen wir mit der Erstellung eines einfachen Workflows, der bei jedem Push in das Repository ausgeführt wird. Dazu muss im Stammverzeichnis Ihres Projekts die Datei .github/workflows/go.yml erstellt werden.



Beispiel für einen grundlegenden Workflow



name: Go CI/CD

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

jobs: build: runs-on: ubuntu-latest strategy: matrix: go-version: [ '1.21', '1.22' ]

steps: - uses: actions/checkout@v4

- name: Setup Go uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }}

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

- name: Install dependencies run: go mod download

- name: Build run: go build -v ./...

- name: Test run: go test -v -race -coverprofile=coverage.txt ./...

- name: Upload coverage uses: codecov/codecov-action@v3 with: file: ./coverage.txt flags: unittests


Dieser Workflow führt Folgendes aus:

  • Wird bei Push in main/develop oder bei Erstellung eines Pull Requests ausgelöst
  • Testet mit zwei Go-Versionen (1.21 und 1.22)
  • Cachet Module zur Beschleunigung nachfolgender Builds
  • Baut das Projekt und führt Tests mit den Flags -race (Race-Detector) und -cover (Codeabdeckung) aus
  • Lädt den Coverage-Bericht in Codecov hoch


Erweiterte Einstellungen: Linting und Sicherheit



Für ein professionelles Go-Projekt reicht es nicht aus, den Code nur zu bauen und zu testen. Fügen wir statische Analyse und Sicherheitsüberprüfungen hinzu.



Hinzufügen von Linting mit golangci-lint



- name: Lint  uses: golangci/golangci-lint-action@v3  with:    version: latest    args: --timeout=5m --out-format=colored-line-number    skip-pkg-cache: true


golangci-lint vereint Dutzende von Lintern (govet, staticcheck, errcheck und andere) und erstellt einen einheitlichen Bericht. Dies hilft, potenzielle Fehler, ungenutzten Code und Stilprobleme zu finden.



Sicherheitsprüfung mit govulncheck



- name: Check vulnerabilities  run: |    go install golang.org/x/vuln/cmd/govulncheck@latest    govulncheck ./...


Das Dienstprogramm govulncheck analysiert die Abhängigkeiten des Projekts auf bekannte Schwachstellen aus der Go Vulnerability Database. Dies ist kritisch

Blogs

Buchempfehlungen