1

複数のプロジェクトを持つVSソリューションがあります。各プロジェクトは、単一のAppServicesでホストしている独立したWebJobです。私はこれをContinuous deploymentに自動化しようとしています。変更されたソリューションにジョブのみを導入するための最良の戦略は何でしょうか? CIへのマージの一部として変更されたプロジェクトを見つける方法はありますか?私たちはgitを使用しており、このソリューションは単一のリポジトリにあります。プロジェクトにはazure-webjobsdkを使用しています。複数のジョブVisual Studio Team Servicesでの展開

+0

あなたVSTSは今定義を構築する何ですか? Azure App Service Deployタスクを使用してWebジョブを展開しますか? –

+0

私は今のところ持っていませんが、App Service Deployタスクで単一のソリューションから複数のWebジョブを展開できますか? –

+0

いいえ、App Service Deployタスクで1つのWebジョブをデプロイすることしかできません。変更されたwebjobプロジェクトを展開するための回答を追加しました。試してみることができます。 –

答えて

1

あなたが唯一の変更webjobを展開する手順の下に従うことができます:

は、以下のようにあなたのファイル構造を仮定します

Git root 
    |___WebJob1 
      |___WebJob1.sln 
      |___webJob1 
       |___WebJob1.csproj 
      |___WebJob2 
       |___WebJob2.csproj 
      |___ … 
      |___WebJobn 
       |___WebJobn.csproj 

1.変数(例えば、デフォルト値nonebuildporjなど)を追加します。変更されたWebJobプロジェクトパッケージを記録します。

2. WebJob1/WebJob1.slnのNuGet復元タスクを追加します。

3 MSBuildの引数でVisual Studioのビルドタスクを追加します。

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:SkipInvalidConfigurations=true /p:PackageLocation="$(Build.BinariesDirectory)\\" 

enter image description here

4. WebJobプロジェクトが変更された検出およびへ$(Build.BinariesDirectory)からパッケージをコピーするにPowerShellのタスクを追加します。 $(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 

[email protected]($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. Azure App Serviceタスクを追加するには、パッケージまたはフォルダオプションを$(Build.ArtifactStagingDirectory)\**\$(buildproj)と指定します。

enter image description here

関連する問題