Veriland ConsultingVeriland Consulting
  • Water Utilities (MaxWater) →

    • Water Utilities OverviewSpecialist modular platform for UK water utilities — meter-to-cash, asset lifecycle, SCADA, Ofwat compliance.
    • MaxWater Platform & ModulesSix independent modules — pick what you need, own everything we build.
    • Day in the LifeSix interactive stories showing how MaxWater transforms daily work across every department of a water utility.
    • Day in the Life: OperationsSee how MaxWater detects a failing pump at 2 AM and gets it fixed before anyone notices.
    • Day in the Life: ProcurementFrom emergency parts order to delivery — automated procurement across the supply chain.
    • Day in the Life: ComplianceOfwat reporting, DWI sampling, and audit preparation — all automated, all audit-ready.
    • Day in the Life: FinanceCapital project budgeting, AMP funding, cost allocation, and invoice matching.
    • Day in the Life: Project ManagementAMP obligation tracking, earned value, regulatory packages, and programme board reporting.
    • Day in the Life: CustomerMeter reading, billing, customer complaints, and leak detection — the customer-facing story.
  • Fixed‑Price Accelerator Packages →

    • Business Central AcceleratorA rapid, fixed‑price implementation of Business Central for mid-market businesses looking to modernise finance, invoicing, stock and reporting — without complexity.
    • CRM AcceleratorA fast, simple CRM setup built on Dynamics 365 Sales or Customer Service — helping mid-market teams get better pipeline visibility and consistent customer follow‑up.
    • F&O AcceleratorA streamlined version of Dynamics 365 Finance & Operations for mid-market organisations needing stronger financial control, supply chain visibility, and structured operations.
    • AI Agent AcceleratorDeploy 1–2 AI agents that automate repetitive tasks (like reconciliations, order processing, or support responses) with a fixed, predictable cost.
    • Power Platform AcceleratorReplace spreadsheets and manual approvals with automated workflows, low‑code apps, and digital forms built on Power Platform.
    • Migration Packs (ERP / CRM)Move from legacy systems (Sage, Xero, QuickBooks, Access, Salesforce, etc.) to modern Microsoft platforms with a predictable, fixed‑scope migration.
  • Finance, Stock & Operations →

    • Business Central (SMB ERP)A modern, all‑in‑one cloud ERP for mid-market organisations. Manage finance, sales, stock, projects, and operations in one simple system that grows with you.
    • Dynamics 365 Finance & Operations (F&O)Enterprise‑grade finance, supply chain, and operations for mid‑market organisations that need deeper control and automation across their business.
  • Products

    • MaxWAM – Work Asset Management (Mobile, Offline, AI)A mobile‑first, offline‑capable asset maintenance solution with work orders, inspections, compliance checks, and AI‑assisted technician workflows.
    • MaxBudget – AI‑Backed Budget Management for ProcurementGives finance teams real‑time budget visibility for all purchase requests — including committed spend that hasn't been paid yet — reducing overspending and surprises.
    • MaxPortal – Ready‑to‑Use Portal for D365 BC / F&OA configurable customer/vendor/employee portal for Business Central or F&O, enabling self‑service access to orders, invoices, tickets, documents, and status updates.
    • MaxWater – Modular Platform for Water UtilitiesSix independent modules for water utility operations: meter‑to‑cash, asset lifecycle, SCADA integration, field service, Ofwat reporting, and capital project governance.
  • Insights

    • BlogInsights, tips, and thought leadership on Dynamics 365, Azure, and AI for UK businesses.
    • Case StudiesSee how we've helped other businesses transform with Dynamics 365 and AI.
    • Guides & TutorialsFree video tutorials and step-by-step walkthroughs for Dynamics 365, Power Platform, and Azure.
  • Veriland Difference

    • How We WorkDiscover our agile, transparent approach to delivering successful projects.
    • Why Choose VerilandLearn what sets our expertise and partner-driven approach apart.
    • Delivery ExcellenceOur commitment to quality, on-time delivery, and continuous improvement.
    • Security & TrustHow we protect your data and ensure enterprise-grade security.
    • Our Microsoft PartnershipLeveraging our status as a trusted Microsoft Partner for your success.
  • Book discovery call
  • Contact sales
  • Contact support
