Ist SSIS der letzte Teil Ihres Stacks, der sich CI/CD verwehrt?
Eine .dtsx Datei ist XML, das sich schlecht vergleichen und noch schlechter mergen lässt, arbeiten zwei Engineers an einem Package, endet das im Neuaufbau. Umgebungen leben in von Hand gepflegten SSISDB-Variablen-Mappings. Moderne DevOps-Praxis stößt beim SSIS-Projekt an ihre Grenzen. Releases sollten aus einem Modell generiert werden, pro Umgebung, mit dem Rollback inklusive.
Kommt Ihnen das bekannt vor?
- Zwei Entwickler haben dasselbe Package auf zwei Branches geändert, und der Merge wurde gelöst, indem eines genommen und die Arbeit des anderen neu gemacht wurde.
- Dev, Test und Prod unterscheiden sich durch SSISDB-Umgebungsvariablen, die jemand vor jedem Release von Hand aktualisiert.
- Die Release-Pipeline deployt die .ispac, und ob es funktioniert hat, zeigt sich, wenn der erste Job läuft.
- Für einen Rollback suchen Sie die vorherige .ispac heraus und hoffen, dass die Umgebungs-Mappings noch dazu passen.
Modernes DevOps erreicht den Großteil einer Microsoft Datenplattform und endet am SSIS-Projekt. Die Packages liegen in Git, die Release-Pipeline deployt die .ispac, und alles zwischen diesen beiden Tatsachen wird von Hand gemacht: XML mergen, Umgebungsvariablen mappen und beim ersten eingeplanten Lauf herausfinden, ob das Release funktioniert hat.
Warum SSIS sich CI/CD widersetzt
- Ein Package ist XML, das sich schlecht vergleichen lässt. Layout-Koordinaten, GUIDs und Logik stehen in derselben Datei, eine kleine Änderung sieht also wie eine große aus, und zwei Änderungen an einem Package mergen selten sicher.
- Umgebungen sind Mappings. Dev, Test und Prod sind SSISDB-Umgebungsvariablen und Parameter Mappings, von Hand gepflegt und vor jedem Release aktualisiert.
- Ein Release ist ein Dateipaket, kein Diff. Die .ispac zu deployen ersetzt das Projekt. Was sich geändert hat, ist nicht Teil dessen, was deployt wurde, und Package XML ist nichts, was Review-Tooling in einem Pull-Request prüfen kann, die Validierung wartet also auf den ersten Lauf.
- Rollback ist die vorherige Datei. Für einen Rollback deployen Sie die letzte .ispac neu und zu hoffen, dass ihre Mappings noch passen. Was das Release im Warehouse bereits geändert hat, ist nicht Teil davon.
Das ist kein Designfehler von SSIS. Es wurde entworfen, bevor Continuous Delivery die Norm war, und das merkt man.
Wo Release-Management hingehört
- In den Generator. Wenn das Warehouse aus einem Modell kommt, ist ein Release der Unterschied zwischen zwei Zuständen dieses Modells, und das Tool weiß, wovon jeder Unterschied abhängt.
- Mit dem Rollback inklusive. Ein generiertes Release weiß, was es geändert hat, seine Umkehrung existiert also, bevor es läuft.
- Die Fachlogik versionieren, nicht das XML. Git und Gitflow auf dem Modell liefern ein Diff, das sich als Änderung am Warehouse liest, nicht an einem Dateilayout.
Was sich mit Datavault Builder ändert
Datavault Builder generiert versionierte Deployment- und Rollback-Skripte pro Umgebung aus dem Modell, mit Git und Gitflow-Unterstützung eingebaut. Ein Release beginnt als Vergleich zweier Zustände, Ihre lokale Umgebung, ein Zustand in Git, eine andere Live-Umgebung, eine ZIP-Datei oder ein Ordner, und Sie wählen, welche Unterschiede deployt werden.
- Das Merge-Problem verschwindet. Zwei Engineers ändern das Modell auf zwei Branches und mergen ein Modell, keine Package-Datei. Die Loads werden aus dem Ergebnis neu generiert.
- Umgebungen sind eine Konfiguration, keine Mapping-Tabelle. Verbindungsdetails pro Umgebung werden einmal gehalten; das Release für Test oder Prod wird mit ihnen angewendet generiert.
- Jedes Release trägt seinen Rollback. Und die Modellversion, zu der es gehört.
- Unterschiede werden vor dem Deployment in die nächste Umgebung verglichen. Was Prod gleich erhält, ist die Liste der Unterschiede zwischen seinem Zustand und Ihrem. Wählen Sie ein Datenprodukt, und das Tool schlägt den Hub, den Satelliten, die Staging-Tabelle und die Quelle vor, die es braucht.
- Ihr Pipeline-Tooling bleibt. Azure DevOps oder GitHub Actions führen das generierte Paket aus. Sie müssen SSIS nicht mehr verstehen.
Was zu entscheiden ist
Prüfen Sie die Deployment-Logs des letzten Quartals und zählen Sie zwei Dinge: die Releases, die eine manuelle Änderung am Umgebungs-Mapping brauchten, und die Package-Merges, die gelöst wurden, indem jemandes Arbeit neu gemacht wurde. Das ist die Wartung, die ein generiertes Release beseitigt.
Erleben Sie es live mit Ihren eigenen Datenquellen
Buchen Sie eine kostenlose Demo und bringen Sie den Connector mit, der Sie am meisten kostet, an Geld oder an Zeit.
In drei Schritten zu einer Pipeline, die Sie kontrollieren
-
Das Modell vom Release trennen
Die Warehouse Struktur ist ein Modell. Ein Release ist ein generiertes Skript für eine Umgebung, kein von Hand gepflegtes Projekt.
-
Das Release generieren
Datavault Builder vergleicht zwei Zustände, wählt die zu deployenden Unterschiede aus und schlägt die Abhängigkeiten vor, die jeder braucht. Der Rollback kommt mit.
-
Vergleichen, bevor Sie befördern
Zwei beliebige Zustände lassen sich vergleichen: Ihre lokale Umgebung, ein Zustand in Git, eine andere Live-Umgebung, eine ZIP-Datei oder ein Ordner.
Wie Datavault Builder die Reibungsverluste in der Ingestion beseitigt
-
Ingestion ist eingebaut
Batch-, Delta- und CDC-Ladevorgänge aus Datenbanken, Dateien, REST-APIs, NoSQL und Python-Quellen, mit Streams wie Kafka, die als Micro-Batches ankommen. Dieselbe Plattform, die das Warehouse generiert, keine zweite Rechnung.
-
Ihr Schema, nicht das des Anbieters
Quelltabellen werden auf ein Data-Vault-2.0-Modell gemappt, das Sie entworfen haben. Eine neue Spalte oder eine umbenannte Tabelle ändert ein Mapping, keine Kette von Skripten nach dem Load.
-
Nur Deltas bewegen sich
Hubs, Links und Satelliten laden, was sich geändert hat. Vollständige Ladevorgänge bleiben im Staging, statt jede Nacht weiter unten neu verarbeitet zu werden.
-
Historie wird von Haus aus behalten
Jede Änderung wird so festgehalten, wie sie eintrifft. Historien- und Stichtagsabfragen funktionieren also auch dort, wo die Quelle ihre eigenen Zeilen überschreibt.
-
Code, den Sie nie von Hand schreiben
Laden, Historisierung und Lineage werden in Echtzeit aus dem Modell generiert und laufen nativ auf Snowflake, Databricks, BigQuery, SQL Server, Fabric, Oracle oder PostgreSQL.
-
Eine Plattform, bis zu neun Tools weniger
Modellierung, ETL, CI/CD, Dokumentation und Lineage an einem Ort. Das ist es, was 14,7 Minuten von der Anforderung bis zur Produktion möglich macht.
Sprechen Sie mit unserem Experten
Zwanzig Minuten mit unserem Sales Director und eine ehrliche Antwort, ob das zu Ihrem Stack passt.
Matt Collett
Sales Director
Perfekt, wählen Sie einen passenden Termin:
Weitere Probleme in dieser Serie
-
SSIS-Schwachstellen: Warum das Verlagern der Packages in die Cloud nur die Altlasten mitnimmt
SSIS-Altlasten haben drei Probleme, die eine Cloud-VM nicht löst: ein Package pro Tabelle, das niemand öffnen will, Releases, die DevOps nicht erreicht, und ein Design, das bei SQL Server aufhört. Die Azure-SSIS Integration Runtime trägt alle drei unverändert in die Cloud. Ein Modell, das das Warehouse generiert, macht sie stattdessen überflüssig.
-
Stößt SSIS dort an seine Grenzen, wo Ihr Cloud-Warehouse beginnt?
SSIS wurde gebaut, um Daten zwischen On-Premises SQL Server Instanzen zu bewegen. Wenn das Warehouse nach Fabric, Snowflake, Databricks oder BigQuery umzieht, sind die Optionen, die Packages auf eine Azure-SSIS Integration Runtime zu heben, Drittanbieter-Connectoren zu kaufen oder neu zu schreiben. Ein Modell, das nativ für die neue Plattform generiert, ist die vierte Option, und die einzige, die Ihre Altlasten nicht mitschleppt.
-
Gibt es mehr SSIS-Packages als Entwickler, die sie noch durchschauen?
Hunderte .dtsx-Packages, eines pro Tabelle, jedes in Visual Studio gebaut von dem, der gerade das Ticket hatte, mit Control-Flows und Data-Flows, die sich nur einzeln öffnen lassen. Um eine Spalte zu ergänzen, müssen Sie die Packages eines nach dem anderen öffnen. Die Lösung ist kein Package-Template, sondern ein Modell, das die Loads generiert, nativ auf SQL Server, Azure SQL oder Fabric.
Fragen und Antworten
- Doch. Das Problem ist, was versioniert wird: Eine .dtsx ist XML mit Layout und GUIDs, die in die Logik gemischt sind, ein Diff zeigt also Rauschen, und ein Merge zweier Änderungen an einem Package ist selten sicher. Versionskontrolle eines Modells versioniert die Absicht; der Code wird neu generiert.
- Generierte, umgebungsbewusste Deployment-Skripte. Verbindungsdetails pro Umgebung werden einmal gehalten, und das Release für Test oder Prod wird aus demselben Modell erzeugt, mit diesen Werten angewendet und dem Rollback inklusive.
- Ja. Azure DevOps oder GitHub Actions führen das generierte Paket aus. Was verschwindet, ist der .ispac-Build-Schritt und die von Hand gepflegten Umgebungsvariablen-Mappings.