Azure DevOps管道部署失败:文件不存在及分支切换报错求助
问题
我尝试使用以下YAML脚本部署Azure DevOps管道:
# Starter pipeline # Start with a minimal pipeline that you can customize to build and deploy your code. # Add steps that build, test, and deploy your project. # https://aka.ms/yaml trigger: - adf_publish pool: vmImage: ubuntu-latest steps: - script: echo Hello, world! displayName: 'Run a one-line script' - script: | echo Add other tasks to build, test, and deploy your project. echo See https://aka.ms/yaml displayName: 'Run a multi-line script' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifact: drop' inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: 'drop' publishLocation: 'Container' - task: AzurePowerShell@5 displayName: 'Azure PowerShell script: MyNewPreDeployment' inputs: azureSubscription: NewConnectionName ScriptPath: '$(System.DefaultWorkingDirectory)/_Azure Data FactoryReName/drop/pre-and post-deployment.ps1' ScriptArguments: '-armTemplate "$(System.DefaultWorkingDirectory)/_Azure Data FactoryReName/drop/ARMTemplateForFactory.json" -ResourceGroupName $(ResourceGroup) -DataFactoryName $(DataFactory) -predeployment $true -deleteDeployment $false' azurePowerShellVersion: LatestVersion
运行时出现如下错误:
##[error]ENOENT: no such file or directory, stat '/home/vsts/work/1/s/_Azure Data FactoryReName/drop/pre-and post-deployment.ps1'
切换到adf_publish分支时还会出现其他报错,请问是否需要手动上传文件至Azure Data Factory CICDCapLogic?
解决方案
- 排查文件路径有效性:先确认几个核心点:
- 检查
_Azure Data FactoryReName文件夹名称是否正确,有没有拼写错误、空格或大小写不一致的问题。 - 确认
pre-and post-deployment.ps1和ARMTemplateForFactory.json确实存在于adf_publish分支的对应目录下。
- 检查
- 关于adf_publish分支的说明:这个分支是Azure Data Factory自动生成的,包含自动打包的ARM模板和部署脚本,正常情况下不需要手动上传文件到CICDCapLogic。如果切换分支报错,大概率是分支内容不完整或被篡改:
- 重新从Data Factory的发布界面触发发布,生成完整的
adf_publish分支内容。 - 确保管道拉取的是最新、未被手动修改过的
adf_publish分支版本。
- 重新从Data Factory的发布界面触发发布,生成完整的
- 调整管道路径引用逻辑:
- 当前管道先发布工件,再去源代码目录找文件,逻辑矛盾。应该先确保脚本和模板文件被复制到
$(Build.ArtifactStagingDirectory),再执行发布;或者直接从源代码目录引用文件后再发布工件,调整步骤顺序。 - 建议使用构建变量替代硬编码路径,比如用
$(Pipeline.Workspace)/drop/xxx,避免因代理环境差异导致路径错误。同时注意路径中的空格要正确用引号包裹。
- 当前管道先发布工件,再去源代码目录找文件,逻辑矛盾。应该先确保脚本和模板文件被复制到
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