Veriland Consulting

What We Do

  • Microsoft D365 F&O
  • Microsoft D365 CE
  • Microsoft D365 BC
  • Azure Ecosystem
  • Copilot for Business
  • AI Agents
  • Power Platform

Products

  • MaxWAM
  • MaxBudget
  • MaxPortal

Services

  • D365 as a Service
  • Team as a Service
  • Pay-As-You-Go Support

Insights

  • Case Studies

Company

  • About Us
  • Contact

Connect

  • Charter House, Charter Way
  • Macclesfield, SK10 2NG
  • 01625 569 777
  • enquiries@veriland.co.uk
Microsoft Cloud Partner Program
Privacy PolicyCookie PolicyTerms & ConditionsCustomer ComplaintsModern Slavery Statement
Company Reg: 08209902© 2026 Veriland Consulting. All rights reserved.
  1. Insights
  2. Guides

How to Build a Release Pipeline for Dynamics 365 Finance & Operations

  • Watch the Full Tutorial
  • Why a Proper Release Pipeline Matters
  • Prerequisites
  • Step 1: Rename the First Stage
  • Step 2: Link the Build Artifact
  • Step 3: Confirm the Artifact is Attached
  • Step 4: Open the Stage Tasks
  • Step 5: Add the Power Platform Build Tools Tasks
  • Step 6: Add Power Platform Tool Installer
  • Step 7: Add Power Platform WhoAmI
  • Step 8: Configure Power Platform Deploy Package
  • Step 9: Define the Environment URL Variable
  • Step 10: Add UAT and Production Stages with an Approval Gate
  • Saving and Running the Release
  • Next Steps
D365 F&OVideo Tutorial 10:0019 May 2026 10 min watch + 6 min read

Presented by Mahmut Bulbul · D365 Consultant, Veriland Consulting

Watch the Full Tutorial

~10 minutes hands-on walkthrough covering stage configuration, Power Platform Build Tools tasks, service principal authentication, multi-environment promotion, and pre-deployment approval gates

This guide picks up exactly where Part 1 left off. The build pipeline you stood up in the previous tutorial produces a single artifact — a TemplatePackage.dll inside a CloudDeployablePackage folder, published as a build drop. This second part takes that artifact and ships it: through a Unified Developer Environment, then UAT, then Production, with a manual approval gate before production.

By the end you will have a complete commit-to-production workflow for Finance and Operations on a unified environment. Every commit triggers a build, every build produces a deployable artifact, every artifact flows through three environments, and the path to production is gated.

If you have not yet built the upstream pipeline, start with our companion guide first: How to Build a Deployment Package for Dynamics 365 Finance & Operations. And if you have not yet provisioned a target environment, How to Set Up a Unified Development Environment (UDE) for Dynamics 365 Finance & Operations covers that end to end.

Why a Proper Release Pipeline Matters

A build pipeline gets you a deployable artifact. Without a release pipeline, someone still has to download that artifact, open the Power Platform Admin Center, click through a manual deploy, remember which environment they targeted, and write it all down somewhere. Multiply that by three environments and a couple of releases a week and the cracks show fast.

Repeatability

A release pipeline turns deployments into a process. The same artifact deploys the same way to every environment. No more remembering which package was tested, which version is in UAT, or whether the last manual deployment actually completed successfully. The pipeline knows.

Audit Trail

Every release leaves a record. Azure DevOps stores who clicked Create, what was approved by whom, when each stage started and finished, and what artifact version went where. When something breaks in production three weeks later, the audit trail tells you exactly what changed and when.

Segregation of Duties

Approval gates separate the people who build the code from the people who authorise its release. The developer who commits the change cannot also be the person who approves it for production. This single control eliminates a category of accidental and intentional production incidents.

Multi-Environment Promotion

A serious Finance and Operations programme runs at least three environments: a development tier, a UAT tier, and a production tier. The release pipeline is what connects them. Without it, each environment becomes an island, and version drift between them becomes a constant source of bugs.

Prerequisites

