Azure DevOps-具有多个作业语法错误的YAML管道

问题描述

我有一个试图运行多个作业的YAML管道,但是我遇到了第一个任务(GitVesion命令行任务)的语法错误,我没有进入我拥有的其他只有一项工作的管道。

我得到的错误是:

(Line: 29,Col: 18,Idx: 576) - (Line: 29,Idx: 576): Mapping values are not allowed in this context.

第29行是第一个任务的displayName(实际管道的文件顶部有注释,下面已将其删除)。

trigger:
- master

pool:
  name: NameRedacted
  demands: VisualStudio_15.0

variables:
- name: CreateRelease
  value: true
- name: PublishPackages
  value: true
- name: PublishMyGetPackages
  value: true
- name: IntegrationTests_sqlAlias
  value: .
- group: 'Common Variables'

jobs:

- job: Backend
  steps:
  - task: CmdLine@1
      displayName: GitVersion
      inputs:
      filename: '$(GitVersionPath)'
      arguments: '$(GitVersionArguments)'

  - task: DeleteFiles@1
      displayName: 'Delete files from $(Build.ArtifactStagingDirectory)'
      inputs:
      SourceFolder: '$(Build.ArtifactStagingDirectory)'
      Contents: '**/*.nupkg'

  - task: DeleteFiles@1
      displayName: 'Delete files from $(Build.Repository.LocalPath)'
      inputs:
      SourceFolder: '$(Build.Repository.LocalPath)'
      Contents: |
          **/*.nupkg
          Packages/*.zip

  - task: DeleteFiles@1
      displayName: 'Delete old test files'
      inputs:
      SourceFolder: '$(System.DefaultWorkingDirectory)'
      Contents: '**\*test*.dll'

  - task: UseDotNet@2
      displayName: 'Use .Net Core SDK 2.2.104'
      inputs:
      packageType: sdk
      version: 2.2.104
      installationPath: $(Agent.ToolsDirectory)/dotnet

  - task: DotNetCoreCLI@2
      displayName: Restore
      inputs:
      command: restore
      projects: NameRedacted.sln
      restoreArguments: '$(DotNetRestoreSourcesLight)'

  - task: DotNetCoreCLI@2
      displayName: Build
      inputs:
      command: build
      projects: NameRedacted.sln
      arguments: '-c Release --no-restore'

  - task: DotNetCoreCLI@2
      displayName: Test
      inputs:
      command: 'test'
      projects: |
          **/*tests*/*.csproj
          !**\*Tests.Common.csproj
          !**\*Tests.Common.dll
          !**\*TestAdapter.dll
          !**\obj\**
          !**\netstandard2.0\*.dll
          !**\node_modules\**
      arguments: '-c Release'

  - task: DotNetCoreCLI@2
      displayName: Publish
      inputs:
        command: publish
        arguments: '-c $(BuildConfiguration) -o $(Build.ArtifactStagingDirectory) --no-restore'
        zipAfterPublish: false

  # Octopus packaging and pushing redacted

- job: 'Angular App'
  steps:
  - task: DeleteFiles@1
    displayName: 'Delete files from $(Build.ArtifactStagingDirectory)'
    inputs:
      SourceFolder: '$(Build.ArtifactStagingDirectory)'
      Contents: '**/*.nupkg'

  - task: DeleteFiles@1
    displayName: 'Delete tests '
    inputs:
      SourceFolder: '$(Parameters.sourceFolder)'
      Contents: '**/TESTS-*.xml'

  - task: DeleteFiles@1
    displayName: 'Delete files from dist'
    inputs:
      SourceFolder: '$(Parameters.sourceFolder)'
      Contents: dist

  - task: CmdLine@1
    displayName: 'Run $(GitVersionPath)'
    inputs:
      filename: '$(GitVersionPath)'
      arguments: '$(GitVersionArguments)'

  - task: Nodetool@0
    displayName: 'Use Node 10.x'
    inputs:
      versionSpec: 10.x

  - task: Npm@1
    displayName: 'npm install windows-build-tools'
    inputs:
      command: custom
      verbose: false
      customCommand: 'install --global --production windows-build-tools'

  - task: Npm@1
    displayName: 'npm install node-sass'
    inputs:
      command: custom
      verbose: false
      customCommand: 'install --global  --unsafe-perms node-sass'

  - task: Npm@1
    displayName: Restore
    inputs:
      workingDir: '$(Parameters.sourceFolder)'
      verbose: false

  - task: Npm@1
    displayName: Build
    inputs:
      command: custom
      workingDir: '$(Parameters.sourceFolder)'
      verbose: false
      customCommand: 'run ui-prod'

  - task: Npm@1
    displayName: Test
    inputs:
      command: custom
      workingDir: '$(Parameters.sourceFolder)'
      verbose: false
      customCommand: 'test --watch=false --single-run=true --reporters=junit,progress --browsers=PhantomJS'
    enabled: false

  - task: PublishTestResults@2
    displayName: 'Publish Test Results **/TESTS-*.xml'
    inputs:
      testResultsFiles: '**/TESTS-*.xml'
    enabled: false
    condition: succeededOrFailed()

  - task: Npm@1
    displayName: Lint
    inputs:
      command: custom
      workingDir: '$(Parameters.sourceFolder)'
      verbose: false
      customCommand: 'run lint'
    enabled: false

