在Azure Pipeline中实现单次构建生成多个构件

89次阅读
没有评论

问题描述

在使用Azure Pipeline的过程中,用户在构建解决方案时遇到了一些困惑。用户的解决方案包含多个项目,其中有一个名为UI的项目,它包含了一个同时包含ASP.Net-Core WebApi和Angular的应用程序。

用户使用Build Solution任务进行构建,类似于以下内容:

steps:
- task: VSBuild@1
  displayName: 'Build solution'
  inputs:
    solution: '$(Parameters.solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'

用户想要创建两个构件(这个方法并不起作用):

steps:
- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: webapi'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)\\MVCProject\bin\$(BuildConfiguration)\netcorapp2.2'
    ArtifactName: webapi
    condition: succeededOrFailed()
- task: PublishBuildArtifacts@1
  displayName: 'Publish Artifact: angular'
  inputs:
    PathtoPublish: '$(build.artifactstagingdirectory)\\MVCProject\clientapp\dist'
    ArtifactName: angular
    condition: succeededOrFailed()

用户想知道自己做错了什么,或者有没有更好的方法来解决这个问题(将Angular移出项目并不是解决方案,他们目前不准备这样做)。

解决方案

对于从单次构建生成多个构件的问题,下面提供了一种解决方案。请注意,如果你的情况与此略有不同,你可能需要适当地进行调整。

解决方案示例

在这里,我们提供了一个Azure Pipeline的YAML示例,其中包含两个作业,分别用于构建和发布Web API和Angular构件。

jobs:
- job: build_webapi
  displayName: 'Build Web API Artifact'
  steps:
    - checkout: self
    - task: DotNetCoreCLI@2
      displayName: 'Build Web API'
      inputs:
        command: 'build'
        projects: '**/WebApiProject.csproj'
        arguments: '--configuration $(buildConfiguration)'
    # Other build-related steps for Web API

- job: build_angular
  displayName: 'Build Angular Artifact'
  steps:
    - checkout: self
    - script: npm install
      displayName: 'npm install'
      workingDirectory: 'AngularProject'
    - script: npm run build --prod
      displayName: 'npm run build (production)'
      workingDirectory: 'AngularProject'
    # Other build-related steps for Angular

在这个示例中,我们创建了两个作业,分别用于构建Web API和Angular构件。你可以根据自己的情况进行适当的修改。每个作业包含了构建所需的步骤,例如使用DotNetCoreCLI任务构建Web API,以及使用script任务执行npm相关命令构建Angular。

通过将构建和发布过程分为两个不同的作业,你可以更好地控制每个构建的流程,并确保构建和发布过程是独立的。如果你需要进一步的发布步骤,你可以在作业中添加相应的任务。

注意:在实际使用中,你可能需要根据项目的具体情况进行适当的调整。确保使用正确的项目文件路径、命令和参数。

这个示例演示了如何使用Azure Pipeline来构建和发布多个构件。你可以根据自己的需求进行进一步的定制。此外,如果你发现多个项目的构建和发布之间存在依赖关系,你还可以使用dependsOn属性来确保它们的执行顺序。

正文完