Prerequisites

  • A working build pipeline — an Azure DevOps project with a CI build pipeline that produces the TemplatePackage.dll artifact (covered in Part 1)
  • A target Power Platform environment — provisioned with the Finance and Operations unified developer environment template (see the UDE setup guide)
  • A Microsoft Entra application registration — with a client secret. The application must also exist as an application user inside the Power Platform environment, with the System Administrator security role granted
  • Power Platform Build Tools extension — installed in your Azure DevOps organisation. It is a free Microsoft-published extension available on the Visual Studio Marketplace
  • Service connection and pipeline permissions — permission in Azure DevOps to create service connections and release pipelines

Where the Service Connection sits: The Power Platform service connection lives in Azure DevOps under Project Settings → Pipelines → Service connections. Create it with the Power Platform connection type, using Service Principal with client secret authentication (Service Principal supports multi-factor authentication, username/password does not). The Server URL is the Dataverse environment URL — not the F&O URL — in the form https://environment-name.crm-region.dynamics.com.

Step 1: Rename the First Stage

Open the release pipeline editor and set the stage name

Navigate to Pipelines → Releases, and create a new pipeline using the Empty job template. The release pipeline editor opens with a single empty stage labelled Stage 1.

Click the stage card. The right-hand panel opens with editable properties. Change the Stage name field to Deploy to UDE. The label on the canvas updates immediately.

Azure DevOps release pipeline editor with the first stage renamed to Deploy to UDE in the right-hand properties panel.Figure 1: Stage renamed to Deploy to UDE in the release pipeline editor.

Step 2: Link the Build Artifact

Tell the release pipeline which build artifact to deploy

On the canvas, click Add next to Artifacts. The Add an artifact pane opens on the right.

Pick Build from the source type picker at the top. The Project field defaults to your current Azure DevOps project. In the Source (build pipeline) dropdown, select the CI build pipeline created in Part 1.

Leave Default version set to Latest, which means each release will pick up the most recent successful build. Leave the Source alias as the default value, Build.

The Source alias matters: It becomes part of the package file path in Step 8, so changing it later means updating that path too. Leave it as Build unless you have a strong reason to change it.

Azure DevOps Add an artifact pane with Build source type selected and the Part 1 build pipeline chosen as the source.Figure 2: Add an artifact pane with the Part 1 build pipeline selected.

Step 3: Confirm the Artifact is Attached

Verify the canvas shows the artifact linked to the stage

After clicking Add, the canvas shows the artifact linked to the stage. The build pipeline appears as the artifact source on the left, connected by a solid line to the Deploy to UDE stage on the right.

This visual tells you what to deploy and where it comes from. The release pipeline has its source defined; everything that follows is about defining what happens to that source once it reaches a stage.

Release pipeline canvas showing the build artifact connected to the Deploy to UDE stage with a solid line.Figure 3: Artifact attached to the Deploy to UDE stage.

Step 4: Open the Stage Tasks

Drill into the stage to configure its deployment tasks

Click the small link on the Deploy to UDE stage that reads 1 job, 0 task. This switches the editor view from the pipeline canvas to the tasks view, where you configure what runs inside the stage.

The tasks view shows a single Agent job with no tasks attached. The plus icon next to the Agent job is where new tasks are added.

Empty tasks view inside the Deploy to UDE stage with a single Agent job and no tasks attached.Figure 4: Empty tasks view inside the Deploy to UDE stage.

Step 5: Add the Power Platform Build Tools Tasks

Search for the three Power Platform tasks

Click the plus icon on the Agent job. The Add tasks panel opens on the right with a search field at the top. Type Power Platform into the search field. The matching tasks from the Power Platform Build Tools extension appear in the results.

We need three of them, added in this order:

  1. Power Platform Tool Installer — installs the Power Platform CLI on the agent
  2. Power Platform WhoAmI — connectivity check
  3. Power Platform Deploy Package — the task that actually performs the deployment
Add tasks panel in Azure DevOps showing Power Platform Build Tools tasks filtered by the Power Platform search term.Figure 5: Power Platform tasks listed in the Add tasks panel.

Step 6: Add Power Platform Tool Installer

Add the required first task in any Power Platform Build Tools pipeline

Click Add on the Power Platform Tool Installer task. It appears as the first item under the Agent job.

This task installs the Power Platform Command Line Interface and other supporting tools onto the build agent so the later tasks have something to call. It needs no configuration — adding it is the configuration.

Power Platform Tool Installer task added as the first item under the Agent job in the release pipeline.Figure 6: Tool Installer task added to the stage.

