DevOps 8 min read

Zero-Downtime Deployment Pipelines for Mixed Linux and Windows Workloads

Automating deployment pipelines from staging to production with blue-green rollouts, health checks, and config management across hybrid OS environments.

Mohammad Rizky Prawira portrait
Mohammad Rizky Prawira

In complex enterprise environments—such as government ministries and public-sector data centers—infrastructure rarely consists of a single operating system. Legacy workloads and Active Directory services often run on Windows Server with IIS, while modern microservices run on Ubuntu Linux.

Maintaining zero-downtime deployments across this hybrid landscape requires automated CI/CD pipelines, strict staging validation, and automated rollback triggers.

The Staging-to-Production Pipeline Architecture

[ Git Push / Tag ]
        |
        v
[ CI: Build & Test ]  --> [ Artifact Packaging (Docker / NuGet / Binaries) ]
                                      |
                                      v
                             [ Staging Deployment ]
                                      |
                              (Automated Smoke Tests)
                                      |
                                      v
                             [ Production Deployment ]
                             (Blue/Green Swapping)

1. Zero-Downtime Rollouts on Linux (Ubuntu)

On Linux servers running containerized services or systemd daemons behind Nginx reverse proxies, we implement graceful reload signals and upstream socket switching:

# Graceful zero-downtime service reload on Linux
systemctl reload nginx
docker-compose -f docker-compose.prod.yml up -d --no-deps --build web_service

2. Zero-Downtime Deployments on Windows Server (IIS)

For Windows Server hosting .NET applications on IIS, we utilize the Application Initialization module and App Offline locks:

# PowerShell script to deploy to staging slot and warm up before swap
Import-Module WebAdministration
$siteName = "MinisterialPortal_Prod"
$appPool = "MinisterialAppPool"

# Recycle worker process with proactive warm-up
Restart-WebAppPool -Name $appPool
Start-Sleep -Seconds 5

# Verify health endpoint before switching traffic
$response = Invoke-WebRequest -Uri "http://localhost/healthz" -UseBasicParsing
if ($response.StatusCode -eq 200) {
    Write-Host "Service warm-up succeeded. Traffic routing active."
} else {
    Write-Error "Health check failed. Aborting rollout."
}

[!WARNING] Never deploy directly to live production without an automated health verification gate. Automated smoke tests in staging catch 95% of configuration regressions.

Conclusion

By standardizing deployment scripts across Linux and Windows, introducing automated health checks, and utilizing blue-green traffic switching, hybrid enterprise environments can achieve 99.99% availability without manual midnight deployments.

Related & Recommended Guides

Continue exploring related systems architectures and engineering field notes.