我目前正在开发将部署在 Azure 静态 Web 应用上的 Blazor WebAssembly 应用程序。现在我需要创建我的 CI/CD 管道,并且有一种非常简单的方法可以使用 AzureStaticWebApp 任务来构建和发布应用程序,如下所示:
- task: AzureStaticWebApp@0
inputs:
app_location: 'App.Web'
app_build_command: 'dotnet build'
api_location: 'App.Api'
output_location: 'wwwroot'
azure_static_web_apps_api_token: $(deployment_token)
然而,此任务同时构建和发布应用程序。在我的管道中,我想构建我的 Blazor 应用程序并将其存储为工件。在我的管道的一个阶段,这个工件将发布到测试环境,如果所有测试都通过,那么另一个阶段将把这个工件发布到生产环境。目标是发布在生产环境中测试过的完全相同的工件。
有没有办法使用 AzureStaticWebApp 任务来完成此任务,或者有其他替代方法吗?
答案 0 :(得分:0)
我认为您可以在这样的一份工作中构建工件:
jobs:
- job: BuildWebsite
displayName: Build website
pool:
name: $(azdoPool)
steps:
- checkout: self
- task: Npm@1
displayName: npm install
inputs:
verbose: false
- powershell: |
npx gatsby build
displayName: build
- task: ArchiveFiles@2
displayName: package artifacts
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)/public/'
includeRootFolder: false
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/$(webPackageFile)'
- task: PublishPipelineArtifact@1
displayName: publish website artifact
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)/$(webPackageFile)'
ArtifactName: $(artifactName)
(注意上一个任务中的发布到工件)
然后在另一个工作中测试/部署:
parameters:
application: ''
jobs:
- job: DeployStaticWebsite
displayName: deploy
pool:
name: $(azdoPool)
steps:
- task: DownloadPipelineArtifact@2
displayName: Download $(webPackageFile)
inputs:
artifactName: $(artifactName)
targetPath: $(artifactExtractPath)
itemPattern: '**/$(webPackageFile)'
- task: ExtractFiles@1
inputs:
archiveFilePatterns: $(artifactExtractPath)/$(webPackageFile)
destinationFolder: $(artifactExtractPath)/extracted
displayName: extract website
- task: AzureStaticWebApp@0
displayName: Deploy App
inputs:
output_location: $(extractedZipPath)
azure_static_web_apps_api_token: $(deployTokenMercleCom)
skip_app_build: true
注意第一个任务如何从上一个任务下载工件/zip。
这两个作业应该由不同模板文件中的一个或多个阶段引用。像这样:
阶段:
阶段:构建 显示名称:构建 工作:
阶段:app1 显示名称:app1 变量: 应用程序:app1 部署令牌:$(deployTokenApp1) 工作:
阶段:app2 显示名称:app2 变量: 应用程序:app2 部署令牌:$(deployTokenApp2) 工作:
然后,您可以根据需要继续为 app3、app 4 添加阶段。他们都可以部署最初构建的相同工件。如果您想为每个阶段添加环境批准(以便您可以预先批准每个阶段部署),您可能还需要使用部署作业。
注意,这个 yaml 中的一些变量需要在这些模板示例运行之前定义