Azure DevOps:CI/CD 流程搭建(GitHub→Azure VM)
·
Azure DevOps:CI/CD流程搭建(GitHub→Azure VM)
以下是从GitHub代码仓库到Azure虚拟机的完整CI/CD流程搭建步骤,采用Azure DevOps实现自动化构建、测试和部署。
1. 环境准备
- Azure资源:
- 创建Azure VM(Linux/Windows)
- 开放SSH端口(Linux)或WinRM端口(Windows)
- 配置VM的公共IP或私有DNS
- GitHub仓库:
- 确保代码库包含应用文件(如
.NET Core、Node.js或Python项目)
- 确保代码库包含应用文件(如
- Azure DevOps:
- 创建新项目(如
GitHub-to-AzureVM) - 安装Azure Pipelines扩展
- 创建新项目(如
2. 配置服务连接
- GitHub连接:
- 在Azure DevOps中进入
项目设置→服务连接 - 选择
GitHub,授权OAuth访问仓库
- 在Azure DevOps中进入
- Azure VM连接:
- 创建
SSH(Linux)或WinRM(Windows)服务连接 - 输入VM的IP、用户名和密钥/密码
示例SSH连接参数:
connectionType: SSH host: 20.xxx.xxx.xxx username: azureuser privateKey: $(sshKey) # 密钥存储在变量库 - 创建
3. 创建CI构建管道
在Pipelines → 新建管道中:
- 步骤1:选择GitHub仓库
- 步骤2:配置YAML文件(示例
.NET Core应用)
trigger:
branches:
include: [ main ]
pool:
vmImage: 'ubuntu-latest'
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
displayName: '还原依赖'
inputs:
command: 'restore'
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: '构建项目'
inputs:
command: 'build'
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)'
- task: DotNetCoreCLI@2
displayName: '发布制品'
inputs:
command: 'publish'
publishWebProjects: true
arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
- 关键操作:
- 自动触发
main分支提交 - 生成可部署的制品(
zip或文件夹)
- 自动触发
4. 配置CD发布管道
在Releases → 新建发布管道:
- 阶段1:添加制品
- 选择CI生成的
drop制品
- 选择CI生成的
- 阶段2:部署到Azure VM
- 添加
SSH或Copy files任务
示例SSH部署任务:
- task: SSH@0 inputs: sshEndpoint: 'myVM-ssh-connection' # 预定义的SSH服务连接 runOptions: 'commands' commands: | cd /var/www unzip -o $(System.DefaultWorkingDirectory)/*.zip sudo systemctl restart myapp.service - 添加
- 验证机制(可选):
- 添加
运行测试脚本任务 - 使用
curl检查HTTP响应(如curl -I http://localhost:5000)
- 添加
5. 安全优化
- 密钥管理:
- 在
库→变量中存储敏感数据(如SSH密钥、API令牌) - 启用变量加密(🔒图标)
- 在
- 权限控制:
- 限制服务连接权限(
范围→特定管道) - 设置部署审批流程(如预生产环境需手动批准)
- 限制服务连接权限(
6. 验证流程
- 提交代码到GitHub
main分支 - 观察Azure DevOps自动触发:
- CI阶段:完成构建和制品生成
- CD阶段:日志显示文件传输和重启服务命令
- 访问VM公网IP验证应用状态
常见问题处理
| 问题类型 | 解决方案 |
|---|---|
| SSH连接超时 | 检查VM NSG规则是否允许22端口 |
| 文件权限错误 | 在部署脚本中添加sudo chown -R user:group /path |
| 服务启动失败 | 使用journalctl -u myapp.service查看日志 |
此流程支持扩展到多环境(如开发→测试→生产)。通过修改YAML的
trigger和stage配置,可实现分支策略(如feature/*仅触发测试环境)。
更多推荐
所有评论(0)