YAML流水线部署成功但SCM站点wwwroot文件不符问题求助
问题分析与解决方案
核心问题
配置的YAML流水线触发dev分支构建部署成功,但目标应用的wwwroot目录却是其他分支的文件,SCM接口显示未创建的master分支,修改环境变量后无效果。
可能原因
- 部署中心自动部署与自定义YAML冲突:在部署中心关联dev分支后,Azure会自动生成一条部署流水线,这条自动流水线可能在自定义YAML部署后覆盖了文件。
- 应用服务残留分支配置:应用服务的
DEPLOYMENT_BRANCH环境变量被设置为master,导致部署逻辑优先加载该分支内容。 - 部署产物匹配规则问题:YAML中下载构建产物的路径匹配可能存在歧义,导致部署了旧的或错误的包。
解决方案
1. 关闭部署中心自动部署
- 进入Azure门户的应用服务,打开「部署中心」,检查是否存在自动创建的流水线(命名通常包含分支名)。
- 选择「断开连接」或关闭自动部署开关,避免自动流水线干扰自定义YAML的部署结果。
2. 修正应用服务环境变量
- 进入应用服务的「配置」-「应用设置」,查找
DEPLOYMENT_BRANCH变量:- 若存在,将值改为
dev,或直接删除该变量(自定义YAML部署无需依赖此变量)。
- 若存在,将值改为
- 保存配置后重启应用服务。
3. 优化YAML部署逻辑
你的YAML脚本整体逻辑无问题,可做以下优化确保产物匹配准确:
- 在
AzureWebApp@1任务中,明确指定包路径,避免匹配错误的zip包:package: '$(System.ArtifactsDirectory)/drop/**/*.zip' - 手动触发dev分支流水线构建,在日志中确认
Publish the project步骤输出的是dev分支代码,Publish artifacts步骤上传的产物正确。
4. 清理并重新部署
- 通过SCM站点控制台执行命令清空wwwroot目录:
rm -rf D:\home\site\wwwroot\* - 重新触发dev分支流水线部署,完成后检查wwwroot目录是否包含dev分支特有文件。
附你的YAML脚本:
trigger: - dev variables: solution: '**/*.sln' buildPlatform: 'Any CPU' buildConfiguration: 'Release' stages: - stage: Build jobs: - job: Build pool: vmImage: 'windows-latest' steps: - task: UseDotNet@2 inputs: version: '8.x' includePreviewVersions: true - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project' inputs: command: 'build' projects: '**/*.csproj' arguments: '--configuration $(buildConfiguration)' - task: DotNetCoreCLI@2 displayName: 'Publish the project' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: true arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)' zipAfterPublish: true - task: PublishBuildArtifacts@1 displayName: 'Publish artifacts' inputs: pathtoPublish: '$(Build.ArtifactStagingDirectory)' artifactName: 'drop' - stage: Deploy jobs: - deployment: Deploy pool: vmImage: 'windows-latest' environment: 'production' strategy: runOnce: deploy: steps: - task: DownloadBuildArtifacts@0 inputs: buildType: 'current' downloadType: 'single' artifactName: 'drop' downloadPath: '$(System.ArtifactsDirectory)' - task: AzureWebApp@1 inputs: azureSubscription: '<subscription>' appName: '<appName>' appType: 'webApp' package: '$(System.ArtifactsDirectory)/**/*.zip'
内容的提问来源于stack exchange,提问作者ernest
相关产品推荐
相关产品推荐

