Bird
Raised Fist0
Azurecloud~10 mins

Build pipeline basics in Azure - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Process Flow - Build pipeline basics
Start: Code Commit
↓
Trigger Build Pipeline
↓
Checkout Source Code
↓
Run Build Tasks
↓
Run Tests
↓
Publish Artifacts
↓
Build Pipeline Complete
This flow shows how a build pipeline starts from code commit, runs build and test tasks, then publishes artifacts.
Execution Sample
Azure
trigger:
  - main

pool:
  vmImage: 'ubuntu-latest'

steps:
  - script: echo Building project
A simple Azure build pipeline triggered on main branch that runs a build script on Ubuntu.
Process Table
StepActionDetailsResult
1Trigger pipelineCode pushed to main branchPipeline starts
2Checkout codeGet latest source from repoSource code available
3Run build scriptExecute 'echo Building project'Output: Building project
4Run testsNo tests definedSkipped
5Publish artifactsNo artifacts definedSkipped
6CompletePipeline finished successfullySuccess
💡 Pipeline ends after all steps complete successfully
Status Tracker
VariableStartAfter Step 2After Step 3After Step 6
pipeline_statusNot startedRunningRunningSucceeded
source_codenullChecked outChecked outChecked out
build_outputnullnullBuilding projectBuilding project
Key Moments - 2 Insights
Why does the pipeline start automatically after code is pushed?
Because the trigger is set to the main branch, so any push to main starts the pipeline (see execution_table step 1).
What happens if no tests or artifacts are defined?
Those steps are skipped but the pipeline still completes successfully (see execution_table steps 4 and 5).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the pipeline status after step 3?
ARunning
BSucceeded
CFailed
DNot started
💡 Hint
Check the 'pipeline_status' variable in variable_tracker after Step 3
At which step does the source code become available?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
Look at the 'source_code' variable in variable_tracker after Step 2
If tests were added, which step would change in the execution table?
AStep 3
BStep 4
CStep 5
DStep 6
💡 Hint
Step 4 is where tests run according to the execution_table
Concept Snapshot
Build pipeline basics in Azure DevOps:
- Trigger on code push (e.g., main branch)
- Checkout source code
- Run build scripts
- Run tests (optional)
- Publish artifacts (optional)
- Pipeline ends with success or failure
Full Transcript
A build pipeline in Azure DevOps starts automatically when code is pushed to a specified branch, like main. The pipeline first checks out the latest source code, then runs build tasks such as scripts. If tests are defined, it runs them next. After that, it publishes build artifacts if configured. Finally, the pipeline completes successfully if all steps pass. If tests or artifacts are missing, those steps are skipped but the pipeline still finishes. Variables like pipeline status and build output change as the pipeline progresses through each step.

Practice

(1/5)
1. What is the main purpose of a build pipeline in Azure DevOps?
easy
A. To manually test code changes
B. To store code in a repository
C. To automate the process of preparing code for deployment
D. To monitor user activity on a website

Solution

  1. Step 1: Understand the role of a build pipeline

    A build pipeline automates tasks like compiling code and running tests when code changes.
  2. Step 2: Identify the main goal

    The main goal is to prepare code automatically for deployment or further steps.
  3. Final Answer:

    To automate the process of preparing code for deployment -> Option C
  4. Quick Check:

    Build pipeline purpose = automate code preparation [OK]
Hint: Build pipelines automate code prep, not manual tasks [OK]
Common Mistakes:
  • Confusing build pipeline with code repository
  • Thinking build pipelines monitor user activity
  • Assuming build pipelines are for manual testing
2. Which YAML snippet correctly defines a trigger for a build pipeline on the 'main' branch?
easy
A. trigger:\n branches:\n - main
B. trigger:\n branches:\n exclude:\n - main
C. trigger:\n paths:\n include:\n - main
D. trigger:\n branches:\n include:\n - main

