Kokil Thapa - Professional Web Developer in Nepal
Freelancer Web Developer in Nepal with 15+ Years of Experience

Kokil Thapa is an experienced full-stack web developer focused on building fast, secure, and scalable web applications. He helps businesses and individuals create SEO-friendly, user-focused digital platforms designed for long-term growth.

Azure DevOps: Complete Beginner Guide

By Kokil Thapa | Last reviewed: August 2026

Setting up a professional CI/CD workflow often feels overwhelming when you are used to manual deployments or simpler tools. This Azure DevOps: Complete Beginner Guide cuts through the enterprise noise to show exactly how full-stack developers can use Boards, Repos, Pipelines, and Artifacts for real application delivery. Whether you are managing a Laravel SaaS product or coordinating a distributed team across Nepal and abroad, understanding this platform's core services is essential for modern engineering workflows.

What Is Azure DevOps and Why Does It Matter for Modern Teams?

Azure DevOps is a suite of development tools that covers the entire software lifecycle, from planning and coding to building, testing, and deploying. Unlike standalone CI servers or issue trackers, it integrates these functions into a single platform with shared identity management and permissions. For developers working on Laravel applications or complex eCommerce systems, this integration eliminates the friction of syncing data between Jira, GitHub, Jenkins, and Artifactory.

The platform consists of five primary services that can be adopted independently or together:

  • Azure Boards: Agile planning tools including Kanban boards, backlogs, sprints, and dashboards.
  • Azure Repos: Unlimited private Git repositories with pull requests, branch policies, and semantic code search.
  • Azure Pipelines: Cloud-hosted or self-hosted CI/CD supporting any language, platform, and cloud target.
  • Azure Test Plans: Manual and exploratory testing tools integrated directly with work items and builds.
  • Azure Artifacts: Native package feeds for Maven, npm, NuGet, Python, and Universal packages.
Azure DevOps EcosystemBoardsPlanning & TrackingReposGit & PRsPipelinesCI/CD & YAMLArtifactsPackage FeedsTest PlansQA & ValidationUnified Identity + Permissions + Audit LogsDeveloper → Commit → Build → Test → Deploy → Monitor
Azure DevOps complete beginner guide ecosystem: five integrated services supporting the full development lifecycle

In practice, most teams start with Repos and Pipelines, then adopt Boards as project complexity grows. The free tier includes five users with access to all services, making it viable for small agencies and freelance developers who need professional tooling without immediate cost.

How Do You Configure Azure Pipelines for Laravel and PHP Projects?

Azure Pipelines is typically the entry point for developers adopting this platform. While the classic UI editor exists, YAML pipelines are now the standard for new projects in 2026. They live in your repository as azure-pipelines.yml, enabling version-controlled, peer-reviewed CI/CD configuration.

Understanding the YAML Structure

A pipeline consists of stages, jobs, and steps. For a typical Laravel 12 application running on PHP 8.4, you need to install dependencies, run tests, build assets, and publish artifacts. Here is a production-ready starting point:

trigger:
  branches:
    include:
      - main
      - develop

pool:
  vmImage: 'ubuntu-24.04'

variables:
  phpVersion: '8.4'
  nodeVersion: '22'

stages:
  - stage: BuildAndTest
    displayName: 'Build & Test'
    jobs:
      - job: LaravelBuild
        displayName: 'Composer Install & PHPUnit'
        steps:
          - task: UsePHP@1
            inputs:
              version: $(phpVersion)
          
          - script: |
              composer validate --strict
              composer install --prefer-dist --no-progress --optimize-autoloader
              cp .env.testing .env
              php artisan key:generate
              php artisan migrate:fresh --force
              ./vendor/bin/phpunit --coverage-clover=coverage.xml
            displayName: 'Install Dependencies & Run Tests'
          
          - task: PublishCodeCoverageResults@2
            inputs:
              summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage.xml'
          
          - publish: $(System.DefaultWorkingDirectory)
            artifact: laravel-app
            condition: succeeded()

This configuration uses Microsoft-hosted Ubuntu 24.04 agents, which come pre-installed with PHP 8.4 and Node.js 22 LTS. The PublishCodeCoverageResults task integrates test coverage directly into the pipeline summary, giving immediate visibility into code quality trends.

