使用 Azure DevOps 和 Azure Web Apps 进行 .NET Core 应用的 CI/CD

news2024/9/25 1:23:38

概览

在现代软件开发中,快速部署和高效的版本控制系统是非常关键的。通过利用 Azure DevOps 和 Azure Web Apps,开发团队可以实现自动化的持续集成和持续部署(CI/CD),从而加快从开发到生产的过程。接下来我们一步步来通过对Azure Devops+Azure WebApp配置,进行对 .NET Core 8.0 应用的 CI/CD。

步骤 1: 创建和测试 .NET Core 项目

1.1 创建项目:

首先,在本地安装 .NET Core 8.0。完成后,在终端运行以下命令创建一个新的 Web 应用项目:

dotnet new webapp -n AzureWebApp --framework net8.0
来创建一个测试dotnet core项目 ’AzureWebApp‘

注意点:

  • 版本兼容性:确保本地开发环境中安装的 .NET Core 版本与项目中使用的目标框架版本一致。版本不匹配可能导致运行时错误。
  • 安全性配置:在运行项目时,注意应用程序的安全配置,特别是当配置 HTTPS 本地测试服务器时。了解如何管理和应用 SSL 证书是很重要的。

1.2 运行和测试

进入项目目录,使用以下命令启动应用,确认其在本地运行正常:
cd AzureWebApp && dotnet run --urls=https://localhost:5001

步骤 2: 设置 Azure DevOps Repos

在 Azure DevOps 中创建一个新的 Repo,并将本地项目代码上传到此 Repo 中。确保也创建dev、test 等分支,以模拟不同的开发和测试环境。

2.1 创建仓库

创建Repo 指定Repo Name


2.2 提交代码

使用 Git 命令将本地项目代码提交到新建的 Azure DevOps Repo 中。

2.3 分支管理

创建多个分支,如 dev和 test,以支持不同环境的开发和测试需求。

注意点:

  • 权限管理:在 Azure DevOps 仓库中设置合适的权限,确保只有授权的用户可以访问和修改代码。这包括设置分支策略,如 pull request 审核、合并策略等。
  • 仓库结构:合理组织仓库结构,明确分支命名规范,可以有效支持多环境的开发和部署流程。

步骤 3: 配置 Azure Web App

在 Azure 中创建一个 Web App,选择 .NET 8 作为运行堆栈,并选择 Windows 作为操作系统。为了模拟生产环境,为不同的开发和测试环境创建相应的 Slots。

3.1 创建WebApp

选择所用语言对应的运行堆栈和操作系统,由于我们用dotnet core8来演示,所以选择创建dotnet 8 的runtime和windows的os

3.2 创建Slots

创建slot区分不同环境。我们规定webapp为正式生产环境,dev、test slot为开发测试环境等。

注意点:

  • 成本控制:在选择服务计划时考虑应用的规模和预期负载,以免产生不必要的成本。
  • 环境变量和配置:正确设置环境变量和应用配置,确保它们在 Azure Web App 中正确无误地被应用,尤其是数据库连接字符串和 API 密钥等敏感信息。

步骤 4: 配置 Azure DevOps Self-hosted Agent

在 Azure DevOps 中创建一个自托管的 Agent Pool 并添加相应的 Agent。这允许更细粒度的控制构建环境,以及更好的性能。

4.1 创建Agent Pool

在 Azure DevOps 中创建一个自托管的 Agent Pool。

4.2 添加和配置Agent

向 Agent Pool 中添加 Agent,并按照 Azure DevOps 提供的指南进行配置,以确保它可以正常运行和处理任务。

按照教程执行即可

安装并按提示配置agent

注意点:

  • 网络配置:确保自托管 Agent 有稳定且安全的连接到 Azure DevOps 和 Azure 资源。配置适当的网络安全组和防火墙规则。
  • 维护和更新:定期检查和更新自托管 Agent 的软件,确保安全漏洞被及时修补,性能和兼容性得到优化。

步骤 5: 配置 Service Connections

使用 Azure Resource Manager 和 Service Principal 方式,设置和配置 Service Connection。确保选择正确的 Azure 订阅和资源组,确保你的 pipeline 能够访问和部署到 Azure 资源。

