Visual Studio 团队服务中的多个作业部署
Multiple Jobs Deployment in Visual Studio Team Services
我有一个包含多个项目的 VS 解决方案,每个项目都是一个独立的 WebJob,我将其托管在单个 AppServices 中。我正在尝试将此自动化为 Continuous deployment.What 是在已更改的解决方案中仅部署作业的最佳策略吗?有没有办法找出作为合并的一部分更改为 CI 的项目?我们正在使用 git 并且此解决方案位于单个存储库中。我们正在为项目使用 azure-webjobsdk。
您可以按照以下步骤部署唯一更改的 webjob:
假设您的文件结构如下:
Git root
|___WebJob1
|___WebJob1.sln
|___webJob1
|___WebJob1.csproj
|___WebJob2
|___WebJob2.csproj
|___ …
|___WebJobn
|___WebJobn.csproj
1.添加一个变量(比如buildporj
,默认值为none
),用来记录变化的webJob工程包。
2。为 WebJob1/WebJob1.sln
.
添加 NuGet 恢复任务
3。使用 MSBuild 参数添加 Visual studio 构建任务:
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:SkipInvalidConfigurations=true /p:PackageLocation="$(Build.BinariesDirectory)\"
4.添加 PowerShell Task 以检测哪个 WebJob 项目更改并通过以下脚本将程序包从 $(Build.BinariesDirectory)
复制到 $(Build.ArtifactStagingDirectory)
:
$files=$(git diff HEAD HEAD~ --name-only)
echo "changed files: $files"
for ($i=0;$i -lt $files.Length; $i++)
{
$file=$files[$i] -split '/'
$files[$i]=$file[1]
}
$uni=$files | Get-Unique
$uni=@($uni | Where-Object {$_ -notmatch ".sln"})
echo "You changed the project (if more than one projects were changed, only deploy the first one): $uni"
$proj=$uni[0]+".zip"
Write-Host "##vso[task.setvariable variable=buildproj;]$proj"
Copy-Item $(Build.BinariesDirectory)$proj $(Build.ArtifactStagingDirectory)
- 通过将包或文件夹选项指定为
$(Build.ArtifactStagingDirectory)\**$(buildproj)
添加 Azure 应用服务部署任务。
您可以在单个解决方案中拥有不同的 WebJobs 项目(WebJob1.csproj、WebJob2.csproj),并且可以使用单个构建和发布管道进行部署。您需要做的就是:-
在您的构建解决方案步骤中定义:-
Visual Studio 生成(解决方案:***.sln,MSBuild 参数:
/p:DeployOnBuild=true /p:WebPublishMethod=包
/p:SkipInvalidConfigurations=true
/p:PackageLocation="$(build.artifactstagingdirectory)\")
发布构建工件(发布路径:$(build.artifactstagingdirectory);工件名称:drop;工件类型:服务器)
为此构建定义创建发布定义并添加任务
- Azure 应用服务部署
- Select 您的 Azure 订阅和应用服务名称;
- Select 您的包或文件夹:
$(System.DefaultWorkingDirectory)**\WebJob1.zip
您可以类似地为 WebJob2.zip 创建另一个 Azure 应用服务部署任务,并通过单个构建和发布管道部署任意数量的 Web 作业。
我有一个包含多个项目的 VS 解决方案,每个项目都是一个独立的 WebJob,我将其托管在单个 AppServices 中。我正在尝试将此自动化为 Continuous deployment.What 是在已更改的解决方案中仅部署作业的最佳策略吗?有没有办法找出作为合并的一部分更改为 CI 的项目?我们正在使用 git 并且此解决方案位于单个存储库中。我们正在为项目使用 azure-webjobsdk。
您可以按照以下步骤部署唯一更改的 webjob:
假设您的文件结构如下:
Git root
|___WebJob1
|___WebJob1.sln
|___webJob1
|___WebJob1.csproj
|___WebJob2
|___WebJob2.csproj
|___ …
|___WebJobn
|___WebJobn.csproj
1.添加一个变量(比如buildporj
,默认值为none
),用来记录变化的webJob工程包。
2。为 WebJob1/WebJob1.sln
.
3。使用 MSBuild 参数添加 Visual studio 构建任务:
/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:SkipInvalidConfigurations=true /p:PackageLocation="$(Build.BinariesDirectory)\"
4.添加 PowerShell Task 以检测哪个 WebJob 项目更改并通过以下脚本将程序包从 $(Build.BinariesDirectory)
复制到 $(Build.ArtifactStagingDirectory)
:
$files=$(git diff HEAD HEAD~ --name-only)
echo "changed files: $files"
for ($i=0;$i -lt $files.Length; $i++)
{
$file=$files[$i] -split '/'
$files[$i]=$file[1]
}
$uni=$files | Get-Unique
$uni=@($uni | Where-Object {$_ -notmatch ".sln"})
echo "You changed the project (if more than one projects were changed, only deploy the first one): $uni"
$proj=$uni[0]+".zip"
Write-Host "##vso[task.setvariable variable=buildproj;]$proj"
Copy-Item $(Build.BinariesDirectory)$proj $(Build.ArtifactStagingDirectory)
- 通过将包或文件夹选项指定为
$(Build.ArtifactStagingDirectory)\**$(buildproj)
添加 Azure 应用服务部署任务。
您可以在单个解决方案中拥有不同的 WebJobs 项目(WebJob1.csproj、WebJob2.csproj),并且可以使用单个构建和发布管道进行部署。您需要做的就是:-
在您的构建解决方案步骤中定义:-
Visual Studio 生成(解决方案:***.sln,MSBuild 参数: /p:DeployOnBuild=true /p:WebPublishMethod=包 /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\")
发布构建工件(发布路径:$(build.artifactstagingdirectory);工件名称:drop;工件类型:服务器)
为此构建定义创建发布定义并添加任务
- Azure 应用服务部署
- Select 您的 Azure 订阅和应用服务名称;
- Select 您的包或文件夹: $(System.DefaultWorkingDirectory)**\WebJob1.zip
您可以类似地为 WebJob2.zip 创建另一个 Azure 应用服务部署任务,并通过单个构建和发布管道部署任意数量的 Web 作业。