我是 DevOps 新手,对此感到震惊。我正在为该项目开发基础设施即代码,该项目具有多个 API、一个 Angular、一个数据库项目和一些其他组件。
我已经创建了 - 用于将资源部署到 Azure 的 ARM 模板 用于构建代码并将其部署到应用程序的 YAML 文件。
我不知道如何对这些任务进行分组。我需要在 ARM 模板部署完成后触发 yaml Pipeline,并将 WebApp 名称传递给管道,以便可以部署 Artifacts。
感谢您提前提供的帮助。
最佳答案
与往常一样,我们不会单独执行 ARM 模板部署任务和 Azure 应用服务部署任务。在第一阶段执行ARM部署,然后在第二阶段,获取上一阶段输出的WebsiteName
或ResourceGroupName
:
对于 YAML,您应该像这样配置它(这只是部分定义,用于显示使用 YAML 部署 ARM
和 APP
的关键代码):
variables:
WebAppName: {the webapp name you want to used}
stages:
- stage: ARMdeploy
jobs:
- job: ARM
steps:
- checkout: none
- task: AzureResourceGroupDeployment@2
inputs:
azureSubscription: '{Subscription name}'
action: 'Create Or Update Resource Group'
resourceGroupName: '{resource group name }'
location: 'Central US'
templateLocation: 'Linked artifact'
csmFile: '{json file}'
overrideParameters: '-webAppName $(WebAppName)'
deploymentMode: 'Incremental'
- stage: APPdeploy
dependsOn: ARMdeploy
condition: succeeded()
jobs:
- job: APP
steps:
- task: AzureRmWebAppDeployment@4
displayName: 'Azure App Service Deploy: MerlinAngular-webapp'
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '{Subscription name}'
appType: 'webApp'
WebAppName: '$(WebAppName)'
packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
在我的 ARM json 文件中,我定义了参数名称 webAppName
,并使用来自任务的值,而不是使用 parameter.json
文件
并在 YAML 配置中,使用 overrideParameters: '-WebAppName $(WebAppName)'
覆盖此参数值。由于 WebAppName
是一个预定义变量,可以在一个发布管道的所有阶段获取值。另外,我将APP部署阶段
设置为取决于ARM部署阶段
的成功。现在,ARM 部署完成后,WebApp 名称将传递给作业,以便可以使用此 WebApp 名称来部署 APP。
但是,由于您没有展示您的 ARM 模板结构如何,如果您在 parameter.json
文件中定义了 WebApp 名称,则需要安装扩展 ARM Outputs然后在 ARM 模板部署完成后使用任务 ARM Outputs
获取此 WebApp name
变量。
此任务可以将 ARM 部署的所有输出转换为变量,现在您仍然可以使用 $(xxx)
将值传递给 APP 部署任务。
希望这些方法可以帮助到您。
关于azure - 使用 ARM 模板创建 Azure Web 应用程序后,我们可以将 Web 应用程序名称作为参数传递给 YAML 管道吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57884094/