Is SSIS the One Part of Your Stack That Still Cannot Do CI/CD?

A .dtsx file is XML that diffs badly and merges worse, so two engineers on one package end in a rebuild. Environments live in SSISDB variable mappings maintained by hand. Modern DevOps stops at the SSIS project. Releases should be generated from a model, per environment, with the rollback included.

Is SSIS the One Part of Your Stack That Still Cannot Do CI/CD?

The data warehouse automation solution trusted by data teams across industries

Does this sound familiar?

  • Two developers changed the same package on two branches, and the merge was resolved by taking one and redoing the other's work.
  • Dev, Test and Prod differ by SSISDB environment variables that someone updates by hand before each release.
  • The release pipeline deploys the .ispac, and whether it worked is found out when the first job runs.
  • Rolling back means finding the previous .ispac and hoping the environment mappings still match it.

Modern DevOps reaches most of a Microsoft data platform and stops at the SSIS project. The packages are in Git, the release pipeline deploys the .ispac, and everything between those two facts is done by hand: merging XML, mapping environment variables, and finding out on the first scheduled run whether the release worked.

Why SSIS resists CI/CD

  • A package is XML that diffs badly. Layout coordinates, GUIDs and logic are in the same file, so a small change looks like a large one and two changes to one package rarely merge safely.
  • Environments are mappings. Dev, Test and Prod are SSISDB environment variables and parameter mappings, maintained by hand and updated before each release.
  • The release is a file, not a diff. Deploying the .ispac replaces the project. What changed is not part of what was deployed, and package XML is not something review tooling can check in a pull request, so validation waits for the first run.
  • Rollback is the previous file. Going back means redeploying the last .ispac and hoping its mappings still match. Whatever the release already changed in the warehouse is not part of it.

None of this is an SSIS fault. It was designed before continuous delivery was the norm, and it shows.

Where release management belongs

  • In the generator. If the warehouse comes from a model, a release is the difference between two states of that model, and the tool knows what each difference depends on.
  • With the rollback included. A generated release knows what it changed, so its reverse exists before it runs.
  • Versioning the intent, not the XML. Git and Gitflow on the model give a diff that reads as a change to the warehouse, not to a file layout.

What changes with Datavault Builder

Datavault Builder generates versioned deployment and rollback scripts per environment from the model, with Git and Gitflow support built in. A release starts as a comparison of two states, your local environment, a state in Git, another live environment, a zip file or a folder, and you choose which differences to deploy.

  • The merge problem goes away. Two engineers change the model on two branches and merge a model, not a package file. The loads are regenerated from the result.
  • Environments are a setting, not a mapping table. Per environment connection details are held once; the release for Test or Prod is generated with them applied.
  • Every release carries its rollback. And the model version it belongs to.
  • Differences are compared before promotion. What Prod is about to receive is the list of differences between its state and yours. Select a data product and the tool proposes the hub, satellite, staging table and source it needs.
  • Your pipeline tooling stays. Azure DevOps or GitHub Actions run the generated package. They no longer need to understand SSIS.

What to decide

Audit the deployment logs for the last quarter and count two things: the releases that needed a manual environment mapping change, and the package merges that were resolved by redoing someone’s work. That is the maintenance a generated release removes.

See It Running on One of Your Sources

Book a free demo and bring the connector that costs you the most, in money or in time.

Three Steps to a Pipeline You Control

  1. Separate the model from the release

    The warehouse structure is a model. A release is a generated script for one environment, not a hand-kept project.

  2. Generate the release

    Datavault Builder compares two states, picks the differences to deploy, and proposes the dependencies each one needs. Rollback comes with it.

  3. Compare before you promote

    Any two states can be compared: your local environment, a state in Git, another live environment, a zip file or a folder.

How Datavault Builder Takes the Friction Out of Ingestion

  • Ingestion is built in

    Batch, delta and CDC loads from databases, files, REST APIs, NoSQL and Python sources, with streams such as Kafka arriving as micro-batches. Same platform that generates the warehouse, no second invoice.

  • Your schema, not the vendor's

    Source tables are mapped to a Data Vault 2.0 model you designed. A new column or a renamed table changes a mapping, not a chain of post-load scripts.

  • Only deltas move

    Hubs, links and satellites load what changed. Full reloads stay in staging instead of being reprocessed downstream every night.

  • History is kept by design

    Every change is retained as it arrives, so as-was reporting works even where the source overwrites its own rows.

  • Code you never hand-write

    Loading, historization and lineage are generated from the model in real time and run natively on Snowflake, Databricks, BigQuery, SQL Server, Fabric, Oracle or PostgreSQL.

  • One platform, up to nine tools fewer

    Modeling, ETL, CI/CD, documentation and lineage in one place. That is what makes 14.7 minutes from requirement to production possible.

Recognized by BARC in The Data Fabric Survey 26

Meet Our Expert

Twenty minutes with our Sales Director, and an honest answer on whether this fits your stack.

Matt Collett

Matt Collett

Sales Director

What are you looking for?

By submitting you agree to our Privacy Policy.

Other Problems This Series Covers

  • Lift and shift

    SSIS Pain Points: Why Lifting Packages to the Cloud Moves the Debt, Not the Problem

    SSIS estates have three problems that a cloud VM does not fix: a package per table nobody wants to open, releases that DevOps cannot reach, and a design that stops at SQL Server. Azure-SSIS Integration Runtime carries all three to Azure intact. A model that generates the warehouse retires them instead.

  • Beyond SQL Server

    Does SSIS Stop Where Your Cloud Warehouse Starts?

    SSIS was built to move data between on premises SQL Server instances. When the warehouse moves to Fabric, Snowflake, Databricks or BigQuery, the choices are lifting the packages onto an Azure-SSIS Integration Runtime, buying third party connectors, or rewriting. A model that generates natively for the new platform is the fourth choice, and the only one that does not carry the packages along.

  • Package debt

    Do Your SSIS Packages Outnumber the People Who Understand Them?

    Hundreds of .dtsx packages, one per table, each built in Visual Studio by whoever had the ticket, with control flows and data flows that only open one at a time. Adding a column means opening the packages one by one. The fix is not a package template. It is a model that generates the loads, natively on SQL Server, Azure SQL or Fabric.

Questions and Answers