SQL Server Integration Services(SSIS)持续交付开发工具 Azure DevOps 扩展

SSIS DevOps Tools 扩展可在 Azure DevOps 市场中获得。 SSIS DevOps 支持 Azure DevOps ServicesAzure DevOps Server 2019 及更高版本。

如果你没有 Azure DevOps 组织,首先请注册 Azure Pipelines,然后根据这些步骤添加“SSIS DevOps 工具”扩展

SSIS DevOps Tools 包括 SSIS 生成 任务、SSIS 部署 发布任务,以及 SSIS 目录配置任务

  • SSIS 生成任务支持在项目部署模型或包部署模型中构建 dtproj 文件。

  • SSIS 部署 任务支持将单个或多个 ispac 文件部署到本地 SSIS 目录和 Azure-SSIS IR,或将 SSISDeploymentManifest 文件及其关联文件部署到本地或 Azure 文件共享。

  • SSIS 目录配置 任务支持使用 JSON 格式的配置文件配置 SSIS 目录的文件夹/项目/环境。 此任务支持以下方案:

    • 文件夹
      • 创建文件夹。
      • 更新文件夹说明。
    • 项目
      • 配置参数的值,同时支持文本值和引用值。
      • 添加环境引用。
    • 环境
      • 创建环境。
      • 更新环境说明。
      • 创建或更新环境变量。

SSIS 生成任务

创建任务

性能

项目路径

要生成的项目文件夹或文件的路径。 如果指定了文件夹路径,SSIS 生成任务将以递归方式在此文件夹下搜索所有 dtproj 文件并生成所有文件。

项目路径不能为空,设置为“.”以便从存储库的根文件夹中生成

项目配置

要用于生成的项目配置的名称。 如果未提供,则会默认使用每个 dtproj 文件中第一个已定义的项目配置。

输出路径

用于保存生成结果的单独文件夹的路径,这些结果可通过发布生成项目任务发布为生成项目。

限制和已知问题

  • SSIS 生成任务依赖于 Visual Studio 和 SSIS 设计器,这对于生成代理是必需的。 因此,若要在管道中运行 SSIS 生成任务,请执行以下操作:

    • 对于 Microsoft 托管代理,必须选择包含 Visual Studio 和 SQL Server Integration Services 扩展的可用映像,例如 windows-2022。 有关可用映像中包含的软件的详细信息,请参阅 Microsoft 托管代理文档
    • 对于自承载代理,请在自承载代理上安装 Visual Studio 和 SSIS 设计器(VS2022 + SSIS 项目扩展或 VS2019 + SSIS 项目扩展)。
  • 若要使用任何现成组件(包括 SSIS Azure 功能包和其他第三方组件)生成 SSIS 项目,必须在运行管道代理的计算机上安装这些现成组件。 对于Microsoft托管的代理,用户可以添加 PowerShell 脚本任务命令行脚本任务 下载并安装组件,然后再执行 SSIS 生成任务。 下面是用于安装 Azure 功能包的示例 PowerShell 脚本:

wget -Uri https://download.microsoft.com/download/E/E/0/EE0CB6A0-4105-466D-A7CA-5E39FA9AB128/SsisAzureFeaturePack_2017_x86.msi -OutFile AFP.msi

start -Wait -FilePath msiexec -Args "/i AFP.msi /quiet /l* log.txt"

cat log.txt
  • SSIS 生成任务不支持 EncryptSensitiveWithPassword 和 EncryptAllWithPassword 保护级别。 确保代码库中的所有 SSIS 项目都不使用这两个保护级别,否则,SSIS 生成任务在执行过程中将停止响应和超时。

SSIS 生成任务版本 1.*

版本 1.* 中的增强功能:

  • 删除 Visual Studio 和 SSIS 设计器上的依赖项。 生成任务可以在具有 Windows OS 和 .NET Framework 4.6.2 或更高版本的Microsoft托管代理或自承载代理上运行。

  • 无需安装开箱即用的组件。

  • 支持保护级别 EncryptionWithPassword 和 EncryptionAllWithPassword。

限制和已知问题

  • SSIS 生成任务版本 1.* 不支持使用数字签名生成包含 SSIS 包的 SSIS 项目。

仅限版本 1.* 属性

项目密码

SSIS 项目及其包的密码。 仅当 SSIS 项目和包的保护级别为 EncryptSensitiveWithPassword 或 EncryptAllWithPassword 时,此参数才有效。 对于包部署模型,所有包都必须共享此参数指定的相同密码。

删除敏感数据

如果此值为 true,请将 SSIS 项目的保护级别转换为 DontSaveSensitive。 当保护级别为 EncryptSensitiveWithPassword 或 EncryptAllWithPassword 时,必须正确设置参数 Project Password。 此选项仅适用于项目部署模型。