# Octopus packaging and pushing redacted

- job: 'Ionic App'
  steps:
  - task: DeleteFiles@1
    displayName: 'Delete files from $(Build.ArtifactStagingDirectory)'
    inputs:
      SourceFolder: '$(Build.ArtifactStagingDirectory)'
      Contents: '**/*.nupkg'

  - task: DeleteFiles@1
    displayName: 'Delete tests'
    inputs:
      SourceFolder: '$(Parameters.sourceFolder)'
      Contents: '**/TESTS-*.xml'

  - task: DeleteFiles@1
    displayName: 'Delete files from dist'
    inputs:
      SourceFolder: 'src/ionic-app'
      Contents: www

  - task: CmdLine@1
    displayName: 'Run $(GitVersionPath)'
    inputs:
      filename: '$(GitVersionPath)'
      arguments: '$(GitVersionArguments)'

  - task: Nodetool@0
    displayName: 'Use Node 10.x'
    inputs:
      versionSpec: 10.x

  - task: Npm@1
    displayName: 'npm install windows-build-tools'
    inputs:
      command: custom
      verbose: false
      customCommand: 'install --global --production windows-build-tools'

  - task: Npm@1
    displayName: 'npm install node-sass'
    inputs:
      command: custom
      verbose: false
      customCommand: 'install --global  --unsafe-perms node-sass'

  - task: Npm@1
    displayName: 'npm install ionic'
    inputs:
      command: custom
      verbose: false
      customCommand: 'install --global  ionic'

  - task: Npm@1
    displayName: Restore
    inputs:
      workingDir: 'src/ionic-app'
      verbose: false

  - task: Npm@1
    displayName: Build
    inputs:
      command: custom
      workingDir: 'src/ionic-app'
      verbose: false
      customCommand: 'run build-web-prod'

  # Octopus packaging and pushing redacted

- job: Release
  dependsOn:
    - Backedn
    - 'Angular App'
    - 'Ionic App'
  steps:
  - task: CmdLine@1
    displayName: 'Run $(GitVersionPath)'
    inputs:
      filename: '$(GitVersionPath)'
      arguments: '$(GitVersionArguments)'
    condition: and(succeeded(),eq(variables['Build.sourceBranch'],'refs/heads/master'),eq(variables['CreateRelease'],'true'),ne(variables['Build.Reason'],'Schedule'))

  # Octopus release creating redacted

解决方法

我相信您的displayName密钥应与task密钥的第一个字符对齐:


- job: Backend
  steps:
  - task: CmdLine@1
    displayName: GitVersion
    inputs:
    filename: '$(GitVersionPath)'
    arguments: '$(GitVersionArguments)'

  - task: DeleteFiles@1
    displayName: 'Delete files from $(Build.ArtifactStagingDirectory)'
    inputs:
    SourceFolder: '$(Build.ArtifactStagingDirectory)'
    Contents: '**/Naus*.nupkg'
,

您有3个问题:

  1. displayName应该与task对齐。
  2. inputs之后的键应位于inputs的右侧,并且不对齐。
  3. job名称不能带空格。

我为您修复了它,这是正确的:

trigger:
- master

pool:
  name: NameRedacted
  demands: VisualStudio_15.0

variables:
- name: CreateRelease
  value: true
- name: PublishPackages
  value: true
- name: PublishMyGetPackages
  value: true
- name: IntegrationTests_SqlAlias
  value: .
- group: 'Common Variables'

jobs:

- job: Backend
  steps:
  - task: CmdLine@1
    displayName: GitVersion
    inputs:
      filename: '$(GitVersionPath)'
      arguments: '$(GitVersionArguments)'

  - task: DeleteFiles@1
    displayName: 'Delete files from $(Build.ArtifactStagingDirectory)'
    inputs:
      SourceFolder: '$(Build.ArtifactStagingDirectory)'
      Contents: '**/Naus*.nupkg'

  - task: DeleteFiles@1
    displayName: 'Delete files from $(Build.Repository.LocalPath)'
    inputs:
      SourceFolder: '$(Build.Repository.LocalPath)'
      Contents: |
          **/*.nupkg
          Packages/*.zip

  - task: DeleteFiles@1
    displayName: 'Delete old test files'
    inputs:
      SourceFolder: '$(System.DefaultWorkingDirectory)'
      Contents: '**\*test*.dll'

  - task: UseDotNet@2
    displayName: 'Use .Net Core SDK 2.2.104'
    inputs:
      packageType: sdk
      version: 2.2.104
      installationPath: $(Agent.ToolsDirectory)/dotnet

  - task: DotNetCoreCLI@2
    displayName: Restore
    inputs:
      command: restore
      projects: NameRedacted.sln
      restoreArguments: '$(DotNetRestoreSourcesLight)'

  - task: DotNetCoreCLI@2
    displayName: Build
    inputs:
      command: build
      projects: NameRedacted.sln
      arguments: '-c Release --no-restore'

  - task: DotNetCoreCLI@2
    displayName: Test
    inputs:
      command: 'test'
      projects: |
          **/*tests*/*.csproj
          !**\*Tests.Common.csproj
          !**\*Tests.Common.dll
          !**\*TestAdapter.dll
          !**\obj\**
          !**\netstandard2.0\*.dll
          !**\node_modules\**
      arguments: '-c Release'

  - task: DotNetCoreCLI@2
    displayName: Publish
    inputs:
      command: publish
      arguments: '-c $(BuildConfiguration) -o $(Build.ArtifactStagingDirectory) --no-restore'
      zipAfterPublish: false

  # Octopus packaging and pushing redacted

- job: AngularApp
  steps:
  - task: DeleteFiles@1
    displayName: 'Delete files from $(Build.ArtifactStagingDirectory)'
    inputs:
      SourceFolder: '$(Build.ArtifactStagingDirectory)'
      Contents: '**/*.nupkg'

  - task: DeleteFiles@1
    displayName: 'Delete tests '
    inputs:
      SourceFolder: '$(Parameters.SourceFolder)'
      Contents: '**/TESTS-*.xml'

  - task: DeleteFiles@1
    displayName: 'Delete files from dist'
    inputs:
      SourceFolder: '$(Parameters.SourceFolder)'
      Contents: dist

  - task: CmdLine@1
    displayName: 'Run $(GitVersionPath)'
    inputs:
      filename: '$(GitVersionPath)'
      arguments: '$(GitVersionArguments)'

  - task: NodeTool@0
    displayName: 'Use Node 10.x'
    inputs:
      versionSpec: 10.x

  - task: Npm@1
    displayName: 'npm install windows-build-tools'
    inputs:
      command: custom
      verbose: false
      customCommand: 'install --global --production windows-build-tools'

  - task: Npm@1
    displayName: 'npm install node-sass'
    inputs:
      command: custom
      verbose: false
      customCommand: 'install --global  --unsafe-perms node-sass'

  - task: Npm@1
    displayName: Restore
    inputs:
      workingDir: '$(Parameters.SourceFolder)'
      verbose: false

  - task: Npm@1
    displayName: Build
    inputs:
      command: custom
      workingDir: '$(Parameters.SourceFolder)'
      verbose: false
      customCommand: 'run ui-prod'

  - task: Npm@1
    displayName: Test
    inputs:
      command: custom
      workingDir: '$(Parameters.SourceFolder)'
      verbose: false
      customCommand: 'test --watch=false --single-run=true --reporters=junit,progress --browsers=PhantomJS'
    enabled: false

  - task: PublishTestResults@2
    displayName: 'Publish Test Results **/TESTS-*.xml'
    inputs:
      testResultsFiles: '**/TESTS-*.xml'
    enabled: false
    condition: succeededOrFailed()

  - task: Npm@1
    displayName: Lint
    inputs:
      command: custom
      workingDir: '$(Parameters.SourceFolder)'
      verbose: false
      customCommand: 'run lint'
    enabled: false

