在现代软件开发中,快速部署和高效的版本控制系统是非常关键的。通过利用 DevOps 流水线,开发团队可以实现自动化的持续集成和持续部署(CI/CD),从而加快从开发到生产的过程。本文将详细介绍如何利用 DevOps 流水线实现持续集成与部署,特别是结合 Azure DevOps 和 Azure Web Apps 的强大功能,以实现 .NET Core 应用的自动化 CI/CD。
什么是持续集成与持续部署
持续集成(Continuous Integration,简称 CI)是一种软件开发实践,指的是团队成员频繁地将他们的工作集成到主干,每次集成都通过自动化的构建(包括编译、测试)来验证,从而尽早发现集成错误。持续部署(Continuous Deployment,简称 CD)则是在持续集成的基础上,将每次集成后的代码自动部署到生产环境中。
持续集成与持续部署的优势

通过实施 CI/CD,开发团队可以显著提高开发效率和软件质量。具体优势包括:
Azure DevOps 与 Azure Web Apps
Azure DevOps 是一个提供开发、测试和部署服务的云平台,支持 Git 仓库、构建和发布流水线、测试计划和工件管理等功能。Azure Web Apps 是 Azure 提供的托管 Web 应用服务,支持多种编程语言和框架,包括 .NET Core、Java、Node.js 等。
步骤 1: 创建和测试 .NET Core 项目

首先,在本地安装 .NET Core 8.0。完成后,在终端运行以下命令创建一个新的 Web 应用项目:
dotnet new webapp n AzureWebApp framework net8.0
这将创建一个名为 "AzureWebApp" 的 .NET Core 项目。 接下来,进入项目目录并运行应用,确认其在本地运行正常:
cd AzureWebApp && dotnet run urls
步骤 2: 设置 Azure DevOps Repos

在 Azure DevOps 中创建一个新的 Repo,并将本地项目代码上传到此 Repo 中。确保也创建 dev、test 等分支,以模拟不同的开发和测试环境。 使用 Git 命令将本地项目代码提交到新建的 Azure DevOps Repo 中:
git remote add origin <repo_url>
git push u origin all
注意在 Azure DevOps 仓库中设置合适的权限,确保只有授权的用户可以访问和修改代码。这包括设置分支策略,如 pull request 审核、合并策略等。
步骤 3: 配置 Azure Web App
在 Azure 门户中创建一个新的 Azure Web App。选择适当的订阅和资源组,配置应用服务计划和运行时堆栈。
创建 Slots(部署槽)以支持不同环境的部署需求,如开发、测试和生产环境。每个槽都有独立的 URL,可以独立部署和测试。
步骤 4: 配置 Azure DevOps Selfhosted Agent
在 Azure DevOps 中创建一个新的 Agent Pool,并添加和配置 Selfhosted Agent。Selfhosted Agent 可以在本地或虚拟机中运行,提供更高的灵活性和控制。
在 Agent Pool 中添加新的 Agent,并按照指示下载和配置 Agent 软件。确保 Agent 可以访问 Azure DevOps 和 Azure Web App。
步骤 5: 配置 Service Conneions
在 Azure DevOps 中配置 Service Conneions,以便流水线可以访问 Azure 资源。创建一个新的 Azure Resource Manager 服务连接,并提供适当的订阅和资源组权限。
确保服务连接配置正确,并且流水线可以使用它来部署应用。
步骤 6: 编写和保存 Pipeline
在 Azure DevOps 中创建一个新的 Pipeline,并编写 YAML 文件定义流水线的步骤。以下是一个示例 YAML 文件:
trigger:
dev
pool:
vmImage: 'ubuntulatest'
steps:
task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '8.x'
installationPath: $(Agent.ToolsDireory)/dotnet
script: dotnet build configuration $(buildConfiguration)
displayName: 'Build proje'
task: DotNetCoreCLI@2
displayName: Publish
inputs:
command: 'publish'
projes: 'AzureWebApp/AzureWebApp.csproj'
publishWebProjes: true
arguments: 'configuration $(buildConfiguration) output $(Build.ArtifaStagingDireory)'
zipAfterPublish: true
task: PublishBuildArtifas@1
displayName: Publish Artifas
inputs:
PathtoPublish: '$(Build.ArtifaStagingDireory)'
ArtifaName: 'drop'
publishLocation: 'Container'
task: AzureWebApp@1
inputs:
azureSubscription: '$(azureSubscription)'
appType: 'webApp'
appName: '$(appName)'
package: '$(Build.ArtifaStagingDireory)//.zip'
完成这些步骤后,每次在 AzureWebApp Repo 的 dev 分支进行代码提交时,都会自动触发 CI/CD 流程,从而实现代码的自动构建和部署。
通过结合 Azure DevOps 和 Azure Web Apps 的强大功能,可以实现 .NET Core 应用的自动化 CI/CD。这不仅优化了开发流程,提高了部署效率,还增强了产品的可靠性和团队的生产力。通过这种方法,团队可以更快地将创新推向市场,同时确保高质量的软件交付。
持续集成和持续部署的实践是现代云应用开发的基石,利用 Azure DevOps 和 Azure Web Apps 可以支撑这一需求,帮助团队实现敏捷、高效的开发周期。希望本文能为您在实际项目中实施 CI/CD 提供有价值的参考。