Octopus.Script exported 2016-07-20 by bobjwalker belongs to ‘SQL Server’ category.
This is to deploy ssis packages using ‘project deployment model’ (ISPAC file )
Parameters
When steps based on the template are included in a project’s deployment process, the parameters below can be set.
Ispac file path
ISPAC_FILE_PATH
Once the SSIS project is compiled “ispac” file gets created, this variable must hold the path of the ispac file.
SSIS Server name
deploy.dts.server
SSIS Server name where this ssis packages must be deployed.
SSIS Folder name
SSIS_Folder
SSIS folder name which is created under SSISDB
Project Name
SSIS_Project
SSIS Project name - this is the physical folder name where the OD is referring to .
Environment Name
Environment_Name
This is the environment name where variables exists.
Script body
Steps based on this template will execute the following PowerShell script.
#################################################################################################
# Change source and destination properties
#################################################################################################
# Source
$IspacFilePath = "#{ISPAC_FILE_PATH}"
# Destination
$SsisServer = $OctopusParameters['deploy.dts.server']
$FolderName = $OctopusParameters['SSIS_Folder']
$ProjectName = $OctopusParameters['SSIS_Project']
# Environment
$EnvironmentName = $OctopusParameters['Environment_Name']
$EnvironmentFolderName = $OctopusParameters['SSIS_Folder']
# Replace empty projectname with filename
if (-not $ProjectName)
{
$ProjectName = [system.io.path]::GetFileNameWithoutExtension($IspacFilePath)
}
# Replace empty Environment folder with project folder
if (-not $EnvironmentFolderName)
{
$EnvironmentFolderName = $FolderName
}
clear
Write-Host "========================================================================================================================================================"
Write-Host "== Used parameters =="
Write-Host "========================================================================================================================================================"
Write-Host "Ispac File Path : " $IspacFilePath
Write-Host "SSIS Server : " $SsisServer
Write-Host "Project Folder Path : " $FolderName
Write-Host "Project Name : " $ProjectName
Write-Host "Environment Name : " $EnvironmentName
Write-Host "Environment Folder Path: " $EnvironmentFolderName
Write-Host "========================================================================================================================================================"
Write-Host ""
###########################
########## ISPAC ##########
###########################
# Check if ispac file exists
if (-Not (Test-Path $IspacFilePath))
{
Throw [System.IO.FileNotFoundException] "Ispac file $IspacFilePath doesn't exists!"
}
else
{
$IspacFileName = split-path $IspacFilePath -leaf
Write-Host "Ispac file" $IspacFileName "found"
}
############################
########## SERVER ##########
############################
# Load the Integration Services Assembly
Write-Host "Connecting to server $SsisServer "
$SsisNamespace = "Microsoft.SqlServer.Management.IntegrationServices"
[System.Reflection.Assembly]::LoadWithPartialName($SsisNamespace) | Out-Null;
# Create a connection to the server
$SqlConnectionstring = "Data Source=" + $SsisServer + ";Initial Catalog=master;Integrated Security=SSPI;"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnectionstring
# Create the Integration Services object
$IntegrationServices = New-Object $SsisNamespace".IntegrationServices" $SqlConnection
# Check if connection succeeded
if (-not $IntegrationServices)
{
Throw [System.Exception] "Failed to connect to server $SsisServer "
}
else
{
Write-Host "Connected to server" $SsisServer
}
#############################
########## CATALOG ##########
#############################
# Create object for SSISDB Catalog
$Catalog = $IntegrationServices.Catalogs["SSISDB"]
# Check if the SSISDB Catalog exists
if (-not $Catalog)
{
# Catalog doesn't exists. The user should create it manually.
# It is possible to create it, but that shouldn't be part of
# deployment of packages.
Throw [System.Exception] "SSISDB catalog doesn't exist. Create it manually!"
}
else
{
Write-Host "Catalog SSISDB found"
}
############################
########## FOLDER ##########
############################
# Create object to the (new) folder
$Folder = $Catalog.Folders[$FolderName]
# Check if folder already exists
if (-not $Folder)
{
# Folder doesn't exists, so create the new folder.
Write-Host "Creating new folder" $FolderName
$Folder = New-Object $SsisNamespace".CatalogFolder" ($Catalog, $FolderName, $FolderName)
$Folder.Create()
}
else
{
Write-Host "Folder" $FolderName "found"
}
#############################
########## PROJECT ##########
#############################
# Deploying project to folder
if($Folder.Projects.Contains($ProjectName)) {
Write-Host "Deploying" $ProjectName "to" $FolderName "(REPLACE)"
}
else
{
Write-Host "Deploying" $ProjectName "to" $FolderName "(NEW)"
}
# Reading ispac file as binary
[byte[]] $IspacFile = [System.IO.File]::ReadAllBytes($IspacFilePath)
$Folder.DeployProject($ProjectName, $IspacFile)
$Project = $Folder.Projects[$ProjectName]
if (-not $Project)
{
# Something went wrong with the deployment
# Don't continue with the rest of the script
return ""
}
#################################
########## ENVIRONMENT ##########
#################################
# Check if environment name is filled
if (-not $EnvironmentName)
{
# Kill connection to SSIS
$IntegrationServices = $null
# Stop the deployment script
Return "Ready deploying $IspacFileName without adding environment references"
}
# Create object to the (new) folder
$EnvironmentFolder = $Catalog.Folders[$EnvironmentFolderName]
# Check if environment folder exists
if (-not $EnvironmentFolder)
{
Throw [System.Exception] "Environment folder $EnvironmentFolderName doesn't exist"
}
# Check if environment exists
if(-not $EnvironmentFolder.Environments.Contains($EnvironmentName))
{
Throw [System.Exception] "Environment $EnvironmentName doesn't exist in $EnvironmentFolderName "
}
else
{
# Create object for the environment
$Environment = $Catalog.Folders[$EnvironmentFolderName].Environments[$EnvironmentName]
if ($Project.References.Contains($EnvironmentName, $EnvironmentFolderName))
{
Write-Host "Reference to" $EnvironmentName "found"
}
else
{
Write-Host "Adding reference to" $EnvironmentName
$Project.References.Add($EnvironmentName, $EnvironmentFolderName)
$Project.Alter()
}
}
########################################
########## PROJECT PARAMETERS ##########
########################################
$ParameterCount = 0
# Loop through all project parameters
foreach ($Parameter in $Project.Parameters)
{
# Get parameter name and check if it exists in the environment
$ParameterName = $Parameter.Name
if ($ParameterName.StartsWith("CM.","CurrentCultureIgnoreCase"))
{
# Ignoring connection managers
}
elseif ($ParameterName.StartsWith("INTERN_","CurrentCultureIgnoreCase"))
{
# Optional:
# Internal parameters are ignored (where name starts with INTERN_)
Write-Host "Ignoring Project parameter" $ParameterName " (internal use only)"
}
elseif ($Environment.Variables.Contains($Parameter.Name))
{
$ParameterCount = $ParameterCount + 1
Write-Host "Project parameter" $ParameterName "connected to environment"
$Project.Parameters[$Parameter.Name].Set([Microsoft.SqlServer.Management.IntegrationServices.ParameterInfo+ParameterValueType]::Referenced, $Parameter.Name)
$Project.Alter()
}
else
{
# Variable with the name of the project parameter is not found in the environment
# Throw an exeception or remove next line to ignore parameter
Throw [System.Exception] "Project parameter $ParameterName doesn't exist in environment"
}
}
Write-Host "Number of project parameters mapped:" $ParameterCount
########################################
########## PACKAGE PARAMETERS ##########
########################################
$ParameterCount = 0
# Loop through all packages
foreach ($Package in $Project.Packages)
{
# Loop through all package parameters
foreach ($Parameter in $Package.Parameters)
{
# Get parameter name and check if it exists in the environment
$PackageName = $Package.Name
$ParameterName = $Parameter.Name
if ($ParameterName.StartsWith("CM.","CurrentCultureIgnoreCase"))
{
# Ignoring connection managers
}
elseif ($ParameterName.StartsWith("INTERN_","CurrentCultureIgnoreCase"))
{
# Optional:
# Internal parameters are ignored (where name starts with INTERN_)
Write-Host "Ignoring Package parameter" $ParameterName " (internal use only)"
}
elseif ($Environment.Variables.Contains($Parameter.Name))
{
$ParameterCount = $ParameterCount + 1
Write-Host "Package parameter" $ParameterName "from package" $PackageName "connected to environment"
$Package.Parameters[$Parameter.Name].Set([Microsoft.SqlServer.Management.IntegrationServices.ParameterInfo+ParameterValueType]::Referenced, $Parameter.Name)
$Package.Alter()
}
else
{
# Variable with the name of the package parameter is not found in the environment
# Throw an exeception or remove next line to ignore parameter
Throw [System.Exception] "Package parameter $ParameterName from package $PackageName doesn't exist in environment"
}
}
}
Write-Host "Number of package parameters mapped:" $ParameterCount
###########################
########## READY ##########
###########################
# Kill connection to SSIS
$IntegrationServices = $null
Return "Ready deploying $IspacFileName "
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "efe39ac7-3ab8-4f99-bfdc-aba342278d1a",
"Name": "SQL Server - Project Deployment Model - Deploy ISPAC",
"Description": "This is to deploy ssis packages using 'project deployment model' (ISPAC file )",
"Version": 1,
"ExportedAt": "2016-07-20T10:15:20.241+00:00",
"ActionType": "Octopus.Script",
"Author": "bobjwalker",
"Parameters": [
{
"Name": "ISPAC_FILE_PATH",
"Label": "Ispac file path",
"HelpText": "Once the SSIS project is compiled \"ispac\" file gets created, this variable must hold the path of the ispac file.",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "deploy.dts.server",
"Label": "SSIS Server name",
"HelpText": "SSIS Server name where this ssis packages must be deployed.",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "SSIS_Folder",
"Label": "SSIS Folder name",
"HelpText": "SSIS folder name which is created under SSISDB",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "SSIS_Project",
"Label": "Project Name",
"HelpText": "SSIS Project name - this is the physical folder name where the OD is referring to .",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "Environment_Name",
"Label": "Environment Name",
"HelpText": "This is the environment name where variables exists.",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
}
],
"Properties": {
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.ScriptBody": "#################################################################################################\n# Change source and destination properties\n#################################################################################################\n\n# Source\n$IspacFilePath = \"#{ISPAC_FILE_PATH}\"\n \n# Destination\n$SsisServer = $OctopusParameters['deploy.dts.server'] \n$FolderName = $OctopusParameters['SSIS_Folder']\n$ProjectName = $OctopusParameters['SSIS_Project']\n\n# Environment\n$EnvironmentName = $OctopusParameters['Environment_Name'] \n$EnvironmentFolderName = $OctopusParameters['SSIS_Folder']\n\n\n# Replace empty projectname with filename\nif (-not $ProjectName)\n{\n $ProjectName = [system.io.path]::GetFileNameWithoutExtension($IspacFilePath)\n}\n# Replace empty Environment folder with project folder\nif (-not $EnvironmentFolderName)\n{\n $EnvironmentFolderName = $FolderName\n}\n\nclear\nWrite-Host \"========================================================================================================================================================\"\nWrite-Host \"== Used parameters ==\"\nWrite-Host \"========================================================================================================================================================\"\nWrite-Host \"Ispac File Path : \" $IspacFilePath\nWrite-Host \"SSIS Server : \" $SsisServer\nWrite-Host \"Project Folder Path : \" $FolderName\nWrite-Host \"Project Name : \" $ProjectName\nWrite-Host \"Environment Name : \" $EnvironmentName\nWrite-Host \"Environment Folder Path: \" $EnvironmentFolderName\nWrite-Host \"========================================================================================================================================================\"\nWrite-Host \"\"\n\n###########################\n########## ISPAC ##########\n###########################\n# Check if ispac file exists\nif (-Not (Test-Path $IspacFilePath))\n{\n Throw [System.IO.FileNotFoundException] \"Ispac file $IspacFilePath doesn't exists!\"\n}\nelse\n{\n $IspacFileName = split-path $IspacFilePath -leaf\n Write-Host \"Ispac file\" $IspacFileName \"found\"\n}\n\n\n############################\n########## SERVER ##########\n############################\n# Load the Integration Services Assembly\nWrite-Host \"Connecting to server $SsisServer \"\n$SsisNamespace = \"Microsoft.SqlServer.Management.IntegrationServices\"\n[System.Reflection.Assembly]::LoadWithPartialName($SsisNamespace) | Out-Null;\n\n# Create a connection to the server\n$SqlConnectionstring = \"Data Source=\" + $SsisServer + \";Initial Catalog=master;Integrated Security=SSPI;\"\n$SqlConnection = New-Object System.Data.SqlClient.SqlConnection $SqlConnectionstring\n\n# Create the Integration Services object\n$IntegrationServices = New-Object $SsisNamespace\".IntegrationServices\" $SqlConnection\n\n# Check if connection succeeded\nif (-not $IntegrationServices)\n{\n Throw [System.Exception] \"Failed to connect to server $SsisServer \"\n}\nelse\n{\n Write-Host \"Connected to server\" $SsisServer\n}\n\n\n#############################\n########## CATALOG ##########\n#############################\n# Create object for SSISDB Catalog\n$Catalog = $IntegrationServices.Catalogs[\"SSISDB\"]\n\n# Check if the SSISDB Catalog exists\nif (-not $Catalog)\n{\n # Catalog doesn't exists. The user should create it manually.\n # It is possible to create it, but that shouldn't be part of\n # deployment of packages.\n Throw [System.Exception] \"SSISDB catalog doesn't exist. Create it manually!\"\n}\nelse\n{\n Write-Host \"Catalog SSISDB found\"\n}\n\n\n############################\n########## FOLDER ##########\n############################\n# Create object to the (new) folder\n$Folder = $Catalog.Folders[$FolderName]\n\n# Check if folder already exists\nif (-not $Folder)\n{\n # Folder doesn't exists, so create the new folder.\n Write-Host \"Creating new folder\" $FolderName\n $Folder = New-Object $SsisNamespace\".CatalogFolder\" ($Catalog, $FolderName, $FolderName)\n $Folder.Create()\n}\nelse\n{\n Write-Host \"Folder\" $FolderName \"found\"\n}\n\n\n#############################\n########## PROJECT ##########\n#############################\n# Deploying project to folder\nif($Folder.Projects.Contains($ProjectName)) {\n Write-Host \"Deploying\" $ProjectName \"to\" $FolderName \"(REPLACE)\"\n}\nelse\n{\n Write-Host \"Deploying\" $ProjectName \"to\" $FolderName \"(NEW)\"\n}\n# Reading ispac file as binary\n[byte[]] $IspacFile = [System.IO.File]::ReadAllBytes($IspacFilePath)\n$Folder.DeployProject($ProjectName, $IspacFile)\n$Project = $Folder.Projects[$ProjectName]\nif (-not $Project)\n{\n # Something went wrong with the deployment\n # Don't continue with the rest of the script\n return \"\"\n}\n\n\n#################################\n########## ENVIRONMENT ##########\n#################################\n# Check if environment name is filled\nif (-not $EnvironmentName)\n{\n # Kill connection to SSIS\n $IntegrationServices = $null \n\n # Stop the deployment script\n Return \"Ready deploying $IspacFileName without adding environment references\"\n}\n\n# Create object to the (new) folder\n$EnvironmentFolder = $Catalog.Folders[$EnvironmentFolderName]\n\n# Check if environment folder exists\nif (-not $EnvironmentFolder)\n{\n Throw [System.Exception] \"Environment folder $EnvironmentFolderName doesn't exist\"\n}\n\n# Check if environment exists\nif(-not $EnvironmentFolder.Environments.Contains($EnvironmentName))\n{\n Throw [System.Exception] \"Environment $EnvironmentName doesn't exist in $EnvironmentFolderName \"\n}\nelse\n{\n # Create object for the environment\n $Environment = $Catalog.Folders[$EnvironmentFolderName].Environments[$EnvironmentName]\n\n if ($Project.References.Contains($EnvironmentName, $EnvironmentFolderName))\n {\n Write-Host \"Reference to\" $EnvironmentName \"found\"\n }\n else\n {\n Write-Host \"Adding reference to\" $EnvironmentName\n $Project.References.Add($EnvironmentName, $EnvironmentFolderName)\n $Project.Alter() \n }\n}\n\n\n########################################\n########## PROJECT PARAMETERS ##########\n########################################\n$ParameterCount = 0\n# Loop through all project parameters\nforeach ($Parameter in $Project.Parameters)\n{\n # Get parameter name and check if it exists in the environment\n $ParameterName = $Parameter.Name\n if ($ParameterName.StartsWith(\"CM.\",\"CurrentCultureIgnoreCase\")) \n { \n # Ignoring connection managers \n } \n elseif ($ParameterName.StartsWith(\"INTERN_\",\"CurrentCultureIgnoreCase\")) \n { \n # Optional:\n # Internal parameters are ignored (where name starts with INTERN_) \n Write-Host \"Ignoring Project parameter\" $ParameterName \" (internal use only)\" \n } \n elseif ($Environment.Variables.Contains($Parameter.Name))\n {\n $ParameterCount = $ParameterCount + 1\n Write-Host \"Project parameter\" $ParameterName \"connected to environment\"\n $Project.Parameters[$Parameter.Name].Set([Microsoft.SqlServer.Management.IntegrationServices.ParameterInfo+ParameterValueType]::Referenced, $Parameter.Name)\n $Project.Alter()\n }\n else\n {\n # Variable with the name of the project parameter is not found in the environment\n # Throw an exeception or remove next line to ignore parameter\n Throw [System.Exception] \"Project parameter $ParameterName doesn't exist in environment\"\n }\n}\nWrite-Host \"Number of project parameters mapped:\" $ParameterCount\n\n\n########################################\n########## PACKAGE PARAMETERS ##########\n########################################\n$ParameterCount = 0\n# Loop through all packages\nforeach ($Package in $Project.Packages)\n{\n # Loop through all package parameters\n foreach ($Parameter in $Package.Parameters)\n {\n # Get parameter name and check if it exists in the environment\n $PackageName = $Package.Name\n $ParameterName = $Parameter.Name \n if ($ParameterName.StartsWith(\"CM.\",\"CurrentCultureIgnoreCase\")) \n { \n # Ignoring connection managers \n } \n elseif ($ParameterName.StartsWith(\"INTERN_\",\"CurrentCultureIgnoreCase\")) \n { \n # Optional:\n # Internal parameters are ignored (where name starts with INTERN_) \n Write-Host \"Ignoring Package parameter\" $ParameterName \" (internal use only)\" \n } \n elseif ($Environment.Variables.Contains($Parameter.Name))\n {\n $ParameterCount = $ParameterCount + 1\n Write-Host \"Package parameter\" $ParameterName \"from package\" $PackageName \"connected to environment\"\n $Package.Parameters[$Parameter.Name].Set([Microsoft.SqlServer.Management.IntegrationServices.ParameterInfo+ParameterValueType]::Referenced, $Parameter.Name)\n $Package.Alter()\n }\n else\n {\n # Variable with the name of the package parameter is not found in the environment\n # Throw an exeception or remove next line to ignore parameter\n Throw [System.Exception] \"Package parameter $ParameterName from package $PackageName doesn't exist in environment\"\n }\n }\n}\nWrite-Host \"Number of package parameters mapped:\" $ParameterCount\n\n\n###########################\n########## READY ##########\n###########################\n# Kill connection to SSIS\n$IntegrationServices = $null \n\n\nReturn \"Ready deploying $IspacFileName \"",
"Octopus.Action.Script.ScriptFileName": null,
"Octopus.Action.Package.NuGetFeedId": null,
"Octopus.Action.Package.NuGetPackageId": null
},
"Category": "SQL Server",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/sqlserver-project-deployment-model-ispac-deploy.json",
"Website": "/step-templates/efe39ac7-3ab8-4f99-bfdc-aba342278d1a",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Wednesday, July 20, 2016