Managing Environment Variables Securely

Never commit .env files or secrets to your repository. Azure Pipelines provides variable groups and Azure Key Vault integration for sensitive configuration. Define non-secret variables like APP_ENV=testing in the YAML file itself, but store database passwords, API keys, and signing certificates in a variable group marked as secret or linked to Key Vault.

Reference them in your pipeline using the $(variableName) syntax. Secret variables are automatically masked in logs, preventing accidental exposure during debugging sessions.

How Does Azure DevOps Compare to GitHub Actions and GitLab CI?

Choosing a CI/CD platform depends on your existing ecosystem, team size, and deployment targets. Having deployed Laravel applications using multiple CI/CD platforms, I find each has distinct trade-offs worth understanding before committing.

CriteriaAzure DevOpsGitHub ActionsGitLab CI
Free Tier5 users, 1 parallel job, 1,800 min/monthUnlimited public repos, 2,000 min/month private400 compute minutes/month, 5GB storage
Self-Hosted AgentsUnlimited free self-hosted agentsFree self-hosted runnersFree self-managed runners
Built-in Project ManagementFull Azure Boards (Kanban, Scrum)Basic Issues & ProjectsIntegrated Issues, Milestones, Epics
Artifact StorageAzure Artifacts (npm, Maven, Universal)GitHub PackagesContainer Registry & Package Registry
Enterprise ComplianceSOC2, HIPAA, FedRAMP, advanced auditSOC2, limited compliance tiersSOC2, ISO 27001, strong audit logging
Best ForMicrosoft stack, hybrid cloud, regulated industriesOpen source, GitHub-native workflowsDevOps-centric teams, container-first shops

Azure DevOps wins when you need integrated project management alongside CI/CD, require extensive compliance certifications, or deploy heavily to Azure infrastructure. GitHub Actions excels for open-source projects and teams already living in GitHub. GitLab CI remains strong for teams wanting a single-application DevOps platform with mature container registry support.

CI/CD Platform Decision TreeStart: Choose PlatformNeed integrated Agile boards?YesNoAzure DevOpsCode hosted on GitHub?YesNoGitHub ActionsGitLab CIAll three support self-hosted agents and PHP/Laravel natively
Decision framework for selecting Azure DevOps vs GitHub Actions vs GitLab CI based on project requirements

When Should You Use Self-Hosted Agents Instead of Microsoft-Hosted VMs?

Microsoft-hosted agents are convenient but have limitations: they spin up fresh for every run (no persistent cache), offer fixed hardware specs, and cannot access resources inside your private network. Self-hosted agents solve these problems and are essential for many production scenarios.

Common Scenarios Requiring Self-Hosted Agents

  1. Deploying to on-premises or VPC resources: When your staging server sits behind a firewall and isn't publicly accessible, a self-hosted agent running inside that network can deploy directly without exposing SSH ports or VPN tunnels.
  2. Persistent caching: Composer and npm installations consume significant time. A self-hosted agent retains vendor directories and node_modules between runs, cutting build times by 60–80% for large Laravel applications.
  3. Custom toolchains: If your deployment requires specific PHP extensions, legacy binaries, or proprietary CLI tools not available on Microsoft-hosted images, install them once on your agent machine.
  4. Cost optimization at scale: Microsoft-hosted minutes cost money beyond the free tier. Running agents on your own EC2 instances or spare hardware becomes cheaper past ~3,000 minutes per month.

Installing an Agent on Ubuntu 24.04

# Download and extract the agent
mkdir ~/azagent && cd ~/azagent
curl -o vsts-agent-linux-x64.tar.gz https://vstsagentpackage.azureedge.net/agent/3.243.0/vsts-agent-linux-x64-3.243.0.tar.gz
tar zxvf vsts-agent-linux-x64.tar.gz

# Configure interactively
./config.sh --unattended \
  --url https://dev.azure.com/YOUR_ORG \
  --auth pat \
  --token YOUR_PAT_TOKEN \
  --pool Default \
  --agent ubuntu-laravel-prod \
  --acceptTeeEula

# Install as systemd service
sudo ./svc.sh install
sudo ./svc.sh start

