فحص متغيرات البيئة

مكتمل

تعد متغيرات البيئة ضرورية لإنشاء مهام سير عمل GitHub Actions مرنة وقابلة للصيانة. إنها تسمح لك بتكوين السلوك وتمرير البيانات بين الخطوات وتكييف مهام سير العمل مع بيئات مختلفة دون قيم الترميز الثابت.

فهم متغيرات البيئة في GitHub Actions

توفر متغيرات البيئة طريقة لتخزين بيانات التكوين والوصول إليها داخل مهام سير العمل الخاصة بك. يمكن تعيينها في نطاقات مختلفة واستخدامها في جميع أنحاء مسار الأتمتة الخاص بك لإدارة التكوين المتسقة والآمنة.

النطاقات المتغيرة والتدرج الهرمي

تدعم GitHub Actions متغيرات البيئة على مستويات متعددة:

مستوى سير العمل: متوفر لجميع الوظائف في سير العمل مستوى الوظيفة: متوفر لكافة الخطوات في وظيفة معينة
مستوى الخطوة: متاح فقط لتلك الخطوة المحددة

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"

متغيرات بيئة GitHub المضمنة

يوفر GitHub تلقائيا العديد من متغيرات البيئة بمعلومات حول سياق سير العمل:

المتغيرات المضمنة الأساسية

متغير الوصف مثال للقيمة
GITHUB_WORKFLOW اسم سير العمل "CI Pipeline"
GITHUB_ACTION المعرف الفريد للإجراء "__actions_checkout"
GITHUB_REPOSITORY اسم المستودع (المالك/المستودع) "microsoft/vscode"
GITHUB_REF مرجع الفرع أو العلامة "refs/heads/main"
GITHUB_SHA تنفيذ SHA الذي أدى إلى تشغيل سير العمل "ffac537e6cbb..."
GITHUB_ACTOR اسم مستخدم المستخدم الذي قام بتشغيل سير العمل "octocat"
GITHUB_EVENT_NAME الحدث الذي أدى إلى تشغيل سير العمل "push"
RUNNER_OS نظام تشغيل العداء "Linux"

المتغيرات المضمنة المتقدمة

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"

قواعد التسمية المهمة:

  • تستخدم المتغيرات المضمنة البادئة GITHUB_
  • لا يمكنك إنشاء متغيرات مخصصة باستخدام البادئة GITHUB_
  • أسماء المتغيرات حساسة لحالة الأحرف في معظم السياقات

أنماط البيئة العملية المتغيرة

إدارة التكوين

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 .

إنشاء المتغير الديناميكي

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"

تكوين متعدد المنصات

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 }}

أفضل ممارسات الأمان لمتغيرات البيئة

معالجة البيانات الحساسة

# 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!

التحقق من صحة متغير البيئة

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

تقنيات متقدمة

متغيرات البيئة الشرطية

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

قوالب متغير البيئة

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 }}

تعد متغيرات البيئة أداة قوية لإنشاء مهام سير عمل GitHub Actions مرنة وقابلة للصيانة وآمنة. استخدمها بشكل استراتيجي لتجنب القيم ذات الترميز الثابت وتمكين إدارة التوصيف بسهولة عبر بيئات مختلفة.

للحصول على وثائق كاملة حول متغيرات البيئة، راجع متغيرات البيئة في GitHub Actions.