【问题标题】:Disable AzureFileCopy@2 pre job?禁用 AzureFileCopy@2 预作业?
【发布时间】:2020-01-16 14:46:07
【问题描述】:

我正在使用 Azure Devops Pipelines (YAML)。

我有一个 AzureFileCopy@2 任务,它将文件从源复制到存储帐户。存储帐户由较早的 ARM 部署任务动态创建(ARM 任务输出 SA 名称,然后将其解析为变量以供以后使用)。

AzureFileCopy@2 任务完美运行并将所有文件复制到存储帐户中。但是,我在运行中注意到 AzureFileCopy@2 任务实际上运行了两次——一次由我执行,一次作为“预作业”。预作业当然会失败,并显示无法引用存储帐户的警告(因为在那个阶段我还没有创建变量)。

幸运的是,这只是一个警告,但在每次运行时都有这个警告相当烦人。 我相信不能禁用 pre-jobs(尽管我可以放弃这是一项功能增强),那么有没有更好的方法来处理这种可能很常见的情况?

提前致谢

编辑:添加了混淆的 YAML:

variables:
  My.Configuration: 'Release'
  My.SQLProject: 'contoso.api'
  My.ARMProject: 'contoso.azure.templates'
  My.IntEnvironment: 'i'
  My.ResourceGroupNumber: 66
  My.ArtifactLocation: 'drop'

# BUILD STAGES ARE HERE  

- stage: 'Stage_Deploy'
  displayName: 'Stage Deploy'

  jobs:
  - deployment: 'Job_Deploy'
    pool:
      vmImage: 'windows-2019'
    displayName: 'Job Deploy'
    environment: 'env1'
    strategy:
     runOnce:
       deploy:
         steps:
         - download: none

          - task: DownloadPipelineArtifact@2
           displayName: 'Download Pipeline Artifacts from Drop'
           inputs:
             buildType: 'current'
             targetPath: '$(Pipeline.Workspace)'

         - task: AzureResourceManagerTemplateDeployment@3
           displayName: 'ARM Deployment'
           inputs:
             deploymentScope: 'Resource Group'
             azureResourceManagerConnection: 'CONTOSO CONNECTION'
             subscriptionId: 'aaaaaaaa-0000-0000-00000-aaaaaaaaaaaaa'
             action: 'Create Or Update Resource Group'
             resourceGroupName: 'contoso-$(My.IntEnvironment)-eun-core-$(My.ResourceGroupNumber)-rg'
             location: 'North Europe'
             templateLocation: 'Linked artifact'
             csmFile: '$(Pipeline.Workspace)/$(My.ArtifactLocation)/$(My.ARMProject)/azuredeploy.json'
             csmParametersFile: '$(Pipeline.Workspace)/$(My.ArtifactLocation)/$(My.ARMProject)/azuredeploy.parameters.json'
             overrideParameters: '-environment $(My.IntEnvironment)'
             deploymentMode: 'Incremental'
             deploymentOutputs: 'ARMOutput'

         - task: PowerShell@2
           condition: true
           displayName: 'Parse ARM Template Outputs'
           inputs:
             targetType: filePath
             filePath: '$(Pipeline.Workspace)/$(My.ArtifactLocation)/$(My.ARMProject)/Parse-ARMOutput.ps1'
             arguments: '-ARMOutput ''$(ARMOutput)'''

         - task: AzureFileCopy@2
           condition: true
           displayName: 'Copy Static Web Content to SA'
           inputs:
             SourcePath: '$(Pipeline.Workspace)/$(My.ArtifactLocation)'
             azureSubscription: 'CONTOSO CONNECTION'
             Destination: AzureBlob
             storage: '$(ARM.AppDataStorageName)'
             ContainerName: static

然后,当我运行它时,会发生以下阶段: 1.初始化作业 2. 作业前:将静态网页内容复制到 SA

正是这个预工作,在调试中显示:

##[debug]StorageAccountRM=$(ARM.AppDataStorageName)
<other debug lines followed by...>
##[warning]Can\'t find loc string for key: StorageAccountDoesNotExist

稍后“将静态 Web 内容复制到 SA”任务作为正常任务运行并且运行良好。

【问题讨论】:

  • 嗨,马克,您可以在删除个人信息(如果存在)后分享一些有关您的 yaml 文件的详细信息吗?有关您收到的警告的更多信息可能会更好地帮助我们检查此问题:)
  • 嗨兰斯,感谢您的回复。我已经用信息编辑了 OP。干杯!
  • 经过我的检查,这是 AzureFileCopy 任务代码的设计,因此警告难以避免。明天将添加有关警告原因的更多详细信息(包括源代码):)

标签: azure-devops azure-pipelines


【解决方案1】:

幸运的是,这只是一个警告,但它相当烦人 每次运行时都会发出警告。我相信pre-jobs不能被禁用 (虽然我可以放弃这是一个功能增强)所以有一个 处理这种可能很常见的情况的更好方法?

抱歉,恐怕不支持禁用警告。出现警告是因为它是设计使然。

(AzureFileCopyV2 任务的源代码导致此行为。)

更多详情:

我们可以找到该任务的来源here。它包含一个task.json 文件,其中定义了如下内容:

  "instanceNameFormat": "$(Destination) File Copy",
    "prejobexecution": {
        "Node": {
            "target": "PreJobExecutionAzureFileCopy.js"
        }
    },

task.json 文件描述了构建或发布任务,并且是构建/发布系统用于向用户呈现配置选项并了解在构建/发布时执行哪些脚本的内容。由于task.json 的定义类似于prejobexecution,预定义的作业前任务将对PreJobExecutionAzureFileCopy.js 文件中定义的输入进行检查。包括存储帐户。

所以这是 AzureFileCopyV2 任务代码设计的问题,我们不能在作业前任务中禁用警告。如果您确实想解决该警告,可以考虑使用未定义 prejobexecutionAzureFileCopyV1,但这是不推荐。与Version1相比,Version2有一些改进,修复了一些老问题。

【讨论】:

  • 嗨 Lance,是的,我在发布之前确实查看了代码并看到了。 (虽然我没有看过 V1,所以谢谢你的提醒。)事实上,我曾计划争辩说它更多的是“按代码”而不是“按设计”,但事实上它是在 V1 和 V2 之间专门实现的意味着它确实必须是“设计使然”。就个人而言(我只代表我自己——其他人可能对此看法不同),我认为这是一个倒退的步骤,因为没有设施可以使预作业执行有条件。也许这可以添加到 V3 中?
  • @Mark 我知道V3有预览版,所以你的意见可能不会添加到V3中。但如果你想让它有条件,我想你可以在Developer Community forum 中提出这个功能请求。如果得到足够的分数,产品团队会认真考虑。
  • 确实如此——我在发帖后意识到了这一点。 V4也许。 :-) 事实证明,我恢复到 V1 并且它运行良好 - 没有更多警告。将添加一个功能请求,尽管考虑到“边缘情况”(动态创建环境变量,然后在 AzureFileCopy 中使用它),我看不出它有多大吸引力。 ;-\
  • 很抱歉给您带来不便,您也可以根据您的功能请求更新您的问题。对它感兴趣的人可以投票给你:)
猜你喜欢
  • 2022-01-01
  • 2014-12-24
  • 2013-01-01
  • 1970-01-01
  • 2020-06-10
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多