Always Tool Installer first. Without the Tool Installer at the top of the task list, every subsequent Power Platform Build Tools task fails in the first few seconds with a missing-tool error. It is the cheapest task to forget and the easiest to debug.

Step 7: Add Power Platform WhoAmI

Add a fast-failing connectivity check

Click Add on the Power Platform WhoAmI task. It joins the task list below the Tool Installer.

Configure the task:

  • Authentication type — set to Service Principal/client secret
  • Service connection — select the Power Platform service connection created in the prerequisites
  • Environment URL — leave on its default value of $(BuildTools.EnvironmentUrl). The variable is defined in Step 9.

The WhoAmI task calls the Web API of the target environment using your service connection credentials and asks who you are. If the answer comes back, the service connection works and the deployment can proceed. If it does not, the task fails fast — five seconds, with a clear error message — and the Deploy Package task never runs.

Power Platform WhoAmI task configured with Service Principal/client secret authentication and the Power Platform service connection selected.Figure 7: WhoAmI task configured with Service Principal authentication.

Catches failures early. Without WhoAmI, a broken service connection only surfaces twenty minutes into a real deployment when the Deploy Package task finally fails. WhoAmI surfaces it in five seconds. Always include it.

Step 8: Configure Power Platform Deploy Package

Add and configure the task that actually performs the deployment

Click Add on the Power Platform Deploy Package task. It joins the task list below WhoAmI.

Authentication type and Service connection match the WhoAmI task: Service Principal/client secret, pointing at the same service connection. Environment URL also defaults to $(BuildTools.EnvironmentUrl) and is left on default.

The critical field is Package File, which is the on-disk path to the unified package produced by the build pipeline:

$(System.DefaultWorkingDirectory)/Build/drop/CloudDeployablePackage/TemplatePackage.dll

Reading that path left to right:

  • $(System.DefaultWorkingDirectory) — the Azure DevOps predefined variable for the agent's working folder
  • Build — the source alias set when the artifact was linked in Step 2
  • drop — the artifact folder name published by the build pipeline
  • CloudDeployablePackage — the folder containing the Power Platform unified package format introduced for unified environment deployments
  • TemplatePackage.dll — the unified package manifest

Maximum wait time is set to 60 minutes for this demo — this is the polling timeout on the Deploy Package task itself. A Finance and Operations unified package deployment typically takes over an hour, so for production work set the agent job timeout — a separate setting at the job level — to at least 180 minutes, and use a self-hosted Windows agent rather than a Microsoft-hosted one.

Leave Output log to console checked. It pipes the deployment logs into the Azure DevOps run output, which is the only practical way to debug a failed deployment.

Power Platform Deploy Package task fully configured with Service Principal authentication, the Package File path, and a 60 minute maximum wait time.Figure 8: Deploy Package task fully configured.

If you change the Source alias: The Build segment in the Package File path comes from the artifact's Source alias. If you change the alias to anything else, this whole path needs updating to match. The same applies if your build pipeline publishes the artifact under a different name than drop.

Step 9: Define the Environment URL Variable

Set one variable that chains automatically through every Power Platform task

Switch to the Variables tab at the top of the pipeline editor. Click Add and enter the variable:

  • Name — BuildTools.EnvironmentUrl
  • Value — the Power Platform environment URL in the form https://environment-name.crm-region.dynamics.com
  • Scope — Release

The name matters. BuildTools.EnvironmentUrl is the convention every task in the Power Platform Build Tools extension expects. When set, it is automatically consumed by subsequent tasks as their default target environment. This is why we left Environment URL on its default in Steps 7 and 8 — the tasks read this variable.

Scope is set to Release, which means the value applies across every stage in the pipeline. In a real multi-environment setup, each stage would need a different environment URL, which is handled either by giving each stage its own service connection, or by overriding the variable at stage scope rather than release scope.

Variables tab in the Azure DevOps release pipeline editor showing the BuildTools.EnvironmentUrl variable defined at Release scope.Figure 9: BuildTools.EnvironmentUrl variable defined at release scope.

Step 10: Add UAT and Production Stages with an Approval Gate

Clone the UDE stage twice and add a pre-deployment approval before production

