如何用azure-pipelines.yml实现多仓库生产部署的文件复制与目录创建
Azure Pipelines实现生产环境部署步骤3-5的方案
前提说明
你已经完成Web App和Web API的自动部署,以下通过Azure Pipelines内置任务替代手动FileZilla操作,实现步骤3-5的自动化:
1. 先构建Mail Console 1/2生成exe文件
Mail Console属于独立仓库,需在管道中拉取代码并完成构建:
# 拉取Mail Console 1仓库的development分支代码 - checkout: git://<你的组织名>/MailConsole1@development path: MailConsole1 # 拉取Mail Console 2仓库的development分支代码 - checkout: git://<你的组织名>/MailConsole2@development path: MailConsole2 # 构建Mail Console 1,将exe输出到指定目录 - task: VSBuild@1 inputs: solution: 'MailConsole1/**/*.csproj' msbuildArgs: '/p:OutputPath=$(Build.ArtifactStagingDirectory)/MailConsole1/bin' platform: 'Any CPU' configuration: 'Release' # 构建Mail Console 2,将exe输出到指定目录 - task: VSBuild@1 inputs: solution: 'MailConsole2/**/*.csproj' msbuildArgs: '/p:OutputPath=$(Build.ArtifactStagingDirectory)/MailConsole2/bin' platform: 'Any CPU' configuration: 'Release'
2. 步骤3:同步Web App/Web API发布文件到生产服务器
如果是自托管IIS服务器,用WinRM Copy Files任务完成文件同步:
# 同步Web App发布文件到生产服务目录 - task: WinRM-CopyFiles@1 inputs: authenticationMethod: 'basic' machines: '<生产服务器IP/域名>' username: '<服务器登录用户名>' password: '<服务器登录密码/密钥>' sourceFolder: '$(Build.ArtifactStagingDirectory)/WebApp' # 替换为Web App实际发布目录 destinationFolder: '<Web App生产服务目录,如C:\inetpub\wwwroot\WebApp>' cleanTargetFolder: true # 可选:清空目标目录后再复制 # 同步Web API发布文件到生产服务目录 - task: WinRM-CopyFiles@1 inputs: authenticationMethod: 'basic' machines: '<生产服务器IP/域名>' username: '<服务器登录用户名>' password: '<服务器登录密码/密钥>' sourceFolder: '$(Build.ArtifactStagingDirectory)/WebAPI' # 替换为Web API实际发布目录 destinationFolder: '<Web API生产服务目录,如C:\inetpub\wwwroot\WebAPI>' cleanTargetFolder: true
如果是Azure App Service,此步骤可跳过——App Service部署任务已自动完成文件同步。
3. 步骤4:在Web API的wwwroot目录创建Tools文件夹
通过WinRM执行PowerShell命令创建目录:
- task: WinRM-Command@1 inputs: authenticationMethod: 'basic' machines: '<生产服务器IP/域名>' username: '<服务器登录用户名>' password: '<服务器登录密码/密钥>' command: 'New-Item -Path "<Web API的wwwroot目录>\Tools" -ItemType Directory -Force' # 示例路径:C:\inetpub\wwwroot\WebAPI\wwwroot\Tools
若为Linux服务器,将命令替换为Bash:mkdir -p /var/www/WebAPI/wwwroot/Tools
4. 步骤5:复制Mail Console的exe到Tools文件夹
继续用WinRM Copy Files任务完成exe文件传输:
# 复制Mail Console 1的exe文件 - task: WinRM-CopyFiles@1 inputs: authenticationMethod: 'basic' machines: '<生产服务器IP/域名>' username: '<服务器登录用户名>' password: '<服务器登录密码/密钥>' sourceFolder: '$(Build.ArtifactStagingDirectory)/MailConsole1/bin' contents: '*.exe' # 仅复制exe文件 destinationFolder: '<Web API的wwwroot目录>\Tools' # 复制Mail Console 2的exe文件 - task: WinRM-CopyFiles@1 inputs: authenticationMethod: 'basic' machines: '<生产服务器IP/域名>' username: '<服务器登录用户名>' password: '<服务器登录密码/密钥>' sourceFolder: '$(Build.ArtifactStagingDirectory)/MailConsole2/bin' contents: '*.exe' destinationFolder: '<Web API的wwwroot目录>\Tools'
若为Linux服务器,改用SSH Copy Files任务完成传输。
注意事项
- 自托管服务器需开启WinRM/SSH服务,确保Azure Pipelines代理能访问对应端口
- 敏感信息(如密码、密钥)不要硬编码,用Azure Pipelines变量组或密钥保管库存储
内容的提问来源于stack exchange,提问作者kebberpee
相关产品推荐
相关产品推荐

