【问题标题】:AzureFileCopy task failing in YAML pipeline - works in Release pipelineAzureFileCopy 任务在 YAML 管道中失败 - 在发布管道中工作
【发布时间】:2020-12-16 14:47:36
【问题描述】:

我正在尝试将发布管道转换为多阶段 YAML 管道,但我遇到了 AzureFileCopy@4 任务的问题。当我在发布管道中运行任务时,任务成功并且文件被复制到远程 VM。当我在多阶段 YAML 管道中运行任务时,任务失败。具体来说,任务中的以下命令失败:

New-PSSession -ComputerName 'vmname.eastus.cloudapp.azure.com' -Port 5986 -Authentication Default -Name '68fe512f-477d-4d56-9217-5ab84517a53b' -Credential $credential -UseSSL -ErrorAction 'SilentlyContinue' -ErrorVariable sessionErrors -ConfigurationName 'microsoft.powershell'

生成的错误信息是:

Connecting to remote server vmname.eastus.cloudapp.azure.com failed with the following error message : Access is denied.

我不怀疑 WinRM 配置有问题,因为我在发布管道中连接得很好。鉴于错误和命令,我会说这是凭据,但我一遍又一遍地查看它们,它们完全相同。

NSG 上的入站规则将 WinRM 端口 5986 对任何源开放,因此似乎没有限制哪些机器可以启动新的 pssession。

更新 12/22/20

下面是失败的阶段的净化版本。文件副本主要在我的 build 阶段有效,但在它是使用 deploy 作业的部署阶段的一部分时无效

- stage: deploy
  jobs:
  - deployment: DeployR50
    displayName: Deploy R50 App
    pool:
      vmImage: 'windows-latest'
    environment: 
      name: 'QA'
      resourceName: 'Test'
      resourceType: virtualMachine
    strategy:
      runOnce:
        deploy:
          steps:
          - task: AzureFileCopy@4
            inputs:
              SourcePath: '$(Pipeline.Workspace)\R50\*'
              azureSubscription: 'Joe MSDN Azure'
              Destination: 'AzureVMs'
              storage: 'mytest'
              resourceGroup: 'TEST'
              MachineNames: 'Test'
              vmsAdminUserName: '***'
              vmsAdminPassword: $(VM_PASSWORD)
              TargetPath: 'c:\R50'

【问题讨论】:

  • 您可以参考答案中的步骤检查您的yaml文件。如果没有用,请分享您导出的yaml代码sn -p。 补充信息:在发布管道中,现在好像无法导出yaml文件。你可以参考这张票:developercommunity.visualstudio.com/content/problem/1278001/…你能分享一下你是怎么导出的吗?谢谢
  • 嗨@Joe Brinkman。这张票有更新吗?如果答案能给你一些帮助,请随时告诉我。
  • 我今天早上刚看到你的 cmets,所以我正在努力并尝试再次从头开始重建 YAML 的部署部分。

标签: azure-devops winrm azure-yaml-pipelines


【解决方案1】:

根据你的描述,你可以在release pipeline中成功运行这个任务,所以VM设置是正确的。

根据我的测试,我尝试将管道导出到 Yaml,它仍然可以正常工作。

您可以尝试以下步骤来检查您的 Yaml 管道:

  • 导出 Yaml 文件时,可以直接将文件上传到 repo,而不是复制代码。

然后,当您创建 Yaml 管道时,您可以使用现有的 YAML 文件

  • 在输出的yaml文件中,需要检查是否有多余的空格或特殊字符。

这个问题可能是由于用户名和密码不正确造成的。

  • 您可以尝试在 yaml 管道中手动重新添加此任务,并检查它是否可以工作。

【讨论】:

  • 我使用任务助手重新创建了任务。用户名和密码是使用 1Password 输入的,所以我没有意外输错任何内容。
  • Release 和 YAML 之间的一个区别是我使用的是 Deployment 作业和带有 YAML Pipeline 的 Environment,我显然不使用该版本。我不认为这是问题所在,但我仍然不清楚这些是否会影响任务。我可能会尝试将任务移至“构建”阶段并删除部署阶段/作业以查看是否有任何改变。
  • 感谢您的信息。您可以检查它是否可以在构建作业中工作。另一方面,既然你在使用环境,你的意思是你在Environment-> Virtual Machine上运行管道吗?或者您正在 Microsoft 托管代理上运行管道
  • 我有一个环境,并尝试使用部署作业作为多阶段管道的一部分在该环境中对 VM 进行部署。当 CopyFile 任务在该部署作业中时,它会失败。当我将它移到主构建阶段并删除部署阶段时,新pssession的创建就会成功。因此,在部署作业的上下文中运行 AzureFileCopy 任务似乎是导致问题的原因。
  • 在这种情况下,此问题与环境有关。在 Release Pipeline 中,您使用的是部署组还是代理作业?可以在虚拟机上连接 Azure Vm 吗?您可以尝试使用 AzureFileCopy@3 任务并检查虚拟机中是否有防火墙。
猜你喜欢
  • 2020-01-30
  • 1970-01-01
  • 2020-07-18
  • 2018-05-13
  • 2021-05-10
  • 2019-11-20
  • 1970-01-01
  • 2020-05-28
  • 2020-11-07
相关资源
最近更新 更多