我使用 AzureFileCopy@5 / 6 任务配置了 Azure Devops Pipeline。我正在尝试将 Pipeline.Workspace/drop/folder name/ 上传到存储帐户。
日志让我困惑: 将文件从源路径:'D:\s\drop ditor-docs)'上传到存储帐户:storageaccountname
但在下一行中,我收到错误无法启动作业,因为错误:无法扫描路径 \?\D: \s\drop ditor-docs。
我也使用 Powershell 进行了尝试,但是使用 Powershell,我无法将路径作为参数传递,这导致脚本失败并出现错误“参数...未被识别为 cmdlet”。
如何将工件上传到 Azure 存储? 将虚拟机更改为 Windows 对我没有帮助。
构建.yml
jobs:
- job:
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UseRubyVersion@0
displayName: Use Ruby >= 2.4
- task: CopyFiles@2
displayName: Copy Folder Armtemplates
inputs:
SourceFolder: 'armtemplates'
TargetFolder: '$(build.artifactstagingdirectory)/armtemplates'
- task: CopyFiles@2
displayName: Copy Folder Pipelines
inputs:
SourceFolder: 'pipelines'
TargetFolder: '$(build.artifactstagingdirectory)/pipelines'
- task: CopyFiles@2
displayName: Copy Folder Scripts
inputs:
SourceFolder: 'scripts'
TargetFolder: '$(build.artifactstagingdirectory)/scripts'
- task: Bash@3
inputs:
filePath: '$(Build.SourcesDirectory)/scripts/InstallJekyll.sh'
workingDirectory: '$(Build.SourcesDirectory)/editor-docs'
displayName: Install Jekyll and bundler
- task: CopyFiles@2
displayName: Copy Folder _site
inputs:
SourceFolder: 'editor-docs/_site'
TargetFolder: '$(build.artifactstagingdirectory)/editor-docs'
- task: PublishPipelineArtifact@1
displayName: 'Publish Artifact To Pipeline'
inputs:
targetPath: '$(Pipeline.Workspace)'
artifact: 'drop'
publishLocation: 'pipeline'
Deploy.yml我也尝试过:
SourcePath: '$(Pipeline.Workspace)/drop/editor-docs/)'
jobs:
- job: DeployStaticWebsite
pool:
vmImage: 'ubuntu-latest'
steps:
- download: current
artifact: drop
- task: AzureFileCopy@5
displayName: Upload Web Files To Storage
inputs:
SourcePath: '$(Build.SourcesDirectory)/drop/editor-docs/)'
azureSubscription: TestSubscriptionStorageAccount
Destination: 'AzureBlob'
storage: '$(StorageAccountNameStaticWebApp)'
ContainerName: 'test'
错误无法启动作业,因为错误:无法扫描路径?\D:\s\drop ditor-docs
根据错误消息和yaml示例,问题的原因是您在AzureFileCopy任务中使用了错误的路径变量。
$(Build.SourcesDirectory)
将指向路径:D:\a\1\s
。但工件将下载到$(Pipeline.Workspace)
(D:\a\1
)。
要解决此问题,您需要使用Azurefilecopy任务中的路径
$(Pipeline.Workspace)/drop/editor-docs/
。
例如:
- task: AzureFileCopy@5
displayName: Upload Web Files To Storage
inputs:
SourcePath: '$(Pipeline.Workspace)/drop/editor-docs/'
azureSubscription: TestSubscriptionStorageAccount
Destination: 'AzureBlob'
storage: '$(StorageAccountNameStaticWebApp)'
ContainerName: 'test'
另一方面,如果构建和部署管道是两个独立的管道,则需要在下载工件任务中指定具体的构建信息。
例如:
jobs:
- job: DeployStaticWebsite
pool:
vmImage: 'ubuntu-latest'
steps:
- task: DownloadPipelineArtifact@2
inputs:
buildType: 'specific'
project: 'projectname'
definition: 'definitionname'
buildVersionToDownload: 'latest'
artifactName: 'drop'
targetPath: '$(Pipeline.Workspace)'
- task: AzureFileCopy@5
displayName: Upload Web Files To Storage
inputs:
SourcePath: '$(Build.SourcesDirectory)/drop/editor-docs/'
azureSubscription: TestSubscriptionStorageAccount
Destination: 'AzureBlob'
storage: '$(StorageAccountNameStaticWebApp)'
ContainerName: 'test'
更详细的信息,您可以参考文档:使用预定义变量