SSIS 部署任务

部署任务

性能

源路径

要部署的源 ISPAC 或 SSISDeploymentManifest 文件的路径。 此路径可以是文件夹路径或文件路径。

目标类型

目标的类型。 目前,SSIS 部署任务支持两种类型:

  • 文件系统:将 SSISDeploymentManifest 文件及其关联的文件部署到指定的文件系统。 支持本地和 Azure 文件共享。
  • SSISDB:将 ISPAC 文件部署到指定的 SSIS 目录,该目录可以托管在本地 SQL Server 或 Azure-SSIS Integration Runtime 上。

目标服务器

目标数据库引擎的名称。 它可以是本地 SQL Server、Azure SQL 数据库或 Azure SQL 托管实例的名称。 仅当目标类型为 SSISDB 时,此属性才可见。

目标路径

将源文件部署到的目标文件夹的路径。 例如:

  • /SSISDB/<folderName>
  • \\<machineName>\<shareFolderName>\<optionalSubfolderName>

SSIS 部署任务将创建文件夹和子文件夹(如果不存在)。

身份验证类型

用于访问指定目标服务器的身份验证类型。 仅当目标类型为 SSISDB 时,此属性才可见。 通常支持以下身份验证类型:

  • Windows 身份验证
  • SQL Server 身份验证
  • Active Directory - 密码
  • Active Directory - 集成

但是,是否支持特定的身份验证类型取决于目标服务器类型和代理类型。 下表中列出了详细信息支持矩阵。

目标服务器类型 Microsoft 托管代理 自托管代理
本地 SQL Server 或 VM N/A Windows 身份验证
Azure SQL SQL Server 身份验证
Active Directory - 密码
SQL Server 身份验证
Active Directory - 密码
Active Directory - 集成

域名

用于访问指定文件系统的域名。 仅当目标类型为文件系统时,此属性才可见。 如果用于运行自托管代理的用户帐户已被授予对指定目标路径的读/写访问权限,则可以将该字段留空。

用户名

用于访问指定文件系统或 SSISDB 的用户名。 当目标类型为文件系统或身份验证类型为 SQL Server 身份验证或 Active Directory - 密码时,此属性可见。 当目标类型为文件系统时,可以将它留空,并且已向运行自承载代理的用户帐户授予对指定目标路径的读/写访问权限。

密码

用于访问指定文件系统或 SSISDB 的密码。 当目标类型为文件系统或身份验证类型为 SQL Server 身份验证或 Active Directory - 密码时,此属性可见。 当目标类型为文件系统时,可以将其留空,并且已向运行自承载代理的用户帐户授予对指定目标路径的读/写访问权限。

覆盖名称相同的现有项目或 SSISDeploymentManifest 文件

指定是否覆盖名称相同的现有项目或 SSISDeploymentManifest 文件。 如果“否”,SSIS 部署任务将跳过部署这些项目或文件。

发生错误时继续部署

指定在发生错误时是否继续部署剩余项目或文件。 如果为“否”,则发生错误时,SSIS 部署任务将立即停止。

限制和已知问题

