Part 1: Automating Azure Function App with Durable Functions and CI/CD Pipelines
In our cloud infrastructure, we have designed and implemented an Azure Function App that utilizes Azure Durable Functions to automate a checklist validation process. The function operates in a serverless environment, ensuring scalability, reliability, and efficiency.
To achieve this, we:
–Use Durable Functions for long-running workflows and parallel execution.
–Implement a timer-triggered function that regularly checks for missing documents.
–Deploy using Azure DevOps CI/CD Pipelines for automated deployments and testing.
This post covers Azure Function App architecture, Durable Functions, and our CI/CD pipeline implementation.
🔹 Azure Durable Functions: Why We Chose Them
Our workflow involves:
–Retrieving all checklists from SharePoint.
– Processing them in parallel to check for missing documents.
– Updating the checklist if documents are missing.
We use Azure Durable Functions because: Stateful Execution – Remembers past executions. Parallel Execution – Checks multiple users simultaneously. Resilient and Reliable – Handles failures gracefully. Scales Automatically – No need to manage servers.
How Our Durable Function Works
Timer-Triggered Function: Initiates the Orchestrator
This function triggers every 5 minutes, calling the orchestrator.

What It Does:
- Runs every 5 minutes using a TimerTrigger.
- Calls ProcessCheckListsOrchestrator (Orchestrator function).
- Ensures checklist processing happens automatically.
Orchestrator Function: Manages Workflow
The orchestrator is the brain of the workflow, managing execution and handling parallel processing.

What It Does:
- Calls GetAllUserCheckListsActivity to fetch checklists.
- Executes multiple ProcessChecklistItemActivity functions in parallel.
- Uses Task.WhenAll() to improve performance.
- Logs errors and ensures fault tolerance.
Activity Functions: Processing Individual Checklist Items
Each activity function is responsible for a specific task.
📌 Get All Checklists

Retrieves all checklists from SharePoint.
📌 Process Individual Checklist Items

What It Does:
- Retrieves missing documents for a user.
- Updates the SharePoint checklist accordingly.
- Handles errors and retries if needed.
PART 2: Automating Deployments with Azure DevOps CI/CD Pipelines
To ensure seamless deployment and updates, we use Azure DevOps Pipelines.
📌 CI/CD Pipeline Breakdown
–Build Stage – Runs dotnet build and dotnet test.
–Deploy Stage – Uses Bicep templates (main.bicep) for infrastructure-as-code deployment.
🔹 Azure DevOps Pipeline (azure-pipelines.yml)
We use Azure CLI and Bicep for automated Azure Function deployment.


main.bicep

By leveraging Azure Durable Functions, we transformed a manual checklist validation process into an automated, scalable, and highly resilient system.
With Azure DevOps CI/CD, we now have a fully automated deployment pipeline, ensuring high reliability and faster releases. 💡 Next, we will discuss a new business logic, SharePoint interactions, and integrations in a dedicated post. Stay tuned!