注意点:

  • 最小权限原则:为 Service Connection 配置的服务主体 (SP) 应只授予执行所需任务的最小权限,避免过度权限带来的安全风险。
  • 监控和审计:监控 Service Connection 的使用情况,及时审计其活动,以便追踪可能的异常行为或配置错误。

步骤 6: 编写和保存 Pipeline

配置 Pipeline 如下,确保包含两个主要阶段:Build 和 Deploy。Build 阶段负责项目的构建和发布,Deploy 阶段则将构建的成果部署到 Azure Web App。

```yaml

# 触发配置:当 dev 分支有新的提交时触发此 pipeline
trigger:
branches:
include:
- dev

# 额外的仓库资源配置,自动触发 pipeline 当 AzureWebApp 的 dev 分支有更新
resources:
repositories:
- repository: AzureWebApp
type: git
name: CICD-test/AzureWebApp
ref: refs/heads/dev
trigger:
branches:
include:
- dev

# 指定使用的代理池名称,这里是自托管的代理池
pool:
name: selfhostedpool

# 定义构建和部署中使用的变量
variables:
buildConfiguration: 'Release'
projectName: 'AzureWebApp'
webAppName: 'xxxx-webapp'
webAppSlot: 'dev'
azureSubscription: 'xxxx-sub‘
serviceConnection: 'xxxx-sc'
RgName: 'xxxxx-rg'

# 定义 pipeline 的阶段,这里定义了构建和部署两个阶段
stages:
- stage: Build
displayName: Build stage
jobs:
- job: BuildJob
displayName: Build job
steps:
- checkout: self # 检出包含 pipeline 定义的仓库
- checkout: AzureWebApp # 检出 AzureWebApp 仓库

# 列出检出后的目录结构,以验证结构
- script: ls -R
displayName: 'List directory structure after checkout'

# 安装指定版本的 .NET SDK
- task: UseDotNet@2
displayName: 'Install .NET SDK'
inputs:
packageType: 'sdk'
version: '8.0.x'
installationPath: $(Agent.ToolsDirectory)/dotnet

# 设置环境变量以确保使用正确的 .NET SDK
- script: echo "##vso[task.setvariable variable=DOTNET_ROOT]$(Agent.ToolsDirectory)/dotnet"
displayName: 'Set DOTNET_ROOT'

# 将 .NET Core SDK 路径添加到 PATH 环境变量,确保命令行可以找到它
- script: echo "##vso[task.prependpath]$(Agent.ToolsDirectory)/dotnet"
displayName: 'Prepend .NET Core to PATH'

# 检查当前使用的 .NET SDK 版本
- script: dotnet --version
displayName: 'Check .NET SDK version'

# 还原项目依赖
- task: DotNetCoreCLI@2
displayName: Restore
inputs:
command: 'restore'
projects: 'AzureWebApp/AzureWebApp.csproj'

# 构建项目
- task: DotNetCoreCLI@2
displayName: Build
inputs:
command: 'build'
projects: 'AzureWebApp/AzureWebApp.csproj'
arguments: '--configuration $(buildConfiguration)'

# 发布项目,并将输出打包
- task: DotNetCoreCLI@2
displayName: Publish
inputs:
command: 'publish'
projects: 'AzureWebApp/AzureWebApp.csproj'
publishWebProjects: true
arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)'
zipAfterPublish: true

# 发布构建产物到 Azure DevOps 服务器
- task: PublishBuildArtifacts@1
displayName: Publish Artifacts
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'

# 部署阶段,依赖于构建阶段的成功完成
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeploymentJob
displayName: Deploy job
environment: '$(webAppName)-$(webAppSlot)'
strategy:
runOnce:
deploy:
steps:
# 使用 Azure 资源管理器服务连接部署应用到 Azure Web App
- task: AzureRmWebAppDeployment@4
displayName: Deploy to Azure Web App
inputs:
ConnectionType: 'AzureRM'
azureSubscription: $(serviceConnection)
appType: 'webApp'
ResourceGroupName: $(RgName)
WebAppName: $(webAppName)
DeployToSlotOrASE: true
SlotName: $(webAppSlot)
Package: '$(Pipeline.Workspace)/drop/*.zip'

```

