فحص متغيرات البيئة
تعد متغيرات البيئة ضرورية لإنشاء مهام سير عمل 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.