Azure Pipelines vs GitHub Actions v1

Azure DevOps (ADO) to GitHub Actions: Direct 1:1 Mapping

Here’s the direct 1:1 mapping from Azure DevOps (ADO) Pipelines to GitHub Actions:

ADO concept GitHub Actions equivalent What it does YAML key
Pipeline Workflow The whole CI/CD file that runs on a trigger .github/workflows/your-name.yml
Stage Separate workflow file (or needs: + reusable workflows) Logical phase (build → test → deploy). No built-in stages: keyword. Chain workflows with workflow_run or needs:. jobs:<job>.needs:
Job Job Unit of work that gets its own runner (VM/container) jobs:<job_id>:
Task Action (or script step) Reusable building block (PublishTestResults@2actions/upload-artifact@v4) uses: owner/action@vX
Step Step One command or one action inside a job steps: list

Quick Side-by-Side Example

ADO (YAML)

stages:
- stage: Build
  jobs:
  - job: Compile
    steps:
    - task: DotNetCoreCLI@2   # ← task
      inputs:
        command: build
    - script: echo Hello     # ← script step

- stage: Deploy
  dependsOn: Build
  jobs:
  - job: AzureWebApp
    steps:
    - task: AzureWebApp@1
      inputs:
        appName: 'my-app'

GitHub Actions (YAML)

name: CI/CD Pipeline
on:
  push:
    branches:
      - main
jobs:
  Compile:
    runs-on: ubuntu-latest
    steps:
    - name: Build .NET Core   # ← action
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: '6.0.x'
    - name: Echo Hello        # ← script step
      run: echo Hello
  AzureWebApp:
    needs: Compile
    runs-on: ubuntu-latest
    steps:
    - name: Deploy to Azure Web App
      uses: azure/webapps-deploy@v2
      with:
        app-name: 'my-app'

Summary Mapping

ADO pipeline → GitHub Actions
ADO pipeline → .github/workflows/your-workflow.yml
ADO stage  → split into separate workflow files
ADO job    → jobs: myjob:
ADO task   → uses: some/action@v4
ADO step   → steps:
               - run: echo hello
               - uses: actions/checkout@v4