在 Azure VM 上使用 TFS 构建作为 Windows 服务和 Web Api 的持续研究
Continuous Dilvery as Windows Service and Web Api using TFS Build on Azure VM
我有 TFS 2015,我能够从分支自动化构建过程,并从 drop 文件夹中获取文件,如下所示:
它发布了多个项目,例如 Web API 和 Windows Service
我想要在 Azure VM 上自动执行部署过程 - 持续交付。
- 在 Azure VM 上的 IIS 上部署 Web API
- 在 Azure VM 上部署 Windows 服务。
- 运行 脚本 SQL.
我有 Azure VM 的凭据。我如何执行上述三个步骤。
我过去曾处理过类似的问题,因此可能可以帮助您(MSFT,如果有帮助的话)。
Web Api 在 Azure VM 上的 IIS 上
这几乎完全以 WinRM - IIS Web App Deployment task that you can find and add in your release definition. The link provides complete instructions on what parameters to provide and tweaks to be done for Azure VM compared to on-premise ones. There are a few prerequisites to running this task, like installing and configuring IIS on the VM which the documentation discusses in detail. As a necessary input to this task, you need to provide the web deploy package
which I am assuming was generated as your build output. If not, you can refer to SO post 的形式自动获得所需的输出。如果您希望在部署时修改 connection strings
等参数,请在上述任务中使用 parameters.xml
文件。
Windows Azure VM 上的服务
此要求没有完全自动化的任务,但它非常简单。它可以通过使用 PowerShell on Target Machines task along with Azure File Copy 任务来实现。对于第一个任务,作为输入所需的全部是您希望部署的 windows 服务的 .exe
,它应该作为构建过程(构建工件)的输出生成。此任务的大部分远程机器输入与前一个类似,因此您应该不会有任何问题。您需要在源代码中签入执行实际 windows 服务安装的 Powershell
脚本,作为同一个 windows 服务项目的一部分(复制本地 = True)。这将确保作为构建输出,您将有权访问可在第二个任务中使用的 powershell 脚本。需要 Azure 文件复制才能将 powershell 脚本复制到 Azure VM,以便 Powershell 任务可以执行它。假设您已将 powershell 脚本复制到 Azure VM 上的文件夹 C:\Data\
。
$serviceName = "MyWindowsService"
$exeFullName = "path\to\your\service.exe"
$serviceDisplayName = "MyWindowsService"
$pss = New-Service $serviceName $exeFullName -DisplayName $serviceDisplayName
-StartupType Automatic
将此内容添加到签入的 powershell 文件中并将其命名为 installWindowsService.ps1
。然后在 powershell 任务中提供要执行的 powershell 文件的路径 C:\Data\installWindowsService.ps1
.
运行 SQL Azure VM 上的脚本
我没有亲自处理过这个问题,所以我能做的就是为您指明正确的方向。如果您使用 DACPAC
进行 SQL 部署,您可以使用 WinRM - SQL Server Database Deployment task. If you just intend to execute scripts, use the remote powershell task from above and refer this post 来帮助您通过 powershell 使用 运行 SQL 命令脚本
您似乎希望 CD 发布过程获取您的 CI 构建发布的工件,然后将它们部署到 Azure VM 上的 IIS servers/Windows 服务。
如果您刚刚完成 CI 构建,那么您应该创建一个自动链接到构建定义的新发布定义。
打开 Releases 选项卡 Build & Release hub,打开版本定义列表中的 + 下拉菜单,然后选择创建发布定义。
- 对于 2,编写一个 powershell 脚本来处理这个问题,确保构建输出
可以从构建的“Drop”文件夹中复制
它们被复制到目标 VM 上的 C:\xxx\。更详细的步骤
请参考这个 blog.
- 对于 3,您可以使用 Azure SQL Database Deployment 任务。任何一个
select 自动化代理或 UNC 路径上的 SQL 脚本文件
自动化代理可以访问的。或者直接输入
针对 Azure SQL 服务器数据库对 运行 的内联 SQL 脚本。另请查看 tutorial.
可能并非所有任务都完全兼容 TFS2015 版本,您可以升级 TFS 版本以获得更多新功能或自定义您自己的 build/release 任务来处理它。
我有 TFS 2015,我能够从分支自动化构建过程,并从 drop 文件夹中获取文件,如下所示:
它发布了多个项目,例如 Web API 和 Windows Service
我想要在 Azure VM 上自动执行部署过程 - 持续交付。
- 在 Azure VM 上的 IIS 上部署 Web API
- 在 Azure VM 上部署 Windows 服务。
- 运行 脚本 SQL.
我有 Azure VM 的凭据。我如何执行上述三个步骤。
我过去曾处理过类似的问题,因此可能可以帮助您(MSFT,如果有帮助的话)。
Web Api 在 Azure VM 上的 IIS 上
这几乎完全以 WinRM - IIS Web App Deployment task that you can find and add in your release definition. The link provides complete instructions on what parameters to provide and tweaks to be done for Azure VM compared to on-premise ones. There are a few prerequisites to running this task, like installing and configuring IIS on the VM which the documentation discusses in detail. As a necessary input to this task, you need to provide the web deploy package
which I am assuming was generated as your build output. If not, you can refer to connection strings
等参数,请在上述任务中使用 parameters.xml
文件。
Windows Azure VM 上的服务
此要求没有完全自动化的任务,但它非常简单。它可以通过使用 PowerShell on Target Machines task along with Azure File Copy 任务来实现。对于第一个任务,作为输入所需的全部是您希望部署的 windows 服务的 .exe
,它应该作为构建过程(构建工件)的输出生成。此任务的大部分远程机器输入与前一个类似,因此您应该不会有任何问题。您需要在源代码中签入执行实际 windows 服务安装的 Powershell
脚本,作为同一个 windows 服务项目的一部分(复制本地 = True)。这将确保作为构建输出,您将有权访问可在第二个任务中使用的 powershell 脚本。需要 Azure 文件复制才能将 powershell 脚本复制到 Azure VM,以便 Powershell 任务可以执行它。假设您已将 powershell 脚本复制到 Azure VM 上的文件夹 C:\Data\
。
$serviceName = "MyWindowsService"
$exeFullName = "path\to\your\service.exe"
$serviceDisplayName = "MyWindowsService"
$pss = New-Service $serviceName $exeFullName -DisplayName $serviceDisplayName
-StartupType Automatic
将此内容添加到签入的 powershell 文件中并将其命名为 installWindowsService.ps1
。然后在 powershell 任务中提供要执行的 powershell 文件的路径 C:\Data\installWindowsService.ps1
.
运行 SQL Azure VM 上的脚本
我没有亲自处理过这个问题,所以我能做的就是为您指明正确的方向。如果您使用 DACPAC
进行 SQL 部署,您可以使用 WinRM - SQL Server Database Deployment task. If you just intend to execute scripts, use the remote powershell task from above and refer this post 来帮助您通过 powershell 使用 运行 SQL 命令脚本
您似乎希望 CD 发布过程获取您的 CI 构建发布的工件,然后将它们部署到 Azure VM 上的 IIS servers/Windows 服务。
如果您刚刚完成 CI 构建,那么您应该创建一个自动链接到构建定义的新发布定义。
打开 Releases 选项卡 Build & Release hub,打开版本定义列表中的 + 下拉菜单,然后选择创建发布定义。
- 对于 2,编写一个 powershell 脚本来处理这个问题,确保构建输出 可以从构建的“Drop”文件夹中复制 它们被复制到目标 VM 上的 C:\xxx\。更详细的步骤 请参考这个 blog.
- 对于 3,您可以使用 Azure SQL Database Deployment 任务。任何一个 select 自动化代理或 UNC 路径上的 SQL 脚本文件 自动化代理可以访问的。或者直接输入 针对 Azure SQL 服务器数据库对 运行 的内联 SQL 脚本。另请查看 tutorial.
可能并非所有任务都完全兼容 TFS2015 版本,您可以升级 TFS 版本以获得更多新功能或自定义您自己的 build/release 任务来处理它。