SSIS 部署任务当前不支持以下方案:

  • 在 SSIS 目录中配置环境。
  • 将 ISPAC 部署到 Azure SQL Server 或 Azure SQL 托管实例,仅允许多重身份验证。
  • 将包部署到 MSDB 或 SSIS 包存储。
  • 如果在 Azure DevOps Server 中安装 SSIS DevOps Tools 扩展,可能会看到消息“扩展包大小超过最大包大小”。若要解决此问题,请完成以下步骤:
    1. 连接到本地 SQL Server 实例并选择数据库 Gallery_Configuration
    2. 运行查询 INSERT INTO dbo.tbl_RegistryItems VALUES (1,'#\Configuration\Service\Gallery\LargeExtensionUpload\SSIS\','MaxPackageSizeMB\',50)。 如果扩展大于 50 MB,请将 50 更改为更高的数字。
    3. 运行查询后,重启 Internet Information Services。 请重试上传扩展。
    4. 如果错误仍然存在,请联系 SQL Server 支持团队。

SSIS 部署任务版本 1.*

版本 1.* 中的改进:

  • 支持保护级别 EncryptionWithPassword 和 EncryptionAllWithPassword。

仅限版本 1.* 属性

项目密码

用于解密 ISPAC 或 DTSX 文件的密码。 仅当保护级别为 EncryptSensitiveWithPassword 或 EncryptAllWithPassword 时,此参数才有效。

SSIS 目录配置任务

目录配置任务

性能

配置文件源

SSIS 目录配置 JSON 文件来源。 可以是“文件路径”或“内联”。

有关如何定义配置 JSON 的详细信息,请参阅:

配置 JSON 文件路径

SSIS 目录配置 JSON 文件的路径。 仅当选择“文件路径”作为配置文件源时,此属性才可见。

若要在配置 JSON 文件中使用 管道变量,需要在本任务之前添加一个 文件转换任务,以用管道变量替换配置值。 有关详细信息,请参阅 JSON 变量替换

内联配置 JSON

SSIS 目录配置的内联 JSON。 仅当选择“内联”作为配置文件源时,此属性才可见。 可以直接使用管道变量。

发生错误时回滚配置

发生错误时是否回滚此任务执行的配置。

目标服务器

目标数据库引擎的名称。 它可以是本地 SQL Server、Azure SQL 数据库或 Azure SQL 托管实例的名称。

身份验证类型

用于访问指定目标服务器的身份验证类型。 通常支持以下身份验证类型:

  • Windows 身份验证
  • SQL Server 身份验证
  • Active Directory - 密码
  • Active Directory - 集成

但是,是否支持特定的身份验证类型取决于目标服务器类型和代理类型。 下表中列出了详细信息支持矩阵。

目标服务器类型 Microsoft 托管代理 自托管代理
本地 SQL Server 或 VM N/A Windows 身份验证
Azure SQL SQL Server 身份验证
Active Directory - 密码
SQL Server 身份验证
Active Directory - 密码
Active Directory - 集成

用户名

用于访问目标 SQL Server 的用户名。 仅当身份验证类型为 SQL Server 身份验证或 Active Directory - 密码时,此属性才可见。

密码

用于访问目标 SQL Server 的密码。 仅当身份验证类型为 SQL Server 身份验证或 Active Directory - 密码时,此属性才可见。

定义配置 JSON

配置 JSON 架构有三个层:

  • 目录
  • 文件夹
  • 项目和环境

目录配置架构

内联配置 JSON 示例

{
  "folders": [
    {
      "name": "devopsdemo",
      "description": "devops demo folder",
      "projects": [
        {
          "name": "catalog devops",
          "parameters": [
            {
              "name": "password",
              "container": "Package.dtsx",
              "value": "passwd",
              "valueType": "referenced"
            },
            {
              "name": "serverName",
              "container": "catalog devops",
              "value": "localhost",
              "valueType": "literal"
            }
          ],
          "references": [
            {
              "environmentName": "test",
              "environmentFolder": "devopsdemo"
            },
            {
              "environmentName": "test",
              "environmentFolder": "."
            }
          ]
        }
      ],
      "environments": [
        {
          "name": "test",
          "description": "test",
          "variables": [
            {
              "name": "passwd",
              "type": "string",
              "description": "",
              "value": "$(SSISDBServerAdminPassword)",
              "sensitive": true
            },
            {
              "name": "serverName",
              "type": "string",
              "description": "",
              "value": "$(TargetServerName)",
              "sensitive": false
            }
          ]
        }
      ]
    }
  ]
}

JSON 架构

目录属性
财产 描述 注释
folders 文件夹对象的数组。 每个对象都包含目录文件夹的配置信息。 有关文件夹对象的架构,请参阅 文件夹属性
文件夹属性
财产 描述 注释
名字 目录文件夹的名称。 如果不存在,将创建文件夹。
description 目录文件夹的说明。 null 的值将被跳过。
projects 项目对象的数组。 每个对象都包含项目的配置信息。 有关项目对象的架构,请参阅 Project 属性
environments 环境对象的数组。 每个对象都包含环境的配置信息。 有关环境对象的架构,请参阅 环境属性
项目属性
财产 描述 注释
名字 项目的名称。 如果父文件夹中不存在项目,将跳过 Project 对象。
参数 参数对象的数组。 每个对象都包含参数的配置信息。 请参阅 参数属性 参数对象的架构。
references 引用对象的数组。 每个对象表示对目标项目的环境引用。 有关引用对象的架构,请参阅 引用属性
参数属性
财产 描述 注释
名字 参数的名称。
  • 该参数可以是项目参数或包参数。
  • 如果该参数不存在,则会跳过该参数。
  • 如果参数是连接管理器属性,则名称的格式应 CM。<连接管理器名称>。<属性名称>
  • 容器 参数的容器。
  • 如果参数是项目参数,则 容器 应为项目名称。
  • 如果它是包参数,则 容器 应该是具有 .dtsx 扩展名的包名称。
  • value 参数的值。
  • valueType引用时:该值是对 字符串 类型的环境变量的引用。
  • 当 valueType 是“文本”时:此属性支持任何有效的布尔、数字和字符串 JSON 值
  • 该值将转换为目标参数类型。 如果无法转换,将发生错误。
  • null 的值无效。 该任务将跳过此参数对象,并发出警告。
  • valueType 参数值的类型。 有效类型为:
    文本:value 属性表示文本值
    引用:value 属性表示对环境变量的引用
    引用属性
    财产 描述 注释
    environmentFolder 环境的文件夹名称。 如果不存在,将创建文件夹。
    值可以是“.”,表示引用环境的项目的父文件夹。
    environmentName 所引用环境的名称。 如果不存在,将创建指定的环境。
    环境属性
    财产 描述 注释
    名字 环境的名称。 如果环境不存在,将创建环境。
    description 环境说明。 将跳过 null 值
    变量 变量对象的数组。 每个对象都包含环境变量的配置信息。请参阅 变量属性 变量对象的架构。
    变量属性
    财产 描述 注释
    名字 环境变量的名称。 如果不存在,将创建环境变量。
    type 环境变量的数据类型。 有效类型为:
    boolean
    byte
    datetime
    decimal
    double
    int16
    int32
    int64
    sbyte
    single
    string
    uint32
    uint64
    description 环境变量的说明。 将跳过 null 值
    value 环境变量的值。 此属性支持任何有效的布尔值、数字和字符串 JSON 值。
    该值将转换为由 类型 属性指定的类型。 如果转换失败,将发生错误。
    null 的值无效。 该任务将跳过此环境变量对象,并发出警告。
    敏感 环境变量的值是否敏感。 有效输入为:
    true
    false

    发行说明

    版本 1.0.6

    发布日期:2021 年 9 月 1 日

    • 正式发布 (GA) 版。

    版本 1.0.5

    发布日期:2021 年 6 月 2 日

    • 修复了 SSIS 生成任务版本 1 的以下问题:*有时无法生成包含保护级别 EncryptSensitiveWithPassword 或 EncryptAllWithPassword 的项目/包,并出现错误“指定的初始化向量 (IV) 与此算法的块大小不匹配”。
    • 当“配置文件源”为“文件路径”时,删除了 SSIS 目录配置任务的日志中的 JSON 内容。

    版本 1.0.4

    发布日期:2021 年 4 月 21 日

    • SSIS 生成任务版本 1.* (预览版)
      • 删除 Visual Studio 和 SSIS 设计器上的依赖项。 生成任务可以在具有 Windows OS 和 .NET Framework 4.6.2 或更高版本的Microsoft托管代理或自承载代理上运行。
      • 无需安装开箱即用的组件。
      • 支持保护级别 EncryptionWithPassword 和 EncryptionAllWithPassword。
    • SSIS 部署任务版本 1.* (预览版)
      • 支持保护级别 EncryptionWithPassword 和 EncryptionAllWithPassword。

    版本 1.0.3

    发布日期:2020 年 10 月 21 日

    • 允许为 SSIS 部署任务和 SSIS 目录配置任务指定连接字符串后缀。

    版本 1.0.2

    发布日期:2020 年 5 月 26 日

    • 修复了在完成配置工作后,在某些情况下 SSIS 目录配置任务可能会失败的问题。

    版本 1.0.1

    发布日期:2020 年 5 月 9 日

    • 修复了 SSIS 生成任务始终生成整个解决方案的问题,即使仅将单个 dtproj 文件指定为项目路径也是如此。

    版本 1.0.0

    发布日期:2020 年 5 月 8 日

    • 正式发布 (GA) 版。
    • 添加了对代理的最低 .NET Framework 版本的限制。 目前,最低 .NET Framework 版本为 4.6.2。
    • 优化了 SSIS 生成任务和 SSIS 部署任务的说明。

    版本 0.2.0 预览版

    发布日期:2020 年 3 月 31 日

    • 添加 SSIS 目录配置任务。

    版本 0.1.3 预览版

    发布日期:2020 年 1 月 19 日

    • 修复了一个问题,该问题导致在更改原始文件名时无法部署 ispac。

    版本 0.1.2 预览版

    发布日期:2020 年 1 月 13 日

    • 当目标类型为 SSISDB 时,在 SSIS 部署任务日志中添加了更详细的异常信息。
    • 修正了 SSIS 部署任务的属性目标路径帮助文本中的示例目标路径。

    版本 0.1.1 预览版

    发布日期:2020 年 1 月 6 日

    • 添加了对最低代理版本要求的限制。 目前,此产品的最小代理版本为 2.144.0。
    • 修复了 SSIS 部署任务中一些显示文本的不正确之处。
    • 完善了一些错误消息。

    版本 0.1.0 预览版

    发布日期:2019 年 12 月 5 日

    SSIS DevOps Tools 的初始版本。 这是预览版。

    后续步骤