Linux will require permissions to run the build script:
chmod +x build.sh
- Build agent requires:
- Windows OS
- PowerShell (current implementation)
- DevOps extensions:
Each target SSIS server requires:
- Add build agent account as SQL login
- Create user in
SSISDB
for build agent login - Add the build agent user to the following roles in
SSISDB
:ssis_admin
db_datareader
- Create user in
msdb
for build agent login - Add the build agent user to the following roles in
msdb
:db_datareader
SqlAgentUserRole
- Create proxy user account on the target database
- Add a proxy user account as SQL login
- Grant the proxy user the required access permissions on the target database
pip install --requirement requirements/build.txt
rm -rf dist/
./build.sh
This will create dist/sql-deployment-tools.exe
.
- (optional?) Create SSIS Folder
- Deploy
*.ispac
artifact to SSISDB (using SSIS DevOps Tools extension)- This can include the creation of the SSIS folder/project
- Create SSIS environment
- Create SSIS environment reference (links the folder with the SSIS environment)
- Remove/reset all SSIS environment variables
- For each project parameter:
- Create/set variable
- Mark variable as sensitive (optional)
- Set reference to SSIS folder/project
- Create SQL Agent job
- Create job step to execute package
- Create job schedule(s)
- TODO: Create agent operator (optional)
- TODO: Create notification (optional)
To be placed in the SSIS package folder and included in the CI build.
Optionally, the sql-deployment-tools
executable can be downloaded
and used to validate this config file in the pipeline.
project = "My Integration Services Project"
folder = "def"
environment = "default"
[[parameters]]
name = "name1"
value = "{SECRET_VALUE}"
sensitive = true
[[parameters]]
name = "name2"
value = "value2"
sensitive = false
[job]
name = "whatever"
description = "cool"
enabled = true
notification_email_address = "{NotificationEmailAddress}"
[[job.steps]]
name = "todo"
type = "SSIS"
ssis_package = "MyIntegrationServicesProjectLoad.dtsx"
proxy = "SSISProxy"
[[job.steps]]
name = "2"
type = "SSIS"
ssis_package = "MyIntegrationServicesProjectTransform.dtsx"
proxy = "SSISProxy"
[[job.steps]]
name = "3"
type = "T-SQL"
tsql_command = "SELECT TOP 10 * FROM sys.objects"
[[job.schedules]]
name = "name1"
every_n_minutes = 12
[[job.schedules]]
name = "name2"
every_n_minutes = 111
Note, when configuring a T-SQL step in an agent job, the default database
will be master
and so you should use three part naming in your script like so:
SELECT * FROM [Database].[Schema].[Table];
Note the {SECRET_VALUE}
token in the above config.
This placeholder approach allows for source control of the configuration without storing secrets.
Secrets/tokens can then be injected at deployment time using the
--replacement-tokens
argument, e.g.:
sql-deployment-tools deploy --replacement-tokens '{"SECRET_VALUE": "***"}'
Driver={SQL Server Native Client 11.0};Server=.;Database=SSISDB;Trusted_Connection=yes;