# Octopus packaging and pushing redacted

- job: IonicApp
  steps:
  - task: DeleteFiles@1
    displayName: 'Delete files from $(Build.ArtifactStagingDirectory)'
    inputs:
      SourceFolder: '$(Build.ArtifactStagingDirectory)'
      Contents: '**/Naus*.nupkg'

  - task: DeleteFiles@1
    displayName: 'Delete tests'
    inputs:
      SourceFolder: '$(Parameters.SourceFolder)'
      Contents: '**/TESTS-*.xml'

  - task: DeleteFiles@1
    displayName: 'Delete files from dist'
    inputs:
      SourceFolder: 'src/ionic-app'
      Contents: www

  - task: CmdLine@1
    displayName: 'Run $(GitVersionPath)'
    inputs:
      filename: '$(GitVersionPath)'
      arguments: '$(GitVersionArguments)'

  - task: NodeTool@0
    displayName: 'Use Node 10.x'
    inputs:
      versionSpec: 10.x

  - task: Npm@1
    displayName: 'npm install windows-build-tools'
    inputs:
      command: custom
      verbose: false
      customCommand: 'install --global --production windows-build-tools'

  - task: Npm@1
    displayName: 'npm install node-sass'
    inputs:
      command: custom
      verbose: false
      customCommand: 'install --global  --unsafe-perms node-sass'

  - task: Npm@1
    displayName: 'npm install ionic'
    inputs:
      command: custom
      verbose: false
      customCommand: 'install --global  ionic'

  - task: Npm@1
    displayName: Restore
    inputs:
      workingDir: 'src/naus-residents-app'
      verbose: false

  - task: Npm@1
    displayName: Build
    inputs:
      command: custom
      workingDir: 'src/naus-residents-app'
      verbose: false
      customCommand: 'run build-web-prod'

  # Octopus packaging and pushing redacted

- job: Release
  dependsOn:
    - Backedn
    - 'Angular App'
    - 'Ionic App'
  steps:
  - task: CmdLine@1
    displayName: 'Run $(GitVersionPath)'
    inputs:
      filename: '$(GitVersionPath)'
      arguments: '$(GitVersionArguments)'
    condition: and(succeeded(),eq(variables['Build.SourceBranch'],'refs/heads/master'),eq(variables['CreateRelease'],'true'),ne(variables['Build.Reason'],'Schedule'))

  # Octopus release creating redacted