Solution

  1. Step 1: Understand trigger syntax in YAML

    The trigger block uses 'branches' with 'include' to specify branches that start the pipeline.
  2. Step 2: Check each option

    trigger:\n branches:\n include:\n - main correctly includes 'main' branch under 'branches' and 'include'. trigger:\n branches:\n exclude:\n - main excludes 'main', which disables trigger on it. trigger:\n paths:\n include:\n - main uses 'paths' which triggers on file changes, not branches. trigger:\n branches:\n - main misses 'include' keyword, so syntax is incorrect.
  3. Final Answer:

    trigger:\n branches:\n include:\n - main -> Option D
  4. Quick Check:

    Correct trigger syntax includes branches: include [OK]
Hint: Use 'branches: include:' to trigger on specific branches [OK]
Common Mistakes:
  • Using 'exclude' instead of 'include' to trigger
  • Confusing 'paths' with 'branches' in triggers
  • Omitting 'include' keyword causing syntax errors
3. Given this YAML snippet in an Azure build pipeline, what will be the output of the script step?
steps:
- script: echo Hello, Azure DevOps!
  displayName: 'Print greeting'
medium
A. No output, script step is missing
B. Hello, Azure DevOps!
C. script: echo Hello, Azure DevOps!
D. Print greeting

Solution

  1. Step 1: Understand the script step in YAML

    The 'script' keyword runs the command given, here 'echo Hello, Azure DevOps!'.
  2. Step 2: Identify the output of the echo command

    The echo command prints the text 'Hello, Azure DevOps!' to the pipeline logs.
  3. Final Answer:

    Hello, Azure DevOps! -> Option B
  4. Quick Check:

    Script echo output = Hello, Azure DevOps! [OK]
Hint: Script runs commands; echo prints text to output [OK]
Common Mistakes:
  • Confusing displayName with output
  • Thinking script keyword prints itself
  • Assuming no output if displayName is set
4. You wrote this YAML snippet for a build pipeline but it fails to trigger on the 'develop' branch:
trigger:
  branches:
    include:
      - main
steps:
- script: echo Build started
What is the likely cause?
medium
A. The trigger only includes the 'main' branch, not 'develop'
B. The script step is missing a displayName
C. The echo command is incorrect syntax
D. The YAML indentation is invalid

Solution

  1. Step 1: Analyze the trigger branches

    The trigger includes only the 'main' branch, so changes in 'develop' won't start the pipeline.
  2. Step 2: Check other parts for errors

    The script step is valid without displayName, echo syntax is correct, and indentation looks fine.
  3. Final Answer:

    The trigger only includes the 'main' branch, not 'develop' -> Option A
  4. Quick Check:

    Trigger branches must include target branch [OK]
Hint: Check trigger branches include all needed branches [OK]
Common Mistakes:
  • Assuming script needs displayName to run
  • Thinking echo command syntax causes trigger failure
  • Ignoring trigger branch filters
5. You want to create a build pipeline that triggers only when files in the 'src/' folder change on the 'release' branch. Which YAML snippet correctly sets this up?
hard
A. trigger:\n branches:\n include:\n - release\n paths:\n include:\n - src/**
B. trigger:\n branches:\n include:\n - release\n paths:\n exclude:\n - src/**
C. trigger:\n branches:\n exclude:\n - release\n paths:\n include:\n - src/**
D. trigger:\n branches:\n include:\n - main\n paths:\n include:\n - src/**

Solution

  1. Step 1: Understand branch and path filters

    To trigger on 'release' branch and only when files in 'src/' change, include 'release' in branches and 'src/**' in paths.
  2. Step 2: Evaluate each option

    trigger:\n branches:\n include:\n - release\n paths:\n include:\n - src/** correctly includes 'release' branch and 'src/**' path. trigger:\n branches:\n include:\n - release\n paths:\n exclude:\n - src/** excludes 'src/**' so it won't trigger on those files. trigger:\n branches:\n exclude:\n - release\n paths:\n include:\n - src/** excludes 'release' branch, so no trigger on it. trigger:\n branches:\n include:\n - main\n paths:\n include:\n - src/** triggers on 'main' branch, not 'release'.
  3. Final Answer:

    trigger:\n branches:\n include:\n - release\n paths:\n include:\n - src/** -> Option A
  4. Quick Check:

    Include branch and path filters to trigger correctly [OK]
Hint: Use both branches and paths include to filter triggers [OK]
Common Mistakes:
  • Using exclude instead of include for paths
  • Triggering on wrong branch
  • Forgetting to specify paths filter