<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>CI/CD | The .NET Blog</title><link>https://thedotnetblog.com/tags/ci/cd/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>en</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Wed, 15 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/tags/ci/cd/index.xml" rel="self" type="application/rss+xml"/><item><title>Stop Treating Databases as Special Snowflakes: Azure DevOps + SQL Projects Done Right</title><link>https://thedotnetblog.com/news/emiliano-montesdeoca/azure-devops-sql-projects-ci-cd-fundamentals/</link><pubDate>Wed, 15 Jul 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/news/emiliano-montesdeoca/azure-devops-sql-projects-ci-cd-fundamentals/</guid><description>The SQL projects pipeline model in Azure DevOps proves database delivery can be repeatable, secure, and testable when teams adopt code-first CI/CD discipline.</description><content:encoded>&lt;p&gt;A lot of teams claim they do DevOps, then deploy database changes manually from someone’s laptop. That contradiction is exactly what this Azure SQL guidance fixes. SQL projects plus Azure DevOps pipelines make database delivery deterministic, auditable, and secure enough for real production workflows.&lt;/p&gt;
&lt;p&gt;Original source: &lt;a href="https://devblogs.microsoft.com/azure-sql/fundamentals-of-azure-devops-with-sql-projects/"&gt;https://devblogs.microsoft.com/azure-sql/fundamentals-of-azure-devops-with-sql-projects/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The strongest part of the approach is not the YAML syntax, it is the &lt;strong&gt;discipline sequence&lt;/strong&gt;: build first, publish second, and secure the deployment path with least privilege and passwordless identity. Building a &lt;code&gt;.sqlproj&lt;/code&gt; with &lt;code&gt;dotnet build&lt;/code&gt; validates target-platform compatibility early and produces a DACPAC artifact that can be promoted through environments.&lt;/p&gt;
&lt;p&gt;My view is straightforward: &lt;strong&gt;if your schema is not built in CI, your database quality process is mostly hope&lt;/strong&gt;. Local success in SSMS or VS Code is not a release guarantee.&lt;/p&gt;
&lt;p&gt;The deployment design is also refreshingly &lt;strong&gt;pragmatic&lt;/strong&gt;. Use service connections tied to Entra identities, grant scoped database roles for schema and data comparison, and automate temporary firewall opening for runner IPs with guaranteed cleanup. This is the kind of operational hygiene teams skip until a breach review forces them to revisit everything.&lt;/p&gt;
&lt;h3 id="practical-recommendations-to-apply-immediately"&gt;Practical recommendations to apply immediately&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Split build and deploy pipelines.&lt;/strong&gt; Build should run on branch changes and fail fast. Deploy should be environment-specific and policy-gated.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Store target connection strings&lt;/strong&gt; and infrastructure metadata in secured pipeline variables, and rotate governance reviews for role assignments regularly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep SqlPackage versions explicit and pinned in CI&lt;/strong&gt; to avoid surprise behavior shifts.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Do not over-privilege early.&lt;/strong&gt; Starting with &lt;code&gt;db_ddladmin&lt;/code&gt;, &lt;code&gt;db_datareader&lt;/code&gt;, and &lt;code&gt;db_datawriter&lt;/code&gt; is a better baseline than handing &lt;code&gt;db_owner&lt;/code&gt; to every pipeline principal &amp;ldquo;just to make it work.&amp;rdquo; Escalate only when a concrete deployment requirement proves it is necessary.&lt;/p&gt;
&lt;p&gt;Another strong takeaway is &lt;strong&gt;portability&lt;/strong&gt;. Because SQL projects run on the .NET SDK toolchain, this pattern is not Azure DevOps-only. The same fundamentals translate to GitHub Actions or other orchestrators, which makes this guidance strategic, not platform-locked.&lt;/p&gt;
&lt;h2 id="the-bottom-line"&gt;The bottom line&lt;/h2&gt;
&lt;p&gt;If your organization still treats schema delivery as a special process outside app CI/CD, this is your migration blueprint. You do not need heroic platform engineering. You need &lt;strong&gt;consistency, identity-first security&lt;/strong&gt;, and a willingness to stop shipping database changes through ad hoc privilege paths.&lt;/p&gt;
&lt;p&gt;The teams that do this will ship faster with fewer rollback events. The teams that delay will keep paying the hidden tax of manual data-plane deployments.&lt;/p&gt;</content:encoded></item></channel></rss>