Create a dedicated system user for the agent rather than running it as root. Grant this user only the permissions needed for deployment: write access to the release directory, sudo rights for PHP-FPM reload commands, and SSH keys for remote targets. On projects where I manage multiple sister sites sharing infrastructure, each site gets its own agent pool to isolate failures and control concurrent deployments.

How Do You Manage Work Items and Sprint Planning in Azure Boards?

Azure Boards provides Kanban boards, sprint backlogs, queries, and dashboards out of the box. For developers accustomed to Trello or basic GitHub Issues, the depth can feel excessive initially, but it pays off as teams grow beyond three or four contributors.

Choosing the Right Process Template

Azure DevOps offers four process templates: Basic, Agile, Scrum, and CMMI. Most web development teams should choose Agile or Basic.

  • Basic: Three work item types (Issue, Task, Epic). Minimal ceremony. Best for freelancers, solo developers, or very small teams shipping simple websites.
  • Agile: User Stories, Features, Epics, Bugs, Tasks, plus effort tracking and velocity charts. Fits most Laravel/eCommerce teams doing two-week sprints.
  • Scrum: Product Backlog Items, Sprint Backlog Items, formal burndown charts. Only if your organization genuinely practices Scrum with a certified Scrum Master.
  • CMMI: Heavyweight process for government/defense contractors. Avoid unless contractually required.

Linking Work Items to Code and Pipelines

The real value emerges when you connect Boards to Repos and Pipelines. Reference work items in commit messages using #1234 syntax, and they automatically appear in the work item's development section. Configure branch policies to require linked work items before pull request completion. Set up pipeline triggers that update work item state when builds succeed or fail.

This traceability matters enormously for legal-tech portals and regulated applications where auditors ask "why was this change made?" six months after deployment. Having the answer embedded in the system beats searching through Slack threads and email chains.

Work Item Lifecycle TraceabilityUser Story#1234New ActiveBranch + PRfeature/#1234Linked CommitPipeline BuildPHPUnit PassAuto UpdateStaging DeployQA ReviewResolvedProductionReleasedClosedAudit Trail: Every state change recorded with timestamp, user, and linked artifactCompliance-ready traceability without external documentation toolsQuery & Dashboard: Track cycle time, defect rate, sprint velocity
Azure DevOps complete beginner guide workflow demonstrating end-to-end work item traceability from creation to production release

What Are the Common Pitfalls When Adopting Azure DevOps in 2026?

After helping teams migrate to Azure DevOps, several recurring issues emerge that documentation rarely addresses adequately.

Over-Engineering Early

Don't build multi-stage YAML pipelines with matrix strategies, approval gates, and environment protections on day one. Start with a single-stage build-and-test pipeline. Add deployment stages only after your tests are reliable. Introduce approvals and environments when you actually have multiple deployment targets. Premature complexity kills adoption faster than any technical limitation.

Ignoring Service Connection Security

Service connections grant your pipelines access to Azure subscriptions, Docker registries, SSH servers, and third-party APIs. Always scope connections to specific resource groups or subscriptions rather than granting subscription-wide access. Use workload identity federation instead of service principal secrets where possible. Rotate credentials quarterly and audit connection usage monthly.

Neglecting Pipeline Maintenance

Pipelines are code and deserve the same attention as application code. Pin dependency versions explicitly. Update agent images regularly. Remove unused variables and deprecated tasks. Review pipeline performance metrics to identify slow steps. A pipeline that takes 25 minutes because nobody updated the base image in eighteen months wastes thousands of developer-hours annually.

Misunderstanding Billing

Microsoft-hosted agent minutes reset monthly and don't roll over. Parallel jobs determine how many pipelines run simultaneously; additional parallel jobs cost extra. Self-hosted agents are free but you pay for underlying compute. Understand your usage patterns before scaling up, especially if transitioning from a generous free tier elsewhere.

Getting Started with Azure DevOps: Complete Beginner Guide Next Steps

This Azure DevOps: Complete Beginner Guide has covered the foundational services, practical YAML configuration for PHP/Laravel projects, platform comparisons, self-hosted agent setup, work item management, and common pitfalls. The platform's depth rewards incremental adoption: start with Repos and Pipelines for a single project, validate the workflow works for your team, then expand to Boards and Artifacts as needs arise.

