Azure DevOps 发布.Net项目到Windows IIS站点之Azure项目发布内网VM

当你有一个需求,需要通过Azure DevOps发布到一个没有公网的VM的时候,你将需要使用以下脚本

trigger:
- master  # 触发器设置为master分支,当master分支有更新时,自动执行此流程

pool:
  vmImage: 'windows-2022'  # 指定运行此流程的虚拟机镜像为windows-2022

variables:
  # 定义了一系列变量,用于在后续步骤中使用
  - name: Build.ArtifactStagingDirectory
    value: '$(Build.Repository.LocalPath)\artifacts'
  - name: buildConfiguration
    value: 'Release'
  - name: publishFolder
    value: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId)'
  - name: solution
    value: '项目.sln'
  - name: zipFileName
    value: '压缩包xxx.zip'
  - name: storageAccountName
    value: 'storagea名称'
  - name: resourceGroupName
    value: '资源组'
  - name: vmName
    value: 'VM虚拟机名称'
  - name: shareName
    value: 'storage目录'
  - name: destPath
    value: "目录地址"

stages:
- stage: Build
  displayName: Build stage  # 构建阶段的显示名称
  jobs:
  - job: Build
    displayName: 'Build job'  # 构建作业的显示名称
    steps:
    - script: dotnet restore $(solution)
      displayName: 'Build solution'  # 恢复解决方案的依赖项

    - script: dotnet publish $(solution) --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)
      displayName: 'Publish solution'  # 发布解决方案到指定目录

    - task: ArchiveFiles@2
      inputs:
        rootFolderOrFile: '$(Build.ArtifactStagingDirectory)'
        includeRootFolder: false
        archiveType: 'zip'
        archiveFile: '$(Build.ArtifactStagingDirectory)\$(zipFileName)'
        replaceExistingArchive: true  # 将发布的文件打包成zip格式

    - script: |
        echo "===== Listing files in ArtifactStagingDirectory ====="
        ls "$(Build.ArtifactStagingDirectory)"
        echo "===== Finished listing files ====="
      displayName: 'List files in ArtifactStagingDirectory'  # 列出ArtifactStagingDirectory目录下的文件,用于调试

    - task: PublishBuildArtifacts@1
      inputs:
        pathtoPublish: '$(Build.ArtifactStagingDirectory)'
        artifactName: 'drop'
        publishLocation: 'Container'  # 发布构建产物到Azure DevOps

- stage: Deploy
  displayName: 'Deploy to IIS on Azure VM using ARM'
  jobs:
  - deployment: DeployJob
    displayName: 'Deploy'
    environment: 'YourEnvironmentName'  # 指定部署环境的名称
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadBuildArtifacts@0
            inputs:
              buildType: 'current'
              downloadType: 'single'
              artifactName: 'drop'
              downloadPath: '$(System.ArtifactsDirectory)'  # 下载构建产物

          - task: AzurePowerShell@5
            inputs:
              azureSubscription: 'PublishAreaDts'
              azurePowerShellVersion: LatestVersion
              ErrorActionPreference: 'Continue'
              ScriptType: 'InlineScript'
              Inline: |
                # 后续为PowerShell脚本,用于在Azure VM上部署应用
                # 脚本包括验证文件路径、检查文件是否存在、获取存储账户和文件共享、上传文件到存储账户、生成SAS令牌、在目标VM上执行脚本等步骤
            env:
              ArtifactStagingDirectory: $(Build.ArtifactStagingDirectory: $(Build.ArtifactStagingDirectory)  # 设置环境变量,供脚本使用

结尾

这个YAML脚本利用了Azure DevOps的CI/CD(持续集成/持续部署)能力,自动化了从代码提交到部署的整个流程。CI/CD是现代软件开发实践中的一个核心概念,它使得软件的构建、测试和部署过程更加快速、自动化和可靠。

持续集成(CI):频繁地(一天多次)将代码集成到主干。每次集成都通过自动化的构建(包括编译、发布和自动化测试)来验证,从而尽早地发现集成错误。

持续部署(CD):代码在通过所有测试后,自动部署到生产环境。这意味着除了自动化测试外,还需要有自动化的部署过程。

在这个脚本中,构建阶段使用了.NET Core的dotnet命令来恢复依赖、构建和发布解决方案,然后将发布的文件打包成zip格式,并将其发布为构建产物。部署阶段则涉及到将构建产物下载到部署环境、上传到Azure存储账户,并在目标虚拟机上执行脚本来部署应用。

posted @ 2023-11-13 22:02  初久的私房菜  阅读(18223)  评论(0编辑  收藏  举报
作者:初久的私房菜
好好学习,天天向上
返回顶部小火箭
好友榜:
如果愿意,把你的博客地址放这里
张弛:https://blog.zhangchi.fun/