ISDeploymentWizard.exe CMD 中的命令(SSIS 部署)不打印任何状态指示
ISDeploymentWizard.exe command (SSIS deployment ) in CMD doesn't print any indication for status
我是 运行 CMD
中的以下命令 SSIS
:
ISDeploymentWizard.exe /Silent /ModelType:Project /SourcePath:"C:\TEST\Integration Services.ispac" /DestinationServer:"TEST03,1111" /DestinationPath:"/TEST/DEVOPS"
它成功完成,但命令行没有任何指示。我只能检查 SSMS
以确保它确实已部署。知道为什么吗?
@areilma 的可靠观察 - /silent 选项消除了所有状态信息。我一直以为是flag控制着gui的显示与否
如果我运行这个命令
isdeploymentwizard.exe /Silent /ModelType:Project /SourcePath:".\SO_66497856.ispac" /DestinationServer:".\dev2017" /DestinationPath:"/SSISDB/BatchSizeTester/SO_66497856"
我的包已部署到指定路径的本地机器上。删除 /silent 选项会导致 GUI 使用预填充的值打开。
isdeploymentwizard.exe /ModelType:Project /SourcePath:".\SO_66497856.ispac" /DestinationServer:".\dev2017" /DestinationPath:"/SSISDB/BatchSizeTester/SO_66497856"
当前一个命令运行s 时,命令提示符不会打印任何内容。所以这是快乐的路径部署,也许如果出现“错误”,我会在命令行上收到一条错误消息。这就是事情变得“有趣”的地方。
我将目标路径更改为一个不存在的文件夹。我知道如果路径不存在,该工具不会创建路径,当我 运行 它时,我没有在命令行上返回错误。我得到的是
的弹出窗口错误
TITLE: SQL Server Integration Services
The path does not exist. The folder 'cBatchSizeTester' was not found in catalog 'SSISDB'. (Microsoft.SqlServer.IntegrationServices.Wizard.Common)
BUTTONS:
OK
因此 /silent 选项删除了 gui 以允许我们进行自动部署,但如果传递了错误的值,我们 return 将拥有一个 gui...然后我用错误的服务器名称重复了一遍, 这导致了第二次观察。在我按下回车键的那一刻,命令行 return 为下一个命令做好了准备。然而,15 秒后,
TITLE: SQL Server Integration Services
Failed to connect to server .\dev2017a. (Microsoft.SqlServer.ConnectionInfo)
ADDITIONAL INFORMATION:
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified) (Microsoft SQL Server, Error: -1)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-1&LinkId=20476
现在,这告诉我实际部署是一个独立的派生进程。所以它不会 return 任何数据返回到命令行,在任何情况下。
既然我假设我们是从 CI/CD 的角度来看这个问题,那么我们能做些什么呢?我们可以在 SSISDB 目录视图中查找条目以查看发生了什么之后触发 sqlcmd
。像这样
SELECT TOP 1 O.end_time, SV.StatusValue, F.name AS FolderName, P.name AS ProjectName FROM catalog.operations AS O
CROSS APPLY
(
SELECT
CASE O.status
WHEN 1 THEN 'Created'
WHEN 2 THEN 'Running'
WHEN 3 THEN 'Canceled'
WHEN 4 THEN 'Failed'
WHEN 5 THEN 'Pending'
WHEN 6 THEN 'Ended unexpectedly'
WHEN 7 THEN 'Succeeded'
WHEN 8 THEN 'Stopping'
WHEN 9 THEN 'Completed'
END AS StatusValue
)SV
INNER JOIN catalog.object_versions AS OV ON OV.object_id = O.object_id
INNER JOIN catalog.projects AS P ON P.object_version_lsn = OV.object_version_lsn
INNER JOIN catalog.folders AS F ON F.folder_id = P.folder_id
/*
INNER JOIN
catalog.packages AS PKG
ON PKG.project_id = P.project_id
*/
WHERE O.operation_type = 101 /*deploy project*/
AND P.name = 'SO_66497856' /*project name*/
AND F.name = 'BatchSizeTester'
ORDER BY o.created_time DESC
也许对过去 10 秒内的 end_time 进行筛选是合适的,如果我们有结果并且状态为成功,我们就可以进行部署。没有结果意味着它失败了。我假设当 gui 运行s 时会发生类似的事情,尽管进行了所有这些测试,但我对启动跟踪以完全完善此答案并查看幕后发生的事情不感兴趣。
如果您想否定预构建工具的价值,另一种选择是使用 ManagedObjectModel/PowerShell 方法进行部署,因为您可以从那里获取信息。另一个部署选项是使用 TSQL 命令。我的文档部分中的第二个 link 概述了它的外观
我能找到的文档很少
我找不到关于 isdeploymentwizard.exe
的命令行开关的文档
- Deploy an SSIS project from the command prompt with ISDeploymentWizard.exe
- Deploy Integration Services (SSIS) Projects and Packages
- 从@arielma 已删除的答案中,他们找到了一个更简洁的答案:“not possible”
我是 运行 CMD
中的以下命令 SSIS
:
ISDeploymentWizard.exe /Silent /ModelType:Project /SourcePath:"C:\TEST\Integration Services.ispac" /DestinationServer:"TEST03,1111" /DestinationPath:"/TEST/DEVOPS"
它成功完成,但命令行没有任何指示。我只能检查 SSMS
以确保它确实已部署。知道为什么吗?
@areilma 的可靠观察 - /silent 选项消除了所有状态信息。我一直以为是flag控制着gui的显示与否
如果我运行这个命令
isdeploymentwizard.exe /Silent /ModelType:Project /SourcePath:".\SO_66497856.ispac" /DestinationServer:".\dev2017" /DestinationPath:"/SSISDB/BatchSizeTester/SO_66497856"
我的包已部署到指定路径的本地机器上。删除 /silent 选项会导致 GUI 使用预填充的值打开。
isdeploymentwizard.exe /ModelType:Project /SourcePath:".\SO_66497856.ispac" /DestinationServer:".\dev2017" /DestinationPath:"/SSISDB/BatchSizeTester/SO_66497856"
当前一个命令运行s 时,命令提示符不会打印任何内容。所以这是快乐的路径部署,也许如果出现“错误”,我会在命令行上收到一条错误消息。这就是事情变得“有趣”的地方。
我将目标路径更改为一个不存在的文件夹。我知道如果路径不存在,该工具不会创建路径,当我 运行 它时,我没有在命令行上返回错误。我得到的是
的弹出窗口错误TITLE: SQL Server Integration Services
The path does not exist. The folder 'cBatchSizeTester' was not found in catalog 'SSISDB'. (Microsoft.SqlServer.IntegrationServices.Wizard.Common)
BUTTONS:
OK
因此 /silent 选项删除了 gui 以允许我们进行自动部署,但如果传递了错误的值,我们 return 将拥有一个 gui...然后我用错误的服务器名称重复了一遍, 这导致了第二次观察。在我按下回车键的那一刻,命令行 return 为下一个命令做好了准备。然而,15 秒后,
TITLE: SQL Server Integration Services
Failed to connect to server .\dev2017a. (Microsoft.SqlServer.ConnectionInfo)
ADDITIONAL INFORMATION:
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified) (Microsoft SQL Server, Error: -1)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=-1&LinkId=20476
现在,这告诉我实际部署是一个独立的派生进程。所以它不会 return 任何数据返回到命令行,在任何情况下。
既然我假设我们是从 CI/CD 的角度来看这个问题,那么我们能做些什么呢?我们可以在 SSISDB 目录视图中查找条目以查看发生了什么之后触发 sqlcmd
。像这样
SELECT TOP 1 O.end_time, SV.StatusValue, F.name AS FolderName, P.name AS ProjectName FROM catalog.operations AS O
CROSS APPLY
(
SELECT
CASE O.status
WHEN 1 THEN 'Created'
WHEN 2 THEN 'Running'
WHEN 3 THEN 'Canceled'
WHEN 4 THEN 'Failed'
WHEN 5 THEN 'Pending'
WHEN 6 THEN 'Ended unexpectedly'
WHEN 7 THEN 'Succeeded'
WHEN 8 THEN 'Stopping'
WHEN 9 THEN 'Completed'
END AS StatusValue
)SV
INNER JOIN catalog.object_versions AS OV ON OV.object_id = O.object_id
INNER JOIN catalog.projects AS P ON P.object_version_lsn = OV.object_version_lsn
INNER JOIN catalog.folders AS F ON F.folder_id = P.folder_id
/*
INNER JOIN
catalog.packages AS PKG
ON PKG.project_id = P.project_id
*/
WHERE O.operation_type = 101 /*deploy project*/
AND P.name = 'SO_66497856' /*project name*/
AND F.name = 'BatchSizeTester'
ORDER BY o.created_time DESC
也许对过去 10 秒内的 end_time 进行筛选是合适的,如果我们有结果并且状态为成功,我们就可以进行部署。没有结果意味着它失败了。我假设当 gui 运行s 时会发生类似的事情,尽管进行了所有这些测试,但我对启动跟踪以完全完善此答案并查看幕后发生的事情不感兴趣。
如果您想否定预构建工具的价值,另一种选择是使用 ManagedObjectModel/PowerShell 方法进行部署,因为您可以从那里获取信息。另一个部署选项是使用 TSQL 命令。我的文档部分中的第二个 link 概述了它的外观
我能找到的文档很少
我找不到关于 isdeploymentwizard.exe
- Deploy an SSIS project from the command prompt with ISDeploymentWizard.exe
- Deploy Integration Services (SSIS) Projects and Packages
- 从@arielma 已删除的答案中,他们找到了一个更简洁的答案:“not possible”