Hinweis: GitHub-gehostete Runner werden auf GitHub Enterprise Server derzeit nicht unterstützt. Weitere Informationen zur geplanten zukünftigen Unterstützung findest Du in der GitHub public roadmap.
Einführung
In dieser Anleitung erfährst du, wie du ein Go-Paket erstellst, testest und veröffentlichst.
GitHub-gehostete Runner haben einen Toolcache mit vorinstallierter Software, die Abhängigkeiten für Go einschließt. Eine vollständige Liste der aktuellen Software und der vorinstallierten Versionen von Go findest du unter Verwenden von auf GitHub gehosteten Runnern.
Voraussetzungen
Du solltest bereits mit der YAML-Syntax vertraut sein und wissen, wie sie mit GitHub Actions verwendet wird. Weitere Informationen findest du unter Workflowsyntax für GitHub Actions.
Du solltest über grundlegende Kenntnisse in Bezug auf die Go-Programmiersprache verfügen. Weitere Informationen findest du unter Erste Schritte mit Go.
Verwenden eines Go-Starterworkflows
Für einen schnellen Einstieg füge einen Starterworkflow zum Verzeichnis .github/workflows
deines Repositorys hinzu.
GitHub enthält einen Go-Starterworkflow, der die für die meisten Go-Projekte funktionieren sollte. In den nachfolgenden Abschnitten dieser Anleitung finden Sie Beispiele dafür, wie dieser Starterworkflow angepasst werden kann.
-
Navigiere auf Ihre GitHub Enterprise Server-Instance zur Hauptseite des Repositorys.
-
Klicke unter dem Namen deines Repositorys auf Aktionen.
-
Wenn du bereits über einen Workflow im Repository verfügst, klicke auf Neuer Workflow.
-
Die Seite „Workflow auswählen“ zeigt eine Auswahl empfohlener Startworkflows. Suchen Sie nach „go“.
-
Filtern Sie die Auswahl von Workflows, indem Sie auf Continuous Integration klicken.
-
Klicken Sie im Workflow „Go - by GitHub Actions“ auf Konfigurieren.
Wenn Sie den Starterworkflow „Go - by GitHub Actions“ nicht finden, kopieren Sie den folgenden Workflowcode in eine neue Datei namens
go.yml
im.github/workflows
-Verzeichnis Ihres Repositorys.YAML name: Go on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: self-hosted steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v3 with: go-version: '1.20' - name: Build run: go build -v ./... - name: Test run: go test -v ./...
name: Go on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: self-hosted steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v3 with: go-version: '1.20' - name: Build run: go build -v ./... - name: Test run: go test -v ./...
-
Bearbeiten Sie den Workflow nach Bedarf. Ändern Sie zum Beispiel die Version von Go.
-
Klicke auf Änderungen committen.
Angeben einer Go-Version
Der einfachste Weg, eine Go-Version anzugeben, bietet die Aktion setup-go
von GitHub. Weitere Informationen findest du unter der setup-go
-Aktion.
Um eine vorinstallierte Version von Go auf einen von GitHub gehosteten Runner zu verwenden, musst du die relevante Version an die go-version
-Eigenschaft der setup-go
-Aktion übergeben. Mit dieser Aktion wird im Toolcache der jeweiligen Runner nach einer bestimmten Version von Go gesucht, und die erforderlichen Binärdateien werden zu PATH
hinzugefügt. Diese Änderungen bleiben für den Rest des Auftrags beibehalten.
Die Aktion setup-go
wird als Methode zur Verwendung von Go mit GitHub Actions empfohlen, da damit ein konsistentes Verhalten bei verschiedenen Runnern und verschiedenen Version von Go gewährleistet werden kann. Wenn du einen selbstgehosteten Runner verwendest, musst du .NET installieren und zu PATH
hinzufügen.
Verwenden mehrerer Versionen von Go
name: Go on: [push] jobs: build: runs-on: ubuntu-latest strategy: matrix: go-version: [ '1.19', '1.20', '1.21.x' ] steps: - uses: actions/checkout@v4 - name: Setup Go ${{ matrix.go-version }} uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} # You can test your matrix by printing the current Go version - name: Display Go version run: go version
name: Go
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ '1.19', '1.20', '1.21.x' ]
steps:
- uses: actions/checkout@v4
- name: Setup Go ${{ matrix.go-version }}
uses: actions/setup-go@v3
with:
go-version: ${{ matrix.go-version }}
# You can test your matrix by printing the current Go version
- name: Display Go version
run: go version
Verwenden einer bestimmten Version von Go
Du kannst einen Auftrag so konfigurieren, dass eine bestimmte Version von Go verwendet wird, z. B. 1.20.8
. Alternativ kannst du auch Syntax für semantische Versionierung verwenden, um die neuste Nebenversion abzurufen. In diesem Beispiel wird das neueste Patchrelease von Go 1.21 verwendet:
- name: Setup Go 1.21.x uses: actions/setup-go@v3 with: # Semantic version range syntax or exact version of Go go-version: '1.21.x'
- name: Setup Go 1.21.x
uses: actions/setup-go@v3
with:
# Semantic version range syntax or exact version of Go
go-version: '1.21.x'
Installieren von Abhängigkeiten
Du kannst go get
zum Installieren von Abhängigkeiten verwenden:
steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v3 with: go-version: '1.21.x' - name: Install dependencies run: | go get . go get example.com/octo-examplemodule go get example.com/octo-examplemodule@v1.3.4
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '1.21.x'
- name: Install dependencies
run: |
go get .
go get example.com/octo-examplemodule
go get example.com/octo-examplemodule@v1.3.4
Abhängigkeiten „cachen“ (zwischenspeichern)
Du kannst Abhängigkeiten mithilfe der Aktion setup-go
zwischenspeichern und wiederherstellen. Standardmäßig ist das Zwischenspeichern deaktiviert, kann aber durch Festlegen des cache
-Parameters auf true
aktiviert werden.
Wenn die Zwischenspeicherung aktiviert ist, sucht die setup-go
-Aktion nach der Abhängigkeitsdatei go.sum
im Repositorystamm und verwendet den Hash der Abhängigkeitsdatei als Teil des Cacheschlüssels.
- name: Setup Go uses: actions/setup-go@v3 with: go-version: '1.21.x' cache: true
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '1.21.x'
cache: true
Alternativ kannst du den cache-dependency-path
-Parameter in Fällen verwenden, in denen mehrere Abhängigkeitsdateien verwendet werden, oder wenn sie sich in verschiedenen Unterverzeichnissen befinden.
- uses: actions/setup-go@v3 with: go-version: '1.17' cache: true cache-dependency-path: subdir/go.sum
- uses: actions/setup-go@v3
with:
go-version: '1.17'
cache: true
cache-dependency-path: subdir/go.sum
Wenn du eine benutzerdefinierte Anforderung verwendest oder genauere Steuerungsmöglichkeiten zum Zwischenspeichern benötigst, kannst du die Aktion cache
verwendest. Weitere Informationen findest du unter Abhängigkeiten zwischenspeichern um Workflows zu beschleunigen.
Deinen Code bauen und testen
Du kannst die gleichen Befehle verwenden, die du auch lokal verwendest, um deinen Code zu bauen und zu testen. In diesem Beispielworkflow wird veranschaulicht, wie die Befehle go build
und go test
in einem Auftrag verwendet werden:
name: Go on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v3 with: go-version: '1.21.x' - name: Install dependencies run: go get . - name: Build run: go build -v ./... - name: Test with the Go CLI run: go test
name: Go
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '1.21.x'
- name: Install dependencies
run: go get .
- name: Build
run: go build -v ./...
- name: Test with the Go CLI
run: go test
Workflow-Daten als Artefakte paketieren
Nach Abschluss eines Workflows kannst du die resultierenden Artefakte für die Analyse hochladen. Zum Beispiel kann es notwendig sein, Logdateien, Core Dumps, Testergebnisse oder Screenshots zu speichern. Im folgenden Beispiel wird gezeigt, wie die Aktion upload-artifact
zum Hochladen von Testergebnissen verwendet werden kann.
Weitere Informationen findest du unter Speichern von Workflowdaten als Artefakte.
name: Upload Go test results on: [push] jobs: build: runs-on: ubuntu-latest strategy: matrix: go-version: [ '1.19', '1.20', '1.21.x' ] steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v3 with: go-version: ${{ matrix.go-version }} - name: Install dependencies run: go get . - name: Test with Go run: go test -json > TestResults-${{ matrix.go-version }}.json - name: Upload Go test results uses: actions/upload-artifact@v3 with: name: Go-results-${{ matrix.go-version }} path: TestResults-${{ matrix.go-version }}.json
name: Upload Go test results
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
go-version: [ '1.19', '1.20', '1.21.x' ]
steps:
- uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: ${{ matrix.go-version }}
- name: Install dependencies
run: go get .
- name: Test with Go
run: go test -json > TestResults-${{ matrix.go-version }}.json
- name: Upload Go test results
uses: actions/upload-artifact@v3
with:
name: Go-results-${{ matrix.go-version }}
path: TestResults-${{ matrix.go-version }}.json