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

Azure DevOps - YAML Pipeline with multiple jobs syntax error

我有一个 YAML 管道正在尝试 运行 多个作业,但第一个任务(GitVesion 命令行任务)出现语法错误,这我没有进入其他只有一份工作的管道。

我得到的错误是:

(Line: 29, Col: 18, Idx: 576) - (Line: 29, Col: 18, 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