Beschreiben von Standardsyntaxelementen für Workflows
GitHub Actions-Workflows verwenden YAML-Syntax mit bestimmten Elementen, die definieren, wann, wo und wie Ihre Automatisierung ausgeführt wird. Das Verständnis dieser Kernsyntaxelemente ist für die Erstellung effektiver Workflows unerlässlich.
Wesentliche Workflowelemente
Workflowkonfiguration auf oberster Ebene
name: CI/CD Pipeline # Workflow name (optional but recommended)
on: # Event triggers
push:
branches: [main, develop]
pull_request:
branches: [main]
schedule:
- cron: "0 2 * * 1" # Weekly Monday 2 AM UTC
jobs:# Job definitions
# Job configurations go here
Erläuterte Kernsyntaxelemente
| Element | Zweck | Erforderlich | Example |
|---|---|---|---|
name |
Anzeigename des Workflows in der GitHub-Benutzeroberfläche | Wahlfrei | name: "Build and Test" |
on |
Ereignistrigger für die Workflowausführung | Erforderlich | on: [push, pull_request] |
jobs |
Sammlung von auszuführenden Aufträgen | Erforderlich | jobs: build: ... |
runs-on |
Gibt die Runner-Umgebung an. | Erforderlich | runs-on: ubuntu-latest |
steps |
Sequenzielle Aktionen innerhalb eines Auftrags | Erforderlich | steps: - name: ... |
uses |
Verweisen auf vordefinierte Aktionen | Wahlfrei | uses: actions/checkout@v4 |
run |
Führt Shellbefehle aus | Wahlfrei | run: npm test |
Vollständiges Workflowbeispiel
name: Node.js CI/CD Pipeline
# Event configuration
on:
push:
branches: [main, develop]
paths-ignore: ["docs/**", "*.md"]
pull_request:
branches: [main]
types: [opened, synchronize, reopened]
# Environment variables (workflow-level)
env:
NODE_VERSION: "20"
CI: true
# Job definitions
jobs:
# Test job
test:
name: Run Tests
runs-on: ubuntu-latest
# Job-level environment variables
env:
DATABASE_URL: ${{ secrets.TEST_DATABASE_URL }}
# Job steps
steps:
- name: Check out code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: "npm"
- name: Install dependencies
run: |
npm ci
npm audit --audit-level=high
- name: Run tests
run: |
npm run test:coverage
npm run test:integration
env:
NODE_ENV: test
- name: Upload coverage reports
uses: actions/upload-artifact@v4
if: always()
with:
name: coverage-reports
path: coverage/
retention-days: 30
# Build job (depends on test)
build:
name: Build Application
needs: test
runs-on: ubuntu-latest
outputs:
build-version: ${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: "npm"
- name: Install and build
run: |
npm ci --production
npm run build
- name: Generate version
id: version
run: |
VERSION=$(date +%Y%m%d)-${GITHUB_SHA::8}
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Save build artifacts
uses: actions/upload-artifact@v4
with:
name: build-${{ steps.version.outputs.version }}
path: |
dist/
package.json
Erweiterte Syntaxelemente
Bedingte Ausführung
steps:
- name: Deploy to production
if: github.ref == 'refs/heads/main' && success()
run: ./deploy.sh
- name: Notify on failure
if: failure()
run: ./notify-failure.sh
Matrixstrategien
jobs:
test:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [18, 20, 22]
include:
- os: ubuntu-latest
node-version: 22
experimental: true
fail-fast: false
runs-on: ${{ matrix.os }}
Wiederverwendbare Workflows
jobs:
call-reusable-workflow:
uses: ./.github/workflows/reusable-tests.yml
with:
environment: production
node-version: "20"
secrets:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
Bewährte Methoden für die Workflowsyntax
Struktur und Organisation
- Verwenden aussagekräftiger Namen für Workflows, Aufträge und Schritte
- Gruppieren verwandter Schritte logisch innerhalb von Aufträgen
- Workflows auf bestimmte Zwecke konzentrieren (CI, CD, Wartung)
Effizienzoptimierung
- Verwenden Sie
pathsundpaths-ignore, um unnötige Läufe zu begrenzen - Cacheabhängigkeiten mit
actions/cacheoder integriertem Zwischenspeichern - Parallele Ausführung unabhängiger Aufträge
Sicherheitsüberlegungen
permissions:
contents: read
security-events: write
pull-requests: write
env:
# Use secrets for sensitive data
API_KEY: ${{ secrets.API_KEY }}
# Use variables for non-sensitive configuration
ENVIRONMENT: ${{ vars.ENVIRONMENT }}
Fehlerbehandlung und Debugging
steps:
- name: Debug information
if: env.ACTIONS_STEP_DEBUG == 'true'
run: |
echo "Runner OS: $RUNNER_OS"
echo "Workflow: $GITHUB_WORKFLOW"
echo "Event: $GITHUB_EVENT_NAME"
Eine umfassende Syntaxdokumentation finden Sie im offiziellen Referenzdokument für die Workflowsyntax von GitHub-Aktionen.