完成这些步骤后,每次在 AzureWebApp Repo 的 dev 分支进行代码提交时,都会自动触发 CI/CD 流程,从而实现代码的自动构建和部署。

CICD完成后可以登陆azure portal 通过slot或者webapp的default domain访问来进行测试是否成功

注意点:

  • 错误处理和日志:在 Pipeline 脚本中添加适当的错误处理逻辑和详细的日志记录,这将有助于问题的快速定位和修复。
  • 版本控制和标签:使用版本控制和自动标签来管理发布,这有助于追踪各个版本的变化和快速回滚到先前的稳定版本。

总结

本文章展示了如何结合 Azure DevOps 和 Azure Web Apps 的强大功能,以实现 .NET Core 应用的自动化 CI/CD。这不仅优化了开发流程,提高了部署效率,还增强了产品的可靠性和团队的生产力。通过这种方法,团队可以更快地将创新推向市场,同时确保高质量的软件交付。持续集成和持续部署的实践是现代云应用开发的基石,利用 Azure DevOps 和 Azure Web Apps 可以有效支撑这一需求,帮助团队实现敏捷、高效的开发周期。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1701280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥

系列文章目录 更新ing... MySQL操作全攻略:库、表、数据、事务全面指南深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥MySQL SELECT查询实战:练习题精选,提升你的数据库查询技能PyMySQL:连接P…

灯塔工厂产业数字化平台解决方案(50页PPT)

方案介绍: 随着工业4.0和智能制造的快速发展,传统工厂正面临着转型升级的迫切需求。为了提升生产效率、优化资源配置、增强市场竞争力,我们推出了灯塔工厂产业数字化平台解决方案。该方案旨在通过先进的信息技术手段,将传统工厂转…

感谢信∣高成长型动力电池供应商『华鼎国联』采购管理平台项目上线,企企通SRM加速新能源汽车发展新质生产力

近日,企企通收到来自华鼎国联四川动力电池有限公司(以下简称“华鼎国联”)的感谢信,对企企通团队在采购数字化项目实施中所付出的努力表示感谢。 华鼎国联在感谢信中特别指出,回首披荆斩棘的2023年,企企通的…

通过css实现------简单边框流动特效

效果展示 代码部分 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice…

阿里云产品DTU评测报告(三)

这阿里云产品DTU评测报告&#xff08;三&#xff09; 连接物联网平台创建项目 连接物联网平台 在开始连接物联网平台之前&#xff0c;首先需要下载开发工具Visual Studio Code 开发工具&#xff0c;开发工具可以到https://code.visualstudio.com/ 去查找下载&#xff0c;下载完…

9.Redis之list类型

list相当于链表、数据表 1.list类型基本介绍 列表中的元素是有序的"有序"的含义,要根据上下文区分~~有的时候,谈到有序,指的是"升序","降序”有的时候,谈到的有序,指的是, 顺序很关键~~如果把元素位置颠倒,顺序调换.此时得到的新的 List 和之前的 Li…

神奇动物在哪里?斯洛文尼亚旅游之野生动物寻踪

不仅拥有优美动人的自然风光&#xff0c;斯洛文尼亚还以其丰富的生物多样性而闻名。得益于国家对大自然开展的保护工作&#xff0c;斯洛文尼亚超过三分之一的国土面积都被规划为保护区&#xff0c;拥有约1.5万种动物和6000种植物&#xff0c;其中不乏众多特有、稀有和濒危动植物…

如何选择一款开放式耳机?六大独家选购技巧超详细汇总!

​喜欢户外活动的朋友们&#xff0c;你们都是懂得享受生活的达人吧&#xff01;想象一下&#xff0c;在户外活动时&#xff0c;如果能有一副既适合场景又提供超棒音乐体验的耳机&#xff0c;那该多完美啊&#xff01;这时候&#xff0c;开放式耳机就闪亮登场了&#xff01;它的…

存储方式 - 前端学习

1. cookie是什么&#xff1f;你了解cookie吗&#xff1f; 在计算机领域中&#xff0c;特指一种由服务器发送到用户浏览器并保存在用户计算机上的小型文本文件。这个文件可以被服务器用来识别用户身份、跟踪用户活动、保存用户设置等。它通常由名称、值、域名、路径、过期时间等…

外贸邮箱怎么注册

