端到端开发者工作流
将 GitHub Actions CI/CD、Azure Container Registry、Container Apps 和 Application Insights 连接起来,构建从提交到可观测生产环境的完整开发者内循环。
端到端开发者工作流 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
现代 Azure 开发者循环
现代 Azure 开发者工作流将源代码管理、CI/CD、容器基础设施和可观测性连接起来,形成从代码提交到生产环境可观测状态的无缝内循环。关键组件包括:GitHub(源代码)、GitHub 操作(构建和部署 pipeline)、Azure 容器注册表(映像存储)、Azure Container Apps(运行时)和Application Insights(可观测性)。每次更改都会在几分钟内从开发者笔记本自动进入生产环境,并且每个步骤都设有质量门禁。
第 1 步:源代码管理和分支策略
使用基于主干的开发策略或 GitFlow 分支策略,将代码组织在GitHub 仓库中。对于大多数微服务,基于主干的开发(短生命周期的功能分支每天合并到 main)可以减少集成冲突,并使 pipeline 保持简单。在 main 上使用分支保护规则,要求在合并前完成拉取请求审查并通过 CI 检查。CODEOWNERS 文件可确保对关键服务的更改必须经过相关团队高级工程师的批准。
# Example .github/CODEOWNERS
# Require payments-team review for any changes under /src/payments/
/src/payments/ @payments-team
/infrastructure/ @platform-team第 2 步:使用 GitHub 操作进行 CI
CI pipeline 会在每个拉取请求上运行。典型工作流为:签出代码 → 还原依赖项 → 运行单元测试 → 运行集成测试 → 构建 Docker 映像 → 推送到 Azure 容器注册表。映像会使用git 提交 SHA进行标记,以便追踪。使用从 GitHub 操作到 Azure 的基于 OIDC 的身份验证(通过联合身份),避免将 Azure 服务主体机密存储在 GitHub 中;这相当于用于 CI pipeline 的托管身份。
# .github/workflows/ci.yml (abbreviated)
name: CI
on: [pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to ACR
uses: azure/docker-login@v1
with:
login-server: myacr.azurecr.io
username: ${{ secrets.AZURE_CLIENT_ID }}
password: ${{ secrets.AZURE_CLIENT_SECRET }}
- name: Build and push image
run: |
docker build -t myacr.azurecr.io/myapi:${{ github.sha }} .
docker push myacr.azurecr.io/myapi:${{ github.sha }}第 3 步:持续交付到暂存环境
CI pipeline 在合并到 main 后成功完成时,CD pipeline 会自动部署到暂存环境。pipeline 会将 Container App 的映像标记更新为新构建的 SHA,等待新的修订版本变为正常运行状态,然后针对暂存 URL 运行冒烟测试。冒烟测试会验证关键 API 终结点是否返回预期响应。如果冒烟测试失败,pipeline 会将入口流量切回之前的修订版本,以执行回滚,无需任何人工干预。
# CD stage: update Container App to new image
- name: Deploy to staging
uses: azure/cli@v2
with:
azcliversion: latest
inlineScript: |
az containerapp update \
--name myapi-staging \
--resource-group myRG \
--image myacr.azurecr.io/myapi:${{ github.sha }}
- name: Run smoke tests
run: |
STAGING_URL=$(az containerapp show --name myapi-staging \
--resource-group myRG \
--query 'properties.configuration.ingress.fqdn' -o tsv)
curl -f https://$STAGING_URL/health || exit 1第 4 步:生产环境审批门禁
暂存环境验证完成后,CD pipeline 会在审批门禁处暂停。GitHub 操作的环境保护功能允许您为 production 环境配置必需的审阅者。pipeline 会向值班工程师发送 Slack 通知,由其在批准前审查暂存测试结果、差异以及所有未解决的事件。只有获得批准后,pipeline 才会继续将同一个映像 SHA 部署到生产环境。对于高流量或受监管的服务,这一人工参与环节至关重要。
# In GitHub: create 'production' environment with required reviewers
# .github/workflows/cd.yml (abbreviated)
jobs:
deploy-production:
environment:
name: production
url: https://myapi.contoso.com
needs: deploy-staging
steps:
- name: Deploy to production
uses: azure/cli@v2
with:
inlineScript: |
az containerapp update \
--name myapi \
--resource-group myRG \
--image myacr.azurecr.io/myapi:${{ github.sha }}第 5 步:生产环境可观测性
部署到生产环境后,Application Insights 会提供实时可见性。Application Insights SDK(或受支持运行时的自动检测)会跟踪:请求速率、失败率和延迟(三项黄金信号)、依赖项调用(数据库、Service Bus 和其他 API),以及带有完整堆栈跟踪的异常。Application Map 会将服务之间的调用关系可视化,并突出显示对失败或延迟贡献最大的依赖项。
# Python: Add Application Insights SDK
from opencensus.ext.azure.log_exporter import AzureLogHandler
from opencensus.ext.azure.trace_exporter import AzureExporter
from opencensus.trace.samplers import ProbabilitySampler
from opencensus.trace.tracer import Tracer
tracer = Tracer(
exporter=AzureExporter(connection_string='InstrumentationKey=<key>'),
sampler=ProbabilitySampler(1.0)
)将部署与跟踪关联起来
使用 Application Insights Annotate 在指标图表中标记部署事件。创建发布注释后(通过 GitHub 操作的 azure/appinsights-annotation 操作),它会作为一条垂直线显示在所有 Application Insights 指标图表上。这样可以立即看出延迟峰值或错误率上升是否与最近的部署相关,从而显著缩短事件期间的平均诊断时间(MTTD)。
# Create a release annotation in Application Insights
- name: Annotate release in App Insights
uses: azure/appinsights-annotation@v1
with:
appInsightsResourceName: myAppInsights
resourceGroupName: myRG
releaseName: '${{ github.run_id }}-${{ github.sha }}'错误率峰值时自动回滚
对于最具韧性的 pipeline,请实现自动回滚。生产部署后,pipeline 会等待 10 分钟,然后查询 Application Insights 获取错误率。如果错误率超过可配置的阈值(例如 >5%),pipeline 会自动更新 Container App 的入口流量,将 100% 的流量指向之前的修订版本,从而执行回滚。这种渐进式交付模式可以减小不良部署的影响范围,即使面对复杂或敏感的更改,团队也能更加放心地部署。
# Query App Insights error rate via REST (abbreviated)
QUERY='requests | where timestamp > ago(10m) | summarize failed = countif(success == false), total = count() | extend errorRate = round(100.0 * failed / total, 2)'
RESULT=$(az monitor app-insights query \
--apps myAppInsights \
--resource-group myRG \
--analytics-query "$QUERY" \
--query 'tables[0].rows[0][2]' -o tsv)
if [ $(echo '$RESULT > 5' | bc -l) -eq 1 ]; then
echo 'Error rate $RESULT% - rolling back!'
az containerapp ingress traffic set --name myapi --resource-group myRG --revision-weight stable=100
fi开发者效率:使用模拟器进行本地开发
开发者应能够在本地运行和测试完整技术栈,而无需连接到生产 Azure 资源。使用Azure 存储模拟器(Azurite)进行本地 Blob 和队列存储,使用Cosmos DB 模拟器进行本地数据库测试,并使用Service Bus 模拟器进行本地消息传递。AZURE_ENVIRONMENT=local 环境变量可以切换 DefaultAzureCredential,使其使用指向模拟器的连接字符串,而同一份代码在 Azure 中使用托管身份。Docker Compose 会在单个 docker compose up 中编排所有本地依赖项。
# docker-compose.yml for local development
services:
azurite:
image: mcr.microsoft.com/azure-storage/azurite
ports:
- '10000:10000'
- '10001:10001'
cosmos-emulator:
image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
ports:
- '8081:8081'开发者工作流中的安全性
将安全性集成到开发者工作流的每个阶段:Dependabot 会扫描拉取请求中的易受攻击依赖项;GitHub 高级安全(使用 CodeQL 进行代码扫描)会检测 SQL 注入和硬编码机密等漏洞;Microsoft Defender for DevOps 与 GitHub 集成,在代码更改旁显示 Azure 安全建议;ACR Defender 漏洞扫描会在每次推送后检查容器映像中的 OS 和应用层 CVE。安全发现会以拉取请求评论的形式显示,因此可以在合并前处理这些问题。
整合所有内容
完整的开发者工作流是一个持续反馈循环:开发者提交代码,CI 构建并测试容器映像,将带有提交 SHA 标记的映像推送到 ACR,CD 部署到暂存环境并运行冒烟测试,由人工批准生产部署,pipeline 部署到生产环境并创建发布注释,而 Application Insights 监控错误率,并在超过阈值时自动回滚。同一仓库中的基础设施即代码(Bicep 或 Terraform)可确保 pipeline、Container App 和监控配置与应用程序代码一同进行版本控制。
快速检查
测试您对本课中 Microsoft Azure Fundamentals (AZ-900) 概念的理解。
课程回顾
在本课中,您学到了:端到端开发者工作流连接了 GitHub 源代码管理、GitHub 操作 CI/CD、Azure 容器注册表、Container Apps 和 Application Insights;发布注释将部署与指标变化关联起来,从而更快诊断事件;基于错误率查询的自动回滚可以减小不良部署的影响范围。接下来,我们将进入考试准备阶段,全面复习云概念和 Azure 架构。
常见问题解答
「端到端开发者工作流」课时是免费的吗?
是的 — 「端到端开发者工作流」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「端到端开发者工作流」这节课中我会学到什么?
将 GitHub Actions CI/CD、Azure Container Registry、Container Apps 和 Application Insights 连接起来,构建从提交到可观测生产环境的完整开发者内循环。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「端到端开发者工作流」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。