Standart iş akışı söz dizimi öğelerini açıklama

Tamamlandı

GitHub Actions iş akışları, otomasyonunuzun ne zaman, nerede ve nasıl çalıştığını tanımlayan belirli öğelerle YAML söz dizimini kullanır. Etkili iş akışları oluşturmak için bu temel söz dizimi öğelerini anlamak önemlidir.

Temel iş akışı öğeleri

Üst düzey iş akışı yapılandırması

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

Temel söz dizimi öğeleri açıklandı

Öğe Amaç Gerekli Example
name GitHub kullanıcı arabiriminde görünen iş akışı adı Opsiyonel name: "Build and Test"
on İş akışı yürütme için olay tetikleyicileri Required on: [push, pull_request]
jobs Yürütülecek işlerin koleksiyonu Required jobs: build: ...
runs-on Çalışma ortamını belirtir Required runs-on: ubuntu-latest
steps bir iş içindeki sıralı eylemler Required steps: - name: ...
uses Önceden oluşturulmuş eylemlere başvurur Opsiyonel uses: actions/checkout@v4
run Kabuk komutlarını yürütür Opsiyonel run: npm test

Tam iş akışı örneği

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

Gelişmiş söz dizimi öğeleri

Koşullu yürütme

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

Matris stratejileri

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

Yeniden kullanılabilir iş akışları

jobs:
  call-reusable-workflow:
    uses: ./.github/workflows/reusable-tests.yml
    with:
      environment: production
      node-version: "20"
    secrets:
      DATABASE_URL: ${{ secrets.DATABASE_URL }}

İş akışı söz dizimi için en iyi yöntemler

Yapı ve kuruluş

  • İş akışları, işler ve adımlar için açıklayıcı adlar kullanma
  • İlişkili adımları işler içinde mantıksal olarak gruplandırma
  • İş akışlarının belirli amaçlara odaklanmasını sağlayın (CI, CD, bakım)

Verimlilik iyileştirme

  • Gereksiz çalıştırmaları sınırlamak için paths ve paths-ignore kullanın
  • actions/cache ile veya yerleşik önbelleğe alma ile önbellek bağımlılıkları
  • Bağımsız işleri paralel olarak çalıştırma

Güvenlikle ilgili dikkat edilmesi gerekenler

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

Hata işleme ve hata ayıklama

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"

Kapsamlı söz dizimi belgeleri için GitHub Actions'ın resmi İş Akışı söz dizimi referansına bakın.