Untersuchen von Umgebungsvariablen
Umgebungsvariablen sind für die Erstellung flexibler und wartungsfähiger GitHub-Aktionen-Workflows unerlässlich. Sie ermöglichen es Ihnen, Das Verhalten zu konfigurieren, Daten zwischen Schritten zu übergeben und Workflows ohne Hartcodierungswerte an verschiedene Umgebungen anzupassen.
Grundlegendes zu Umgebungsvariablen in GitHub-Aktionen
Umgebungsvariablen bieten eine Möglichkeit zum Speichern und Zugreifen auf Konfigurationsdaten in Ihren Workflows. Sie können in unterschiedlichen Bereichen festgelegt und in Ihrer Automatisierungspipeline verwendet werden, um eine konsistente und sichere Konfigurationsverwaltung zu ermöglichen.
Variable Bereiche und Hierarchie
GitHub-Aktionen unterstützen Umgebungsvariablen auf mehreren Ebenen:
Workflowebene: Verfügbar für alle Aufträge im Workflow Jobebene: Verfügbar für alle Schritte in einem bestimmten Auftrag
Schrittebene: Nur für diesen bestimmten Schritt verfügbar
name: Multi-level Environment Variables
# Workflow-level variables
env:
NODE_VERSION: "20"
BUILD_CONFIGURATION: "Release"
jobs:
build:
runs-on: ubuntu-latest
# Job-level variables
env:
DATABASE_NAME: "production_db"
API_TIMEOUT: "30000"
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Run tests with custom config
run: npm test
# Step-level variables
env:
TEST_ENVIRONMENT: "ci"
LOG_LEVEL: "debug"
Integrierte GitHub-Umgebungsvariablen
GitHub stellt automatisch zahlreiche Umgebungsvariablen mit Informationen zum Workflowkontext bereit:
Wichtige integrierte Variablen
| Variable | Description | Beispielwert |
|---|---|---|
GITHUB_WORKFLOW |
Name des Workflows | "CI Pipeline" |
GITHUB_ACTION |
Eindeutiger Bezeichner der Aktion | "__actions_checkout" |
GITHUB_REPOSITORY |
Repository-Name (Besitzer/Repo) | "microsoft/vscode" |
GITHUB_REF |
Verzweigungs- oder Tagreferenz | "refs/heads/main" |
GITHUB_SHA |
Der Commit-SHA, der den Workflow ausgelöst hat | "ffac537e6cbb..." |
GITHUB_ACTOR |
Benutzername des Benutzers, der den Workflow ausgelöst hat | "octocat" |
GITHUB_EVENT_NAME |
Ereignis, das den Workflow ausgelöst hat | "push" |
RUNNER_OS |
Betriebssystem des Läufers | "Linux" |
Erweiterte integrierte Variablen
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Display workflow context
run: |
echo "Workflow: $GITHUB_WORKFLOW"
echo "Repository: $GITHUB_REPOSITORY"
echo "Branch: ${GITHUB_REF#refs/heads/}"
echo "Commit: $GITHUB_SHA"
echo "Actor: $GITHUB_ACTOR"
echo "Event: $GITHUB_EVENT_NAME"
echo "Runner OS: $RUNNER_OS"
Wichtige Benennungsregeln:
- Integrierte Variablen verwenden das
GITHUB_Präfix - Sie können keine benutzerdefinierten Variablen mit dem
GITHUB_Präfix erstellen. - Variablennamen berücksichtigen in den meisten Kontexten Groß- und Kleinschreibung
Praktische Umgebungsvariablenmuster
Konfigurationsverwaltung
name: Environment-specific Deployment
env:
# Global configuration
APP_NAME: "my-awesome-app"
DOCKER_REGISTRY: "ghcr.io"
jobs:
deploy-staging:
if: github.ref == 'refs/heads/develop'
runs-on: ubuntu-latest
env:
ENVIRONMENT: "staging"
API_URL: "https://api.staging.example.com"
DATABASE_TIER: "basic"
steps:
- name: Deploy to staging
run: |
echo "Deploying $APP_NAME to $ENVIRONMENT"
echo "API URL: $API_URL"
docker build -t $DOCKER_REGISTRY/$APP_NAME:$GITHUB_SHA .
deploy-production:
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
env:
ENVIRONMENT: "production"
API_URL: "https://api.example.com"
DATABASE_TIER: "premium"
steps:
- name: Deploy to production
run: |
echo "Deploying $APP_NAME to $ENVIRONMENT"
echo "API URL: $API_URL"
docker build -t $DOCKER_REGISTRY/$APP_NAME:latest .
Dynamische Variablenerstellung
steps:
- name: Generate build metadata
id: metadata
run: |
BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')
BUILD_NUMBER=$GITHUB_RUN_NUMBER
VERSION_TAG=${GITHUB_REF#refs/tags/}
echo "BUILD_DATE=$BUILD_DATE" >> $GITHUB_ENV
echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV
echo "VERSION_TAG=$VERSION_TAG" >> $GITHUB_ENV
- name: Use generated variables
run: |
echo "Build Date: $BUILD_DATE"
echo "Build Number: $BUILD_NUMBER"
echo "Version: $VERSION_TAG"
Konfiguration mit mehreren Plattformen
jobs:
build:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
include:
- os: ubuntu-latest
BUILD_COMMAND: "make build-linux"
PACKAGE_EXT: ".deb"
- os: windows-latest
BUILD_COMMAND: "msbuild /p:Configuration=Release"
PACKAGE_EXT: ".msi"
- os: macos-latest
BUILD_COMMAND: "xcodebuild -configuration Release"
PACKAGE_EXT: ".dmg"
runs-on: ${{ matrix.os }}
env:
BUILD_COMMAND: ${{ matrix.BUILD_COMMAND }}
PACKAGE_EXT: ${{ matrix.PACKAGE_EXT }}
steps:
- name: Build application
run: ${{ env.BUILD_COMMAND }}
Bewährte Methoden für Sicherheit für Umgebungsvariablen
Verarbeitung vertraulicher Daten
# DON'T: Store secrets in plain environment variables
env:
DATABASE_PASSWORD: 'super-secret-password' # Visible in logs!
# DO: Use GitHub Secrets for sensitive data
env:
DATABASE_HOST: 'db.example.com'
DATABASE_PORT: '5432'
DATABASE_USER: 'app_user'
DATABASE_PASSWORD: ${{ secrets.DATABASE_PASSWORD }} # Secure!
Überprüfung der Umgebungsvariable
steps:
- name: Validate required environment variables
run: |
required_vars=("API_URL" "DATABASE_HOST" "ENVIRONMENT")
for var in "${required_vars[@]}"; do
if [ -z "${!var}" ]; then
echo "ERROR: Required environment variable $var is not set"
exit 1
else
echo "OK: $var is set"
fi
done
Erweiterte Techniken
Bedingte Umgebungsvariablen
steps:
- name: Set environment-specific variables
run: |
if [ "$GITHUB_REF" = "refs/heads/main" ]; then
echo "LOG_LEVEL=info" >> $GITHUB_ENV
echo "CACHE_TTL=3600" >> $GITHUB_ENV
elif [ "$GITHUB_REF" = "refs/heads/develop" ]; then
echo "LOG_LEVEL=debug" >> $GITHUB_ENV
echo "CACHE_TTL=300" >> $GITHUB_ENV
else
echo "LOG_LEVEL=warn" >> $GITHUB_ENV
echo "CACHE_TTL=60" >> $GITHUB_ENV
fi
Umgebungsvariablenvorlagen
env:
APP_VERSION: ${{ github.ref_name }}
BUILD_ID: ${{ github.run_number }}
FULL_VERSION: ${{ github.ref_name }}-build.${{ github.run_number }}
CONTAINER_TAG: ${{ github.repository }}:${{ github.ref_name }}
Umgebungsvariablen sind ein leistungsstarkes Tool zum Erstellen flexibler, wartungsfähiger und sicherer GitHub-Aktionen-Workflows. Verwenden Sie sie strategisch, um hartcodierte Werte zu vermeiden und eine einfache Konfigurationsverwaltung in verschiedenen Umgebungen zu ermöglichen.
Vollständige Dokumentation zu Umgebungsvariablen finden Sie unter "Umgebungsvariablen" in GitHub-Aktionen.