次のプロジェクト/フォルダー構造でAzure Build Pipelineを実行すると、問題(望ましくない動作)が発生します。
私のリポジトリのルートフォルダーには2つのメインフォルダーがあります。
1つはバックエンド用、もう1つはフロントエンド用の2つの個別のAzure Pipelinesを構築しようとしているので、projects:
パラメータを使用して正しいパスを指定します。
build
コマンドとtest
コマンドは正常に実行され、backend
フォルダーの復元/構築/テストのみを行っていますが、両方のフォルダーに対してpublish
コマンドが実行されています。バックエンドとフロントエンド。
これは私のyamlファイルです:
#build backend project
task: DotNetCoreCLI@2
displayName: dotnet build --configuration $(buildConfiguration)
name: BuildBackendProject
inputs:
command: build
projects: '**/backend/**/*.csproj'
arguments: '--configuration $(buildConfiguration)'
... #run some tests
#publish backend project
task: DotNetCoreCLI@2
displayName: dotnet publish backend --configuration $(buildConfiguration)
name: PublishBackendProject
inputs:
command: publish
projects: '**/backend/**/*.csproj'
publishWebProjects: True
arguments: '--configuration $(BuildConfiguration) --output
$(Build.ArtifactStagingDirectory)/backend'
zipAfterPublish: True
別のフォルダパスを試しましたが、常に2つの発行コマンドが実行されています。
CMDでローカルに実行する場合dotnet publish backend
(リポジトリのルートフォルダーから)正常に動作しますが、Azureパイプラインでは動作しません。
どんなアイデアや修正も大歓迎です。
トリックは、publishWebProjects/projectsプロパティを使用することです。それらは実際には相互に排他的です。 publishWebProjects
が使用されている場合、projects
プロパティ値はスキップされます。
ドキュメント から:
Webプロジェクトの公開*:trueの場合、タスクはリポジトリー内のWebプロジェクトを検索し、それらに対して発行コマンドを実行しようとします。 Webプロジェクトは、ディレクトリ内のweb.configファイルまたはwwwrootフォルダーの存在によって識別されます。
したがって、公開用に次のコードを試すことができます。
task: DotNetCoreCLI@2
displayName: dotnet publish backend --configuration $(buildConfiguration)
name: PublishBackendProject
inputs:
command: publish
projects: '**/backend/**/*.csproj'
publishWebProjects: false
arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)/backend'
zipAfterPublish: true