Switch back to the Pipeline tab. The canvas shows a single stage, Deploy to UDE, attached to the artifact.

Hover over the Deploy to UDE stage card. A menu icon appears at the top of the card. Click it and pick Clone. A duplicate stage appears, named something like Copy of Deploy to UDE. Click the new stage and rename it to Deploy to UAT. Clone the stage again to create a third copy and rename that one to Deploy to Production.

You now have three stages, each running the same three Power Platform Build Tools tasks — Tool Installer, WhoAmI, Deploy Package. In a real multi-environment configuration, each stage would point at a different target environment by overriding the service connection or the environment URL variable at the stage level.

To add the approval gate, click the small user icon on the left edge of the Deploy to Production stage. The Pre-deployment conditions pane opens on the right.

Two flavours of approval exist for classic release pipelines:

  • Pre-deployment — pauses the release before the stage runs (use this for production gates)
  • Post-deployment — pauses after the stage runs (use this for stage sign-off)

Enable the Pre-deployment approvals toggle. In the Approvers field, add the user or group responsible for approving production deployments. Set Timeout to 30 days — if approval is not given within that window, the release is rejected automatically.

Leave Gates disabled. Gates are an automated alternative to manual approvals, where the pipeline queries an external system like Azure Monitor or a custom API to decide whether to proceed. Useful in mature pipelines, but out of scope here.

Three-stage release pipeline canvas with Deploy to UDE, Deploy to UAT, and Deploy to Production stages and a pre-deployment approval configured on the production stage.Figure 10: Three-stage pipeline with pre-deployment approval configured for the Production stage.

Production should have at least two approvers. For this demo we use a single approver. In a real production setup, configure at least two and tick the policy that reads The user requesting a release or deployment should not approve it. That enforces segregation of duties — the person who clicked Create release cannot also be the one who clicks Approve.

Saving and Running the Release

Click Save at the top right and give the pipeline a meaningful name. Click Create release to kick off a deployment. The dialog shows the artifact version that will be deployed and lets you pick automatic or manual trigger.

After Create, the release summary view shows the visual flow. The Deploy to UDE stage starts immediately. Inside the stage you can watch each task execute in order: Tool Installer puts the tools on the agent, WhoAmI authenticates, Deploy Package uploads and installs the unified package.

When the UDE stage completes successfully, the UAT stage starts automatically. When UAT completes, the release pauses at the Production stage with a notification that approval is required. The approver receives an email and an in-app notification. Once approved, the Production stage runs and the package is deployed to the production environment.

Expect over an hour per stage. A typical Finance and Operations unified package deployment takes over an hour per stage. Database synchronisation or significant model changes can extend that significantly. Plan your release windows — and your agent timeouts — accordingly.

Next Steps

With a working three-stage release pipeline in place, you have a complete commit-to-production workflow for D365 F&O on a unified environment. A few directions to take it next:

Split the environment URL per stage — Override BuildTools.EnvironmentUrl at stage scope so UAT and Production each target a different environment. Combined with separate service connections per environment, this is the safe pattern for any real multi-environment programme.

Lock down service connections with environment-specific RBAC — Each service principal should only have the rights it needs in its target environment. The UDE service principal does not need write access to Production.

Add automated quality gates — Replace or supplement the manual approval with automated gates that query Azure Monitor, Application Insights, or a custom API. Pipelines that promote themselves based on telemetry instead of clicks scale better.

Tighten the agent strategy for Production — Self-hosted Windows agents with longer job timeouts handle long-running F&O deployments more reliably than Microsoft-hosted agents. Plan capacity around release windows.

Subscribe to the Veriland UDE Tutorial Series — This guide is Part 2 of our build-and-release series. Upcoming tutorials cover variable groups for multi-environment promotion, source-controlled YAML pipelines, and zero-downtime promotion patterns from UDE to production.

Dynamics 365 F&OAzure DevOpsRelease PipelinesPower Platform Build ToolsALMUDEService PrincipalApprovals

Need Help Setting Up Your D365 F&O Build and Release Pipelines?

Our ex-Microsoft consultants configure end-to-end ALM pipelines, automate unified package deployments, and get your D365 F&O team shipping X++ code with confidence.

Book a Discovery CallView Managed Services
Or call us directly: 01625 569 777