Standart iş akışı söz dizimi öğelerini açıklama
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
pathsvepaths-ignorekullanın -
actions/cacheile 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.