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
Diese Anleitung zeigt Dir, wie du einen Workflow für fortlaufende Integration (CI) erstellen kannst, der Node.js-Code baut und testet. Wenn deine CI-Tests erfolgreich durchlaufen, kannst du deinen Code deployen (bereitstellen) oder ein Paket veröffentlichen.
Voraussetzungen
Wir empfehlen, dass du ein grundlegendes Verständnis von Node.js, YAML, Workflowkonfigurations-Optionen und die Erstellung einer Workflow-Datei hast. Weitere Informationen findest du unter:
Verwendung von selbstgehosteten Runnern auf GitHub Enterprise Server
Wenn du Setup-Aktionen (wie z.B.actions/setup-LANGUAGE
) auf GitHub Enterprise Server mit selbstgehosteten Runnern verwendest, musst du möglicherweise den Tools-Cache auf Runnern einrichten, die keinen Internetzugang haben. Weitere Informationen finden Sie unter Einrichten des Toolcaches auf selbstgehosteten Runnern ohne Internetzugriff.
Verwenden des Node.js-Starterworkflows
GitHub bietet einen Node.js-Starterworkflow, der für die meisten Node.js-Projekte funktionieren wird. Dieser Leitfaden enthält npm- und Yarn-Beispiele, mit denen du den Starterworkflow anpassen kannst. Weitere Informationen findest du unter Node.js-Starterworkflow.
Die Standardstartworkflows sind ausgezeichnete Ausgangspunkte beim Erstellen von Build- und Testworkflows, und du kannst den Startworkflow den Anforderungen deines Projekts anpassen.
Für einen schnellen Einstieg füge den Starterworkflow zum Verzeichnis .github/workflows
deines Repositorys hinzu.
# Der Name des Workflows. GitHub zeigt die Namen deiner Workflows auf der Registerkarte „Aktionen“ deines Repositorys an. Wenn du `name` weglässt, zeigt GitHub den Workflowdateipfad relativ zum Stammverzeichnis des Repositorys an. name: Node.js CI # This example workflow assumes that the default branch for your repository is `main`. If the default branch has a different name, edit this example and add your repository's default branch. on: push: branches: [ main ] pull_request: branches: [ main ] # jobs: build: # <!-- This is a YAML comment for use in annotated code examples. --> # Du kannst diesen Workflow mit einem anderen Betriebssystem ausführen. # # Die Vorlage zum Starter-Workflow konfiguriert Aufträge zur Ausführung unter Linux und verwendet mit GitHub gehostete `ubuntu-latest`-Runner. Du kannst den `runs-on`-Schlüssel ändern, um deine Aufträge auf einem anderen Betriebssystem auszuführen. # # Beispielsweise kannst du die GitHub-gehosteten Windows-Runner verwenden`runs-on: windows-latest`. Oder du kannst die GitHub-gehosteten macOS-Runner verwenden`runs-on: macos-latest`. # # Du kannst Aufträge auch in Docker-Containern ausführen oder einen selbst gehosteten Läufer bereitstellen, der auf Deiner eigenen Infrastruktur läuft. Weitere Informationen findest du unter [AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on). runs-on: ubuntu-latest # This job uses a matrix strategy to run the job four times, once for each specified Node version. For more information, see "[AUTOTITLE](/actions/using-jobs/using-a-matrix-for-your-jobs)." strategy: matrix: node-version: [14.x, 16.x, 18.x, 20.x] # steps: # In diesem Schritt wird die Aktion `actions/checkout` verwendet, um eine Kopie deines Repositorys auf den Runner herunterzuladen. - uses: actions/checkout@v4 # This step uses the `actions/setup-node` action to set up Node.js for each version indicated by the `matrix.node-version` key above. - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} # This step runs `npm ci` to install any dependencies listed in your `package.json` file. - run: npm ci # This step runs the `build` script if there is one specified under the `scripts` key in your `package.json` file. - run: npm run build --if-present # This step runs the `test` script that is specified under the `scripts` key in your `package.json` file. - run: npm test
name: Node.js CI
Der Name des Workflows. GitHub zeigt die Namen deiner Workflows auf der Registerkarte „Aktionen“ deines Repositorys an. Wenn du name
weglässt, zeigt GitHub den Workflowdateipfad relativ zum Stammverzeichnis des Repositorys an.
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
This example workflow assumes that the default branch for your repository is main
. If the default branch has a different name, edit this example and add your repository's default branch.
jobs:
build:
runs-on: ubuntu-latest
Du kannst diesen Workflow mit einem anderen Betriebssystem ausführen.
Die Vorlage zum Starter-Workflow konfiguriert Aufträge zur Ausführung unter Linux und verwendet mit GitHub gehostete ubuntu-latest
-Runner. Du kannst den runs-on
-Schlüssel ändern, um deine Aufträge auf einem anderen Betriebssystem auszuführen.
Beispielsweise kannst du die GitHub-gehosteten Windows-Runner verwendenruns-on: windows-latest
. Oder du kannst die GitHub-gehosteten macOS-Runner verwendenruns-on: macos-latest
.
Du kannst Aufträge auch in Docker-Containern ausführen oder einen selbst gehosteten Läufer bereitstellen, der auf Deiner eigenen Infrastruktur läuft. Weitere Informationen findest du unter Workflowsyntax für GitHub Actions.
strategy:
matrix:
node-version: [14.x, 16.x, 18.x, 20.x]
This job uses a matrix strategy to run the job four times, once for each specified Node version. For more information, see "Verwenden von Matrizen für deine Aufträge."
steps:
- uses: actions/checkout@v4
In diesem Schritt wird die Aktion actions/checkout
verwendet, um eine Kopie deines Repositorys auf den Runner herunterzuladen.
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
This step uses the actions/setup-node
action to set up Node.js for each version indicated by the matrix.node-version
key above.
- run: npm ci
This step runs npm ci
to install any dependencies listed in your package.json
file.
- run: npm run build --if-present
This step runs the build
script if there is one specified under the scripts
key in your package.json
file.
- run: npm test
This step runs the test
script that is specified under the scripts
key in your package.json
file.
# Der Name des Workflows. GitHub zeigt die Namen deiner Workflows auf der Registerkarte „Aktionen“ deines Repositorys an. Wenn du `name` weglässt, zeigt GitHub den Workflowdateipfad relativ zum Stammverzeichnis des Repositorys an.
name: Node.js CI
# This example workflow assumes that the default branch for your repository is `main`. If the default branch has a different name, edit this example and add your repository's default branch.
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
#
jobs:
build:
# <!-- This is a YAML comment for use in annotated code examples. -->
# Du kannst diesen Workflow mit einem anderen Betriebssystem ausführen.
#
# Die Vorlage zum Starter-Workflow konfiguriert Aufträge zur Ausführung unter Linux und verwendet mit GitHub gehostete `ubuntu-latest`-Runner. Du kannst den `runs-on`-Schlüssel ändern, um deine Aufträge auf einem anderen Betriebssystem auszuführen.
#
# Beispielsweise kannst du die GitHub-gehosteten Windows-Runner verwenden`runs-on: windows-latest`. Oder du kannst die GitHub-gehosteten macOS-Runner verwenden`runs-on: macos-latest`.
#
# Du kannst Aufträge auch in Docker-Containern ausführen oder einen selbst gehosteten Läufer bereitstellen, der auf Deiner eigenen Infrastruktur läuft. Weitere Informationen findest du unter [AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idruns-on).
runs-on: ubuntu-latest
# This job uses a matrix strategy to run the job four times, once for each specified Node version. For more information, see "[AUTOTITLE](/actions/using-jobs/using-a-matrix-for-your-jobs)."
strategy:
matrix:
node-version: [14.x, 16.x, 18.x, 20.x]
#
steps:
# In diesem Schritt wird die Aktion `actions/checkout` verwendet, um eine Kopie deines Repositorys auf den Runner herunterzuladen.
- uses: actions/checkout@v4
# This step uses the `actions/setup-node` action to set up Node.js for each version indicated by the `matrix.node-version` key above.
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
# This step runs `npm ci` to install any dependencies listed in your `package.json` file.
- run: npm ci
# This step runs the `build` script if there is one specified under the `scripts` key in your `package.json` file.
- run: npm run build --if-present
# This step runs the `test` script that is specified under the `scripts` key in your `package.json` file.
- run: npm test
Die Node.js-Version angeben
Der einfachste Weg, eine Node.js-Version anzugeben, bietet die Aktion setup-node
von GitHub. Weitere Informationen findest du unter setup-node
.
Von der Aktion setup-node
wird eine Node.js-Version als Eingabe verwendet und auf dem Runner konfiguriert. Mit dieser Aktion setup-node
wird im Toolcache der jeweiligen Runner nach einer bestimmten Version von Node.js gesucht, und die erforderlichen Binärdateien werden in PATH
hinzugefügt, der für den Rest des Auftrags bestehen bleibt. Die Aktion setup-node
wird als Methode zur Verwendung von Node.js mit GitHub Actions empfohlen, da damit ein konsistentes Verhalten bei verschiedenen Runnern und verschiedenen Version von Node.js gewährleistet wird. Wenn du einen selbst gehosteten Runner verwendest, musst du Node.js installieren und in PATH
hinzufügen.
Der Starterworkflow umfasst eine Matrixstrategie, die deinen Code mit vier Node.js-Versionen erstellt und testet: 14.x, 16.x, 18.x und 20.x. Das „x“ ist ein Platzhalterzeichen für das neueste Neben- und Patchrelease einer Version. Von jeder im node-version
-Array angegebenen Version von Node.js wird ein Auftrag erstellt, bei dem dieselben Schritte ausgeführt werden.
Jeder Auftrag kann mithilfe des matrix
-Kontexts auf den im Matrixarray node-version
definierten Wert zugreifen. Die Aktion setup-node
verwendet den Kontext als node-version
-Eingabe. Die Aktion setup-node
konfiguriert jeden Auftrag mit einer anderen Node.js-Version, bevor sie den Code erstellt und testet. Weitere Informationen zu Matrixstrategien und -kontexten findest du unter Workflowsyntax für GitHub Actions und Kontexte.
strategy: matrix: node-version: [14.x, 16.x, 18.x, 20.x] steps: - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }}
strategy:
matrix:
node-version: [14.x, 16.x, 18.x, 20.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
Alternativ kannnst du auch mit genauen Node.js-Versionen bauen und testen.
strategy: matrix: node-version: [10.17.0, 17.9.0]
strategy:
matrix:
node-version: [10.17.0, 17.9.0]
Oder du kannst auch mithilfe einer einzelnen Version von Node.js bauen und testen.
name: Node.js CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - run: npm ci - run: npm run build --if-present - run: npm test
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- run: npm ci
- run: npm run build --if-present
- run: npm test
Wenn du keine Node.js Version festlegst, verwendet GitHub die standardmäßige Node.js Version der Umgebung. Weitere Informationen findest du unter Using GitHub-hosted runners.
Installieren von Abhängigkeiten
Auf GitHub-gehosteten Runnern sind die Abhängigkeitsmanager npm und Yarn installiert. Du kannst npm und Yarn verwenden, um in deinem Workflow Abhängigkeiten zu installieren, bevor du deinen Code kompilierst und testest. Die auf GitHub gehosteten Windows- und Linux-Runner haben auch Grunt, Gulp und Bower installiert.
Du kannst Abhängigkeiten auch im Cache zwischenspeichern, um deinen Workflow zu beschleunigen. Weitere Informationen findest du unter Abhängigkeiten zwischenspeichern um Workflows zu beschleunigen.
Beispiel mit npm
In diesem Beispiel werden die Versionen aus der Datei package-lock.json oder npm-shrinkwrap.json installiert und verhindert, dass Updates an der Sperrdatei vorgenommen werden. Die Verwendung von npm ci
ist im Allgemeinen schneller als die Ausführung von npm install
. Weitere Informationen findest du unter npm ci
und Einführung in npm ci
für schnellere, zuverlässigere Builds.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - name: Install dependencies run: npm ci
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- name: Install dependencies
run: npm ci
Mit npm install
werden die in der Datei package.json definierten Abhängigkeiten installiert. Weitere Informationen findest du unter npm install
.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - name: Install dependencies run: npm install
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- name: Install dependencies
run: npm install
Beispiel mit Yarn
In diesem Beispiel werden die in der Datei yarn.lock definierten Abhängigkeiten installiert, und Updates der Datei yarn.lock werden verhindert. Weitere Informationen findest du unter yarn install
.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - name: Install dependencies run: yarn --frozen-lockfile
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- name: Install dependencies
run: yarn --frozen-lockfile
Alternativ kannst du die in der Datei package.json definierten Abhängigkeiten installieren.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - name: Install dependencies run: yarn
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- name: Install dependencies
run: yarn
Beispiel mit einer privaten Registry und Erstellung der Datei .npmrc
Du kannst die setup-node
-Aktion verwenden, um auf dem Runner eine lokale NPMRC-Datei zu erstellen, in der die Standardregistrierung und der Standardbereich konfiguriert werden. Die setup-node
-Aktion akzeptiert als Eingabe auch ein Authentifizierungstoken, das für den Zugriff auf private Registrierungen oder die Veröffentlichung von Knotenpaketen verwendet wird. Weitere Informationen findest du unter setup-node
.
Um dich bei deiner privaten Registry zu authentifizieren, musst du dein npm-Authentifizierungstoken als Geheimnis speichern. Erstelle beispielsweise ein Repositorygeheimnis namens NPM_TOKEN
. Weitere Informationen findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.
Im folgenden Beispiel enthält das Geheimnis NPM_TOKEN
das npm-Authentifizierungstoken. Die Aktion setup-node
konfiguriert die NPMRC-Datei, um das npm-Authentifizierungstoken aus der Umgebungsvariable NODE_AUTH_TOKEN
zu lesen. Wenn du die Aktion setup-node
zum Erstellen einer NPMRC-Datei verwendest, musst du die Umgebungsvariable NODE_AUTH_TOKEN
mit dem Geheimen festlegen, der dein npm-Authentifizierungstoken enthält.
Verwende vor der Installation von Abhängigkeiten die Aktion setup-node
, um die NPMRC-Datei zu erstellen. Die Aktion hat zwei Eingabeparameter. Der Parameter node-version
legt die Node.js-Version fest, und der Parameter registry-url
legt die Standardregistrierung fest. Wenn deine Paketregistrierung Geltungsbereiche verwendet, musst du den Parameter scope
verwenden. Weitere Informationen findest du unter npm-scope
.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: always-auth: true node-version: '18.x' registry-url: https://registry.npmjs.org scope: '@octocat' - name: Install dependencies run: npm ci env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
always-auth: true
node-version: '18.x'
registry-url: https://registry.npmjs.org
scope: '@octocat'
- name: Install dependencies
run: npm ci
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Das obige Beispiel erstellt eine NPMRC-Datei mit folgendem Inhalt:
//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://registry.npmjs.org/
always-auth=true
Beispiel zum Zwischenspeichern von Abhängigkeiten im Cache
Du kannst die Abhängigkeiten mithilfe der Aktion setup-node
zwischenspeichern und wiederherstellen.
Im folgenden Beispiel werden Abhängigkeiten für npm zwischengespeichert.
steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '14' cache: 'npm' - run: npm install - run: npm test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '14'
cache: 'npm'
- run: npm install
- run: npm test
Im folgenden Beispiel werden Abhängigkeiten für Yarn zwischengespeichert.
steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '14' cache: 'yarn' - run: yarn - run: yarn test
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '14'
cache: 'yarn'
- run: yarn
- run: yarn test
Im folgenden Beispiel werden Abhängigkeiten für pnpm (ab Version 6.10) zwischengespeichert.
# Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind. # Sie werden von einem Drittanbieter bereitgestellt und unterliegen # separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support # Onlinedokumentation. # NOTE: pnpm caching support requires pnpm version >= 6.10.0 steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@0609f0983b7a228f052f81ef4c3d6510cae254ad with: version: 6.10.0 - uses: actions/setup-node@v4 with: node-version: '14' cache: 'pnpm' - run: pnpm install - run: pnpm test
# Dieser Workflow verwendet Aktionen, die nicht von GitHub zertifiziert sind.
# Sie werden von einem Drittanbieter bereitgestellt und unterliegen
# separaten Nutzungsbedingungen, Datenschutzbestimmungen und Support
# Onlinedokumentation.
# NOTE: pnpm caching support requires pnpm version >= 6.10.0
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@0609f0983b7a228f052f81ef4c3d6510cae254ad
with:
version: 6.10.0
- uses: actions/setup-node@v4
with:
node-version: '14'
cache: 'pnpm'
- run: pnpm install
- run: pnpm test
Wenn du eine benutzerdefinierte Anforderung verwenden oder genauere Steuerungsmöglichkeiten zum Zwischenspeichern benötigst, kannst du die Aktion cache
verwenden. 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. Wenn du beispielsweise npm run build
ausführst, um die in der Datei package.json definierten Buildschritte auszuführen, und npm test
, um deine Testsuite auszuführen, fügst du diese Befehle in der Workflowdatei hinzu.
steps: - uses: actions/checkout@v4 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: '18.x' - run: npm install - run: npm run build --if-present - run: npm test
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '18.x'
- run: npm install
- run: npm run build --if-present
- run: npm test
Workflow-Daten als Artefakte paketieren
Du kannst Artefakte aus deinen Build- und Testschritten speichern, um sie nach dem Abschluss eines Jobs anzuzeigen. Zum Beispiel kann es notwendig sein, Logdateien, Core Dumps, Testergebnisse oder Screenshots zu speichern. Weitere Informationen findest du unter Speichern von Workflowdaten als Artefakte.
In Paket-Registries veröffentlichen
Du kannst deinen Workflow so konfigurieren, dass dein Node.js-Paket nach Bestehen deiner CI-Tests in einer Paket-Registry veröffentlicht wird. Weitere Informationen zum Veröffentlichen in npm und GitHub Packages findest du unter Node.js-Pakete veröffentlichen.