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)
  1. 通过将包或文件夹选项指定为 $(Build.ArtifactStagingDirectory)\**$(buildproj) 添加 Azure 应用服务部署任务

您可以在单个解决方案中拥有不同的 WebJobs 项目(WebJob1.csproj、WebJob2.csproj),并且可以使用单个构建和发布管道进行部署。您需要做的就是:-

在您的构建解决方案步骤中定义:-

  1. Visual Studio 生成(解决方案:***.sln,MSBuild 参数: /p:DeployOnBuild=true /p:WebPublishMethod=包 /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\")

  2. 发布构建工件(发布路径:$(build.artifactstagingdirectory);工件名称:drop;工件类型:服务器)

为此构建定义创建发布定义并添加任务

  1. Azure 应用服务部署
  2. Select 您的 Azure 订阅和应用服务名称;
  3. Select 您的包或文件夹: $(System.DefaultWorkingDirectory)**\WebJob1.zip

您可以类似地为 WebJob2.zip 创建另一个 Azure 应用服务部署任务,并通过单个构建和发布管道部署任意数量的 Web 作业。