练习 - 在多个环境中使用 Bicep 参数
工作流部署到这两个环境后,即可与用于产品评论的第三方 API 集成。
网站团队已提供了网站应用于访问服务的 API 密钥和 URL。 测试和生产环境可以使用不同的值。 在本单元中,你将更新工作流,以使用产品评论 API 的正确设置配置每个环境。
在此过程中,你将:
- 为每个环境的评审 API 密钥创建机密。
- 使用每个环境的正确输入和机密值更新工作流。
- 更新 Bicep 文件以传播产品评论 API 所需的设置。
- 查看工作流结果和对 Azure 环境的更改。
添加机密
你决定将 API 密钥存储在 GitHub 机密中,以确保它们得到适当的保护。
在浏览器中,转到“设置”“机密和变量”>“操作”。
选择“新建存储库机密”按钮。
输入 REVIEW_API_KEY_TEST 作为机密名称,输入 sandboxsecretkey 作为值。
选择“添加机密”。
重复此过程以添加另一个名为 REVIEW_API_KEY_PRODUCTION 作为机密名称,将 productionsecretkey 作为值。 选择“添加机密”。
更新 deploy.yml 文件以使用新设置
在 Visual Studio Code 中,打开 deploy.yml 文件。
更新工作流触发器以包括
inputs
和secrets
设置的新值:on: workflow_call: inputs: environmentType: required: true type: string resourceGroupName: required: true type: string reviewApiUrl: required: true type: string secrets: AZURE_CLIENT_ID: required: true AZURE_TENANT_ID: required: true AZURE_SUBSCRIPTION_ID: required: true reviewApiKey: required: true
请注意,包含 API URL 作为输入,因为它们不是机密值。
在
validate
作业中,更新步骤以包含新的部署参数:jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - if: inputs.environmentType != 'Production' uses: azure/arm-deploy@v1 name: Run preflight validation with: deploymentName: ${{ github.run_number }} resourceGroupName: ${{ inputs.resourceGroupName }} template: ./deploy/main.bicep parameters: > environmentType=${{ inputs.environmentType }} reviewApiUrl=${{ inputs.reviewApiUrl }} reviewApiKey=${{ secrets.reviewApiKey }} deploymentMode: Validate - if: inputs.environmentType == 'Production' uses: azure/arm-deploy@v1 name: Run what-if with: failOnStdErr: false resourceGroupName: ${{ inputs.resourceGroupName }} template: ./deploy/main.bicep parameters: > environmentType=${{ inputs.environmentType }} reviewApiUrl=${{ inputs.reviewApiUrl }} reviewApiKey=${{ secrets.reviewApiKey }} additionalArguments: --what-if
更新
deploy
作业以包含新的部署参数:deploy: needs: validate environment: ${{ inputs.environmentType }} runs-on: ubuntu-latest outputs: appServiceAppHostName: ${{ steps.deploy.outputs.appServiceAppHostName }} steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/arm-deploy@v1 id: deploy name: Deploy Bicep file with: failOnStdErr: false deploymentName: ${{ github.run_number }} resourceGroupName: ${{ inputs.resourceGroupName }} template: ./deploy/main.bicep parameters: > environmentType=${{ inputs.environmentType }} reviewApiUrl=${{ inputs.reviewApiUrl }} reviewApiKey=${{ secrets.reviewApiKey }}
保存对该文件所做的更改。
更新 workflow.yml 文件以提供新设置
在 Visual Studio Code 中打开“workflow.yml”文件。
为每个环境添加
reviewApiUrl
输入和reviewApiKey
秘密:name: deploy-toy-website-environments concurrency: toy-company on: push: branches: - main workflow_dispatch: permissions: id-token: write contents: read jobs: # Lint the Bicep file. lint: uses: ./.github/workflows/lint.yml # Deploy to the test environment. deploy-test: uses: ./.github/workflows/deploy.yml needs: lint with: environmentType: Test resourceGroupName: ToyWebsiteTest reviewApiUrl: https://sandbox.contoso.com/reviews secrets: AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_TEST }} AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} reviewApiKey: ${{ secrets.REVIEW_API_KEY_TEST }} # Deploy to the production environment. deploy-production: uses: ./.github/workflows/deploy.yml needs: deploy-test with: environmentType: Production resourceGroupName: ToyWebsiteProduction reviewApiUrl: https://api.contoso.com/reviews secrets: AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID_PRODUCTION }} AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} reviewApiKey: ${{ secrets.REVIEW_API_KEY_PRODUCTION }}
保存对该文件所做的更改。
更新 Bicep 文件
打开 main.bicep 文件。
在文件中已有的参数下方,为新的评论 API 添加以下参数:
@description('The URL to the product review API.') param reviewApiUrl string @secure() @description('The API key to use when accessing the product review API.') param reviewApiKey string
更新
appServiceApp
资源定义以向应用程序提供评论 API URL 和密钥,以便网站代码可以使用它们:resource appServiceApp 'Microsoft.Web/sites@2022-03-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'APPINSIGHTS_INSTRUMENTATIONKEY' value: applicationInsights.properties.InstrumentationKey } { name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' value: applicationInsights.properties.ConnectionString } { name: 'ReviewApiUrl' value: reviewApiUrl } { name: 'ReviewApiKey' value: reviewApiKey } ] } } }
保存对该文件所做的更改。
使用以下命令提交更改并将其推送到 Git 存储库:
git add . git commit -m "Add new review API settings to Bicep file and workflow" git push
查看部署结果
在浏览器中,转到你的工作流运行。
选择最近的运行。
选择工作流的最新运行。
在“deploy-production / deploy”作业之前,等待作业暂停。 工作流可能需要几分钟时间才能达到这一点。
依次选择“查看部署”、“生产”和“批准并部署”来批准到生产环境的部署。
等待工作流完成运行。
选择“代码”,然后选择“生产”环境。
请注意,现在可以在环境历史记录中看到多个部署。
在浏览器中,转到 Azure 门户。
请转到 ToyWebsiteProduction 资源组。
在资源列表中,打开 Azure 应用服务应用。
选择“配置”。
选择“显示值”。
请注意,ReviewApiKey 和 ReviewApiUrl 设置值设置为你为生产环境配置的值。
将当前值与 ToyWebsiteTest 资源组中应用服务应用的配置设置进行比较。 请注意,这些值是不同的。
清理资源
完成练习后,可以删除资源,以便不再为这些资源付费。
在 Visual Studio Code 终端中,运行以下命令:
az group delete --resource-group ToyWebsiteTest --yes --no-wait
az group delete --resource-group ToyWebsiteProduction --yes --no-wait
资源组将在后台删除。
Remove-AzResourceGroup -Name ToyWebsiteTest -Force
Remove-AzResourceGroup -Name ToyWebsiteProduction -Force