外贸邮箱指的是用于外贸业务的电子邮箱&#xff0c;其功能比一般的电子邮箱更加专业化。注册外贸邮箱既能提高工作效率&#xff0c;又能展示企业的专业性。那么如何注册外贸邮箱呢&#xff1f;本文将详细介绍注册外贸邮箱的步骤和注意事项。 一、选择邮箱服务商 注册外贸邮箱首…

【408真题】2009-19

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

byzer plugin install log

离线插件参考地址&#xff1a; Byzer Documentation 离线安装方式&#xff08;错误过程记录&#xff09;&#xff1a; 参考文档&#xff1a;https://docs.byzer.org/#/byzer-lang/zh-cn/extension/README Byzer-lang 支持插件安装&#xff0c;删除&#xff0c;获取列表等。安装…

力扣hot100:146. LRU 缓存

力扣hot100&#xff1a;146. LRU 缓存 听说华为实习笔试考了这题 如何使得插入操作时 O ( 1 ) O(1) O(1)呢&#xff1f;我们需要维护一个时间的长短&#xff0c;以便于取出离现在最长的时间&#xff0c;这个时间比较容易实现&#xff0c;我们维护一个time表示当前时间&#x…

OrangePi AIpro开箱评测

开箱评测 有幸受邀参与了CSDN与OrangePi组织的评测活动&#xff0c;今天刚收到快递。拆开快递能看到保护盒、电源、双头typec线这三样&#xff08;充电器和线有保护膜的我先拆掉了&#xff09; 打开保护盒&#xff0c;能看到上下两块黑色海棉包裹的开发板&#xff08;保护得不…

Java学习【面向对象综合练习——实现图书管理系统】

Java学习【面向对象综合练习——实现图书管理系统】 前期效果图书的创建用户的创建操作的实现完善操作显示图书查找图书新增图书借阅图书归还图书删除图书 前期效果 用户分为普通用户和管理员&#xff0c;登录进系统之后可以对图书进行一系列操作&#xff0c;此时我们要明白&am…

集成Vision Transformer 的概率模型改进了复杂的息肉分割

文章目录 标题摘要方法实验结果 标题 摘要 结直肠息肉在结肠镜检查中被发现&#xff0c;与结直肠癌密切相关&#xff0c;因此息肉分割是诊断和治疗计划的重要临床决策工具。然而&#xff0c;准确的息肉分割仍然是一个具有挑战性的任务&#xff0c;尤其是在涉及微小息肉和其他…

白酒瓶子上的“10781”代表什么?识别粮食酒的3大秘密,买酒也简单

酒瓶子上即便是有“10781”,也不一定是粮食酒! 这可是不少朋友常犯的一个小迷糊。我曾经也经历过这样的误区,直到和一个对酒超级痴迷的哥们儿逛超市,才让我开了窍。 那天,他带了一瓶茅台,在那坐看又看“这茅子,是假的?怎么不是粮食酒呢,都没有10781呢?” 我当时心里还犯嘀咕…

中国大型相亲交友婚恋平台有哪些?测评5款大型恋爱脱单处对象软件

现今呀&#xff0c;生活节奏那是蹭蹭加快&#xff0c;时间也超紧张&#xff0c;工作压力更是山大&#xff01;想要成功脱单&#xff0c;找到一个真正契合的伴侣真的不是一件容易的事儿呢。不过呢&#xff0c;好在随着科技不断地持续发展&#xff0c;社交平台已经变成了一种超流…

windows 11 23H2更新总是失败解决过程

频繁更新失败的困扰 最近一个月以来 windows 11 系统 23H2 更新总是失败&#xff0c;更新失败会撤销更改: 之后会自动重启系统&#xff0c;但是重启进不去系统&#xff0c;屏幕有背光但是不显示任何内容。 这时候只能长按开机键强制关机。每次出现这种情况我都没办法远程连接到…

如果查看svn的账号和密码

一、找到svn存放目录&#xff08;本地默认存放SVN用户信息的目录为&#xff1a;C:\Users\Administrator\AppData\Roaming\Subversion\auth\svn.simple&#xff09;每个人的电脑环境不一样&#xff0c;因人而异。 如果找不到直接搜索svn.simple 二、下载密码查看工具 链接: 百…