Your immediate next steps should be creating a free organization, importing an existing Git repository, writing a minimal YAML pipeline for your current project, and running your first successful build. Resist the urge to configure everything at once. Production-grade DevOps emerges from iteration, not upfront design.

If you need hands-on help configuring Azure Pipelines for your Laravel application, setting up self-hosted agents on Nepali infrastructure, or migrating from another CI/CD platform, reach out to discuss your specific requirements. I regularly help teams establish sustainable deployment workflows that survive staff turnover and business growth.

Frequently Asked Questions

Azure DevOps is a Microsoft platform providing integrated tools for planning, coding, testing, deploying, and monitoring applications. Its five core services are Azure Boards for work tracking, Azure Repos for Git version control, Azure Pipelines for CI/CD automation, Azure Test Plans for manual and exploratory testing, and Azure Artifacts for package management. In my experience managing deployments for Nepal-based clients, organizations typically adopt Azure Pipelines and Repos first while keeping project management in existing tools like Jira or Trello to reduce migration friction during initial setup phases.

Azure DevOps offers a free tier for up to five users with unlimited private repositories and one self-hosted agent. Additional Basic plan users cost approximately USD 6 per month (NPR 800). Stakeholder access remains free for unlimited users who only need board visibility. Microsoft-hosted agents include 1,800 free minutes monthly. For Nepali startups or legal-tech portals I have built, the free tier usually covers development teams under five people, making it viable before committing to paid tiers as team size or build minute requirements grow beyond initial project phases.

Yes, Azure DevOps is technology-agnostic and fully supports PHP, Laravel, Node.js, Python, Java, and other stacks. You can define YAML pipelines that run composer install, phpunit tests, npm builds, and Deployer releases on Ubuntu agents. On production Laravel applications I maintain, Azure Pipelines successfully runs PHP 8.3 linting, automated tests against MySQL service containers, and zero-downtime deployments via SSH to Linux servers. The ecosystem provides official tasks for Docker, Kubernetes, Terraform, and any CLI tool regardless of vendor origin or framework preference.

Both offer CI/CD but differ in integration depth and target audience. GitHub Actions excels for open-source and GitHub-centric workflows with marketplace actions. Azure DevOps provides tighter integration with Azure cloud services, enterprise RBAC, test plans, and artifact feeds within a single platform. For Nepal-based agencies managing multiple client projects across different clouds, Azure DevOps centralizes pipeline governance and audit trails better than GitHub Actions alone. However, if your code already lives on GitHub and you need simple deployments, GitHub Actions reduces context switching and eliminates separate account provisioning overhead entirely.

Create an azure-pipelines.yml file defining trigger branches, pool selection, and sequential jobs. Install PHP dependencies via composer install --no-dev, run PHPUnit tests, build frontend assets with npm ci && npm run build, then deploy using SSH or Deployer task. Store .env secrets in Azure Pipeline Variables marked as secret. In practice, I configure pipeline caching for Composer and npm directories to reduce build times from eight minutes to under three. Always validate deployment scripts locally before pushing to avoid breaking production environments during automated release cycles.

Yes, you can install Azure Pipelines Agent on Ubuntu 22.04 or 24.04 LTS servers to run builds on your own infrastructure. This avoids Microsoft-hosted minute costs and allows access to internal networks or databases without exposing them publicly. Installation requires downloading the agent package, configuring with a personal access token, and running as a systemd service. For Nepal Gift Card and similar projects, self-hosted agents reduced monthly costs by NPR 15,000 (~USD 112) while enabling direct database migrations during deployment without opening firewall ports to external Microsoft IP ranges.

Azure DevOps provides enterprise-grade security including SOC 2 compliance, encryption at rest and in transit, conditional access policies, and audit logging. Secrets should never be stored in repository files; use Azure Key Vault integration or encrypted pipeline variables instead. Enable multi-factor authentication and restrict permissions via least-privilege RBAC groups. For legal-tech portals like Court Marriage In Nepal, I enforce branch protection rules requiring pull request reviews before merging and disable direct pushes to main branches. Regularly rotate PATs and service connections to minimize credential exposure risks during automated deployments.

Absolutely. Define pipelines that lint theme code, run WP-CLI commands, execute PHPUnit tests for custom plugins, and deploy via rsync or Deployer to managed WordPress hosts. Use Azure Artifacts to store private plugin packages or share reusable deployment templates across multiple client sites. On WooCommerce projects like Petals Nepal, automated pipelines validate product import CSVs against schema before staging uploads, preventing malformed data from reaching production. Environment-specific wp-config.php values stay in pipeline variables rather than committed files, ensuring database credentials remain isolated per deployment target.

New users often hardcode secrets in YAML files, skip pipeline caching leading to slow builds, ignore service connection expiration causing sudden deployment failures, or grant excessive permissions to all team members. Another frequent issue is not setting retention policies, resulting in storage bloat from old artifacts and logs. Start with minimal permissions, enable diagnostic logging early, and test pipelines on feature branches before touching main. In my experience, spending two hours configuring proper variable groups and cache keys upfront prevents days of debugging failed releases later during critical production windows.

Export GitLab CI configuration and translate stages into Azure YAML pipeline syntax. Recreate variables as Azure Pipeline Variables or Variable Groups. Replace GitLab-specific keywords like image:, script:, and artifacts: with Azure equivalents using pool:, steps:, and publish:. Service connections replace GitLab CI/CD integrations for external systems. For sister sites sharing Deployer 7 pipelines, migration took approximately four hours per project including validation testing. Maintain parallel pipelines during transition period to verify identical behavior before decommissioning GitLab runners and updating DNS or webhook configurations pointing to old endpoints.

Yes, you can automate SEO audits within pipelines using tools like Lighthouse CI, Screaming Frog CLI, or custom scripts validating meta tags and structured data. Schedule nightly pipeline runs generating Core Web Vitals reports and alerting via email or Teams when thresholds degrade. For content-heavy sites, add pre-commit hooks checking canonical URLs and sitemap validity before merge. On legal information portals, automated schema markup validation catches missing FAQPage or BreadcrumbList structures before deployment. Treat SEO checks as quality gates equal to unit tests, blocking releases that regress performance or indexability metrics below defined baselines.

Use Azure Environments with approval gates, variable scoping, and resource tagging to isolate deployments. Define separate deployment jobs targeting each environment with unique service connections and credentials. Protect production with mandatory reviewer approvals and scheduled deployment windows. Store environment-specific configuration in scoped Variable Groups rather than duplicating YAML logic. For eCommerce platforms processing payments, staging environments mirror production infrastructure but connect to sandbox payment gateways like eSewa test mode. Never reuse production secrets across environments; rotate credentials independently and audit access logs regularly to detect unauthorized promotion attempts.

Run ephemeral database containers as pipeline services for integration tests, avoiding shared state between builds. Use migration tools like Laravel Migrate or Flyway applied idempotently during deployment rather than manual SQL execution. Seed test data via factories or fixtures inside pipeline jobs, never importing production dumps containing PII. Back up production databases before deployment using pre-deployment hooks with verified restore procedures. On transactional systems like booking platforms, wrap migrations in transactions with automatic rollback on failure. Validate schema changes against staging copy first to catch breaking alterations before they reach live customer-facing environments.

Enable system diagnostics by setting System.Debug=true variable to capture verbose logs. Check agent capabilities match pipeline demands like PHP version or Node LTS. Verify service connection health and PAT expiration dates. Review recent commits for unintended side effects or dependency conflicts. Download full logs even for partial failures since errors often appear earlier than visible red X markers. For intermittent timeouts, increase agent timeout settings or split long-running jobs. In production debugging scenarios, compare successful versus failed run hashes to isolate environmental drift versus code regression causing unexpected build breaks.

Yes, the free tier provides sufficient resources for individual practitioners managing multiple client projects. Solo developers benefit from automated backups via pipeline-triggered git pushes, consistent deployment processes reducing human error, and centralized documentation through wikis. Self-hosted agents on existing VPS eliminate recurring compute costs while maintaining professional delivery standards. For freelance legal-tech or eCommerce work, having reproducible pipelines demonstrates reliability to clients and accelerates onboarding new contractors later. Start simple with single-stage deployments before adding complexity; over-engineering pipelines for small sites creates maintenance burden exceeding actual value delivered.

Share this article

Quick Contact Options
Choose how you want to connect me: