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 CoreNode.jsPython项目)
  • Azure DevOps
    • 创建新项目(如GitHub-to-AzureVM
    • 安装Azure Pipelines扩展
2. 配置服务连接
  • GitHub连接
    1. 在Azure DevOps中进入项目设置服务连接
    2. 选择GitHub,授权OAuth访问仓库
  • Azure VM连接
    1. 创建SSH(Linux)或WinRM(Windows)服务连接
    2. 输入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制品
  • 阶段2:部署到Azure VM
    • 添加SSHCopy 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. 验证流程
  1. 提交代码到GitHub main分支
  2. 观察Azure DevOps自动触发:
    • CI阶段:完成构建和制品生成
    • CD阶段:日志显示文件传输和重启服务命令
  3. 访问VM公网IP验证应用状态
常见问题处理
问题类型解决方案
SSH连接超时检查VM NSG规则是否允许22端口
文件权限错误在部署脚本中添加sudo chown -R user:group /path
服务启动失败使用journalctl -u myapp.service查看日志

此流程支持扩展到多环境(如开发→测试→生产)。通过修改YAML的triggerstage配置,可实现分支策略(如feature/*仅触发测试环境)。

更多推荐