Azure DevOps tarefas de pipeline

  • Versão de lançamento: Zurich
  • Atualizado 31 de jul. de 2025
  • 13 min. de leitura
  • Use essas tarefas em seu Azure DevOps pipeline para interagir com Configuração de DevOps modelo de dados.

    Importante:
    Configuração de DevOps agora está descontinuado e não há mais suporte ou disponível para nova ativação.

    Essas tarefas são fornecidas para criar uma definição de pipeline específica para atingir seu objetivo.

    • ServiceNow-DevOps-Config-Agent-Upload-Config

      Carregue dados de configuração para um implantável no modelo de dados por meio de Trabalho do agente.

    • ServiceNow-DevOps-Config-Agent-Get-Snapshot

      Obtenha os snapshots de uma aplicação.

    • ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name

      Extraia o nome de um snapshot.

    • ServiceNow-DevOps-Config-Agent-Publish-Snapshot

      Publique um snapshot de seus dados de configuração.

    • ServiceNow-DevOps-Config-Agent-Export-Snapshot

      Exporte um subconjunto de seus dados de configuração.

    • ServiceNow-DevOps-Config-Agent-Registrar-Pipeline

      Registre um conjunto de mudanças e/ou snapshot para uma execução de pipeline.

    • ServiceNow-DevOps-Config-Agent-Validate-Snapshot

      Valide os dados de configuração em relação às políticas da organização.

    • ServiceNow-DevOps-Server-Change-Acceleration

      Crie uma solicitação de mudança como parte do pipeline.

    ServiceNow-DevOps-Config-Agent-Upload-Config

    Tarefa para carregar um arquivo de configuração para um determinado local em um modelo de dados da aplicação.

    Esta tarefa deve ser usada de natureza iterativa para todos os arquivos de configuração que o usuário escolher carregar para o modelo de dados da aplicação durante a execução do pipeline.
    Nota:
    Os arquivos pré-carregados devem estar em um formato compatível.
    Variáveis de entrada
    ConnectedServiceName Especifica o. DevOps conexão de endpoint de pipeline.
    applicationName Especifica a aplicação para onde os dados de configuração são carregados.
    DeployableName Especifica o implantável para a aplicação (necessário se o destino for implantável).
    UploadTarget Especifica o destino do modelo de dados para onde os dados de configuração são carregados (por exemplo, componente , coleção , implantável ).
    collectionName (Opcional) Especifica a coleção para onde os dados de configuração serão carregados (obrigatório se o destino for coleta).
    namePath

    Especifica o caminho do modelo de dados para onde os dados de configuração são carregados.

    Nota:
    Ao carregar para uma pasta vars, você deve iniciar o caminho do nome com "vars/" para especificar o caminho da pasta variável.
    ConfigFilePath

    Especifica a pasta de origem da qual os dados de configuração são carregados para o componente ou para o caminho implantável no modelo de dados.

    A raiz do repositório está vazia. Use variáveis se os arquivos não estiverem no repositório (por exemplo, (agent.builddirectory) ).

    ConvertPath (Opcional) Especifica se a estrutura de diretórios dos arquivos de configuração deve ser preservada (em relação ao espaço) e se o diretório deve ser convertido em caminhos no modelo de dados. O valor padrão é falso.
    DataFormat Especifica o formato de dados do config_file (por exemplo, JSON , YAML , XML etc.).
    changesetNumber

    (Opcional) Especifica o conjunto de mudanças (aberto) ao qual esta atividade de carregamento está associada. Se não for fornecido, um novo conjunto de mudanças será criado.

    Nota:
    Usado somente para vários cenários de carregamento.
    autocommit Especifica se os dados de configuração devem ser confirmados após o carregamento (verdadeiro/falso). O valor padrão é falso.
    Validar automaticamente Especifica se os dados de configuração devem ser validados durante a confirmação (verdadeiro/falso). O valor padrão é verdadeiro.
    Variável de saída
    changesetNumber

    Registro do conjunto de mudanças criado/confirmado durante o carregamento.

    Forneça um nome para a tarefa para que ela possa ser usada posteriormente no pipeline (por exemplo, ComponentUpload ).

    Exemplo - Carregar configuração
    
    -task: ServiceNow-DevOps-Config-Agent-Upload-Config
     name: componentUpload​
     inputs:​
       connectedServiceName: 'MyServiceNowInstance'​
       applicationName: 'PaymentDemo'​
       uploadTarget: 'component'​
       namePath: 'wep-api-v1.0'
       configFilePath: 'k8s/helm/values.yml'​
       dataFormat: 'yaml'
       autoCommit: true​
       autoValidate: true​
     
    Exemplo - Vários carregamentos (componente)
    Você pode chamar a tarefa de carregamento mais de uma vez para carregar dados de configuração em diferentes formatos de arquivo de diferentes locais, mantendo os carregamentos como parte de um conjunto de mudanças.
    • No primeiro carregamento, nomeie a tarefa para que a variável de saída changesetNumber possa ser reutilizada nos carregamentos subsequentes.
      Carregamento de arquivo YAML:
      
      -task: ServiceNow-DevOps-Config-Agent-Upload-Config​
         name: componentUpload​
         inputs:​ 
           connectedServiceName: 'MyServiceNowInstance'​
           applicationName: 'PaymentDemo'​
           uploadTarget: 'component'​
           namePath: 'wep-api-v1.0'
           configFilePath: 'k8s/helm/values.yml'​
           dataFormat: 'yaml'
           autoCommit: false​
           autoValidate: false​
    • Em carregamentos subsequentes, faça referência à variável de saída changesetNumber do primeiro carregamento como uma variável de entrada.
      Carregamento de arquivo JSON:
      
      -task: ServiceNow-DevOps-Config-Agent-Upload-Config
         inputs:​
           connectedServiceName: 'MyServiceNowInstance'
           applicationName: 'PaymentDemo'
           uploadTarget: 'component'
           namePath: 'wep-api-v1.0'
           configFilePath: 'featureToggles/set1.json'
           dataFormat: 'json'
           autoCommit: true​
           autoValidate: true​
           changesetNumber: '$(componentUpload.changesetNumber)'
    Exemplo - Vários carregamentos (coleção e variáveis)
    Você pode chamar a tarefa de carregamento mais de uma vez para carregar dados de configuração em diferentes formatos de arquivo de diferentes locais, mantendo os carregamentos como parte de um conjunto de mudanças.
    • No primeiro carregamento, certifique-se de nomear a tarefa para que a variável de saída changesetNumber possa ser reutilizada nos carregamentos subsequentes.
      Carregamento de arquivo XML:
      
      -task: ServiceNow-DevOps-Config-Agent-Upload-Config​
         name: componentUpload​
         inputs:​ 
           connectedServiceName: 'MyServiceNowInstance'​
           applicationName: 'PaymentDemo'​
           uploadTarget: 'collection'​
           collectionName: 'release-1.0'​
           namePath: 'v1-common-configs'
           configFilePath: 'infra/v1/config.xml'​
           dataFormat: 'xml'
           autoCommit: false​
           autoValidate: false​
    • Em carregamentos subsequentes, faça referência à variável de saída changesetNumber do primeiro carregamento como uma entrada.
      Carregamento de arquivo JSON:
      
      -task: ServiceNow-DevOps-Config-Agent-Upload-Config
         inputs:​
           connectedServiceName: 'MyServiceNowInstance'
           applicationName: 'PaymentDemo'
           uploadTarget: 'deployable'
           deployableName: 'Production-EMEA'
           namePath: 'vars/dbSettings'
           configFilePath: 'infra/prodc/dbSettings.json'
           dataFormat: 'json'
           autoCommit: true​
           autoValidate: true​
           changesetNumber: '$(componentUpload.changesetNumber)'
    Nota:
    Para carregar para uma pasta de variáveis, uploadTarget deve ser definido como implantável E os valores corretos devem ser definidos para deployableName e changesetNumber.

    ServiceNow-DevOps-Config-Agent-Get-Snapshot

    Esta tarefa deve ser usada em diferentes cenários:
    • Recupere um snapshot específico.

      Após o fluxo do CD, um snapshot específico é recuperado para que possa ser publicado e exportado para ser consumido downstream (por exemplo, para provisionar infraestrutura ou aplicação).

    • Recupere o snapshot validado mais recente.

      O snapshot validado mais recente é recuperado para a combinação implantável pela aplicação fornecida.

    • Recupere todos os snapshots de todos os implantáveis afetados.

      Quando os arquivos de configuração são carregados em um modelo de dados da aplicação, o sistema cria snapshots para todos os implantáveis determinados como afetados pelo carregamento. Acompanhando o fluxo de IC, supondo que a última chamada de carregamento tenha a validação habilitada, a próxima etapa seria iterar a lista de snapshots e garantir que todos tenham sido aprovados na validação.

    • Recupere os snapshots mais recentes para uma implantação de uma aplicação caso um carregamento não gere snapshots.

      Um conjunto de dados de configuração está disponível para implantação em um ambiente para uma combinação aplicação-implantável-conjunto de mudanças quando nenhuma mudança de configuração é feita.

    • Mostre resultados de validação de política em uma execução de pipeline.

      Exiba os resultados de validação de política como resultados de teste na página Resultados de testes de compilação do ADO, incluindo Conformidade com exceção, ao obter um snapshot.

    Variáveis de entrada
    ConnectedServiceName Especifica o. DevOps conexão de endpoint de pipeline (definida nas configurações de conexão de serviço do projeto).
    applicationName Especifica a aplicação para a qual carregar dados de configuração ou exportar dados.
    DeployableName (Opcional) Especifica o implantável (de acordo com a aplicação especificada) no qual os dados de snapshot mais recentes serão obtidos.
    changesetNumber (Opcional) Especifica o ID do conjunto de mudanças para o conjunto aplicável de mudanças de configuração.
    IsValidado (Opcional) Especifica se devem retornar somente snapshots aprovados ou passados com exceção (verdadeiro/falso). O valor padrão é verdadeiro.
    ContinuoWithLatest (Opcional) Especifica se o snapshot mais recente deve ser retornado por ApplicationName - DeployableName - ChangesetNumber combinação se nenhum snapshot for gerado (verdadeiro/falso). O valor padrão é falso.
    Variável de saída
    SnapshotObject

    Um objeto JSON que contém os snapshots solicitados.

    Forneça um nome para a tarefa para que ela possa ser usada posteriormente no pipeline (por exemplo, Obter Snapshot ).

    Exemplo - snapshot específico
    
    -task: ServiceNow-DevOps-Config-Agent-Get-Snapshot
     name: getSnapshot
     inputs:
       connectedServiceName: 'MyServiceNowInstance'
       applicationName: 'PaymentDemo'
       deployableName: 'Production'
       changesetNumber: 'Chset-16'
       isValidated: true
       continueWithLatest: true
    
    Snapshots validados mais recentes (para uma determinada combinação implantável pela aplicação)
    
    -task: ServiceNow-DevOps-Config-Agent-Get-Snapshot
     name: getSnapshot
     inputs:
       connectedServiceName: 'MyServiceNowInstance'
       applicationName: 'PaymentDemo'
       deployableName: 'Production'
       isValidated: true
    
    Exemplo - Todos os snapshots do conjunto de mudanças
    
    -task: ServiceNow-DevOps-Config-Agent-Get-Snapshot
     name: getSnapshot
     inputs:
       connectedServiceName: 'MyServiceNowInstance'
       applicationName: 'PaymentDemo'
       changesetNumber: 'Chset-16'
    
    Exemplo - Mostrar resultados de validação de política

    Atribua uma variável ao caminho do arquivo que contém os resultados de validação de snapshot gerados durante ServiceNow-DevOps-Config-Agent-Get-Snapshot tarefa.

    Para carregar os resultados de validação de snapshot na execução do pipeline, você precisa aproveitar o ADO nativo Tarefa Publicar resultados de teste v2 usando a variável como entrada.

    
    stages:
    - stage: Two
      jobs:
        - job: A
    	variables:
          - name: validationResultsPath
            value: 1/TEST_DATA_$(Build.DefinitionName)_$(Build.BuildNumber)_*.xml
          steps:
            - task: PublishTestResults@2
              inputs:
                 testResultsFormat: 'JUnit'
                 testResultsFiles: '$(validationResultsPath)'
                 searchFolder: '$(System.WorkFolder)'
    

    ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name

    Esta tarefa é usada como acompanhamento do ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name tarefa para obter o nome do snapshot de um snapshot específico. Aqui, o nome do snapshot pode ser usado como entrada para uma tarefa descendente, como publicar o snapshot.

    Variáveis de entrada
    DeployableName Especifica o implantável para obter o objeto de snapshot que foi retornado do ServiceNow-DevOps-Config-Agent-Get-Snapshot tarefa.
    script Especifica o script para extrair o nome do snapshot do objeto de snapshot.
    Variável de saída
    nomeSnapshot

    O nome do snapshot do implantável.

    Forneça um nome para a tarefa para que ela possa ser usada posteriormente no pipeline (por exemplo, GetSnapshotName ).

    Exemplo - Obter nome do snapshot

    Use este script para extrair o nome do snapshot recuperado do ServiceNow-DevOps-Config-Agent-Get-Snapshot tarefa.

    
    -task: ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name
     inputs:
       deployableName: 'PRD'
       script: |
    	function run() {
            let name;
            let deployableName = process.argv[2];
            let jsonObj = $(getSnapshot.snapshotObjects);
            let size = jsonObj.result.length;
            for(let i=0; i<size; i++) {
             obj = jsonObj.result[i];
             if(obj[“deployable_id.name”].toLowerCase() == deployableName) {
               name = obj.name;
               console.log(name);
              }
             }
            }
            run();
    
    Exemplo - Obter nome do snapshot usado com Obter snapshot

    Ligue para ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name tarefa logo após ServiceNow-DevOps-Config-Agent-Get-Snapshot tarefa para retornar o nome do snapshot.

    Obter snapshots (retorna um objeto JSON que contém snapshots afetados):
    
    -stage: Two​
     jobs:​
        -job: B​
         steps:​
            -task: ServiceNow-DevOps-Config-Agent-Get-Snapshot
             name: getSnapshot​
             inputs:​
                connectedServiceName: 'MyServiceNowInstance'​​
                applicationName: 'PaymentDemo'​
                deployableName: 'Production-2'
                changesetNumber: 'Chset-16'​
    Obter nome do snapshot (retorna o nome do snapshot para um implantável específico):
    
    -stage: Two​
     jobs:​
        - job: B​
          steps:​
            - task: ServiceNow-DevOps-Config-Agent-Get-Snapshot
              name: getSnapshotName​
              inputs:​
                  deployableName: 'Production-2'
                  script:|​
                  function run() {​
                   let name;​
                   let deployableName = process.argv[2]; ​
                   let jsonObj = $(getSnapshot.snapshotObjects);​
                   let size = jsonObj.result.length;​
                   for(let i=0; i<size ;i++) {​
                    obj = jsonObj.result[i];​
                    if(obj["deployable_id.name"].toLowerCase() == deployableName) {​
                     name = obj.name;​
                     console.log(name); // This standard output of inline script is given as the task output​
                    }​
                   }​
                  }​
                  run();
    
    Use o nome do snapshot retornado no pipeline (por exemplo, publicar):
    
    -stage: Three​
     jobs:​
        -job: C​
         variables:​
           varSnapshotName: $[stageDependencies.Two.B.outputs['getSnapshotName.snapshotName']]​
         steps:​
            -task: ServiceNow-DevOps-Config-Agent-Publish-Snapshot
             inputs:​
               connectedServiceName: 'MyServiceNowInstance'
               applicationName: 'PaymentDemo'
               deployableName: 'Production-2'
               snapshotName: '$(varSnapshotName)'​

    ServiceNow-DevOps-Config-Agent-Publish-Snapshot

    Esta tarefa publica um snapshot para a aplicação fornecida e implantável. A partir daqui, o snapshot pode ser consumido por meio do processo de exportação.

    Variáveis de entrada
    ConnectedServiceName Especifica o. ServiceNow conexão de endpoint.
    applicationName Especifica a aplicação a ser publicada.
    DeployableName Especifica o implantável para a aplicação publicar dados de configuração.
    nomeSnapshot Especifica o nome do snapshot a ser publicado.
    Variável de saída
    Não aplicável (retorna verdadeiro se bem-sucedido, caso contrário, falso).
    Exemplo
    
    -task: ServiceNow-DevOps-Config-Agent-Publish-Snapshot
     inputs:
       connectedServiceName: 'MyServiceNowInstance'
       applicationName: 'PaymentDemo'
       deployableName: 'Production-2'
       snapshotName: 'Production-v23.dpl'
    

    ServiceNow-DevOps-Config-Agent-Export-Snapshot

    Esta tarefa exporta um snapshot para a aplicação fornecida e implantável. Especifique o exportador, os argumentos relevantes do exportador, o formato de exportação (por exemplo, YAML, JSON etc.) e o local de saída dos dados de configuração exportados. A partir daqui, os dados de configuração podem ser usados diretamente como uma entrada para uma implantação ou ferramenta de provisionamento downstream no pipeline.

    Variáveis de entrada
    ConnectedServiceName Especifica o. ServiceNow conexão de endpoint.
    applicationName Especifica a aplicação da qual publicar.
    DeployableName Especifica o implantável para a aplicação da qual exportar dados de configuração.
    nomeSnapshot Especifica o nome do snapshot do qual exportar os dados de configuração.
    Nome da exportação Especifica o exportador a ser aplicado ao snapshot (por exemplo, UniqueCDIs ).
    args (Opcional) Especifica argumentos a serem usados junto com o exportador.
    ExportFormat Especifica o formato para exportar os dados do snapshot (por exemplo, INI , YAML , PROPRIEDADES ).
    SalvaArquivo

    Verifica se o arquivo deve ser salvo em um repositório do Azure (verdadeiro/falso). O valor padrão é falso.

    Nota:
    Permissão apropriada/acesso ao token OAuth ao script é necessário.

    Caso contrário, o arquivo de exportação será criado no diretório do espaço de pipeline.

    Variável de saída
    Não aplicável (retorna verdadeiro se bem-sucedido, caso contrário, falso).
    Exemplo
    
    -task: ServiceNow-DevOps-Config-Agent-Export-Snapshot
     inputs:
       connectedServiceName: 'MyServiceNowInstance'
       applicationName: 'PaymentDemo'
       deployableName: 'Production-2'
       exporterName: 'returnAllData-nowPreview'
       dataFormat: 'yaml'
       args: ''
       snapshotName: 'Production-v23.dpl'
       saveFile: true​
       fileName: 'ExporterOutput/ExportData_$(build.definitionName)_$(build.buildNumber).yaml'
       

    ServiceNow-DevOps-Config-Agent-Registrar-Pipeline

    Esta tarefa vincula um conjunto de mudanças e um snapshot ao pipeline para que ele possa ser rastreado durante a execução do pipeline. Em Velocidade de mudança para DevOps, Isso é mostrado na IU do Pipeline.

    Variáveis de entrada
    ConnectedServiceName Especifica o. DevOps conexão de endpoint de pipeline.
    applicationName Especifica o nome da aplicação.
    changesetNumber (Opcional) Especifica o ID do conjunto de mudanças a ser associado à execução do pipeline.
    nomeSnapshot (Opcional) Especifica o nome do snapshot a ser associado à execução do pipeline.
    Variável de saída
    Não aplicável (retorna verdadeiro se bem-sucedido, caso contrário, falso).
    Exemplo
    
    -task: ServiceNow-DevOps-Config-Agent-Publish-Snapshot
     inputs:
       connectedServiceName: 'MyServiceNowInstance'
       changesetNumber: 'Changeset-143'
    

    ServiceNow-DevOps-Config-Agent-Validate-Snapshot

    Valide os dados de configuração em relação às políticas da sua organização.
    Variáveis de entrada
    ConnectedServiceName Especifica o. ServiceNow conexão de endpoint.
    applicationName Especifica a aplicação a ser validada.
    DeployableName Especifica o implantável (de acordo com a aplicação especificada) a ser validado.
    nomeSnapshot (Opcional) Especifica o nome do snapshot a ser validado.
    MostrarResultados (Opcional) Especifica para mostrar os resultados de validação no log do console.
    Variável de saída
    Não aplicável (retorna verdadeiro se bem-sucedido, caso contrário, falso).
    Exemplo
    
    -task: ServiceNow-DevOps-Config-Agent-Validate-Snapshot
     inputs:
       connectedServiceName: 'MyServiceNowInstance'
       applicationName: 'PaymentDemo'
       deployableName: 'Production-2'
       snapshotName: ''
       showResults: false
    

    ServiceNow-DevOps-Server-Change-Acceleration

    Esta tarefa é necessária para que trabalhos sem agente (servidor) criem automaticamente uma solicitação de mudança em ServiceNow Gestão de mudanças como parte do Azure DevOps pipeline.

    Em Configuração de DevOps, para associar vários snapshots do mesmo conjunto de mudanças a uma solicitação de mudança, use o nome do snapshot e o nome da aplicação para rastrear dados de configuração específicos de um determinado serviço de aplicações.

    Consulte Acelerar seu DevOps processo de mudança para obter mais informações sobre DevOps Recurso de aceleração de mudança.

    Variáveis de entrada (relacionadas a Configuração de DevOps)
    ConnectedServiceName Especifica o. DevOps conexão de endpoint de pipeline.
    applicationName Aplicação associada ao snapshot que está sendo anexado à solicitação de mudança.
    nomeSnapshot Nome do snapshot a ser anexado à solicitação de mudança.
    Exemplo
    
    -stage: ChangeRequest
     jobs:
        -job: 'changerequestjob'
         pool: server
         steps:
            -task: ServiceNow-DevOps-Server-Change-Acceleration
             inputs:
                connectedServiceName: 'MyServiceNowInstance'
                applicationName: 'PaymentDemo'
                snapshotName: 'Production-v23.dpl'
    

    Exemplo de pipeline YAML

    trigger:
      branches:
        include:
        - none
    stages:
    - stage: One
      displayName: Upload Configuration Data
      pool:
        vmImage: ubuntu-latest
      jobs:
      - job: A
        displayName: Upload
        steps:
        - task: ServiceNow-DevOps-Config-Agent-Upload-Config@1
          name: componentUpload
          inputs:
            connectedServiceName: 'MyServiceNowInstance'
            applicationName: 'PaymentDemo'
            uploadTarget: 'component'
            configFile: 'k8s/helm/values.yml'
            namePath: 'processor-api-v1.0'
            dataFormat: 'yaml'
            autoValidate: true
            autoCommit: true
            convertPath: true
    - stage: Two
      displayName: Get Latest Snapshot
      pool:
        vmImage: ubuntu-latest
      jobs:
      - job: B
        displayName: Get Snapshot
        variables:
        - name: varChangesetNumber
          value: $[stageDependencies.One.A.outputs['componentUpload.changesetNumber'] ]
        - name: varConfigValidationResults
            value: 1/TEST_DATA_$(Build.DefinitionName)_$(Build.BuildNumber)_*.xml
        steps:
        - task: ServiceNow-DevOps-Config-Agent-Get-Snapshot@1
          name: getSnapshot
          inputs:
            connectedServiceName: 'MyServiceNowInstance'
            applicationName: 'PaymentDemo'
            deployableName: 'Production-EMEA'
            changeSetNumber: '$(varChangesetNumber)'
            continueWithLatest: true
        - task: ServiceNow-DevOps-Config-Agent-Get-Snapshot-Name@1
          name: getSnapshotName
          inputs:
            deployableName: 'Production-EMEA'
            script: "function run() {\n  let name;\n  let deployableName = process.argv[2]; \n  let jsonObj = $(getSnapshot.snapshotObjects);\n  let size = jsonObj.result.length;\n  for(let i=0; i<size ;i++) {\n    obj = jsonObj.result[i];\n    if(obj[\"deployable_id.name\"].toLowerCase() == deployableName) {\n      name = obj.name;\n      console.log(name);   // This standard output of inline script is given as the task output\n    }\n  }\n}\nrun();\n"
        - task: PublishTestResults@2
              inputs:
                 testResultsFormat: ‘JUnit’
                 testResultsFiles: ‘$(varConfigValidationResults)’
                 searchFolder: ‘$(System.WorkFolder)’
        - task: ServiceNow-DevOps-Config-Agent-Register-Pipeline@1
          inputs:
            connectedServiceName: 'MyServiceNowInstance'
            snapshotName: '$(getSnapshotName.snapshotName)'
            applicationName: 'PaymentDemo'
    - stage: Three
      displayName: Publish Snapshot
      pool:
        vmImage: ubuntu-latest
      jobs:
      - job: C
        displayName: Publish
        variables:
        - name: varSnapshotName
          value: $[stageDependencies.Two.B.outputs['getSnapshotName.snapshotName']]
        steps:
        - task: ServiceNow-DevOps-Config-Agent-Publish-Snapshot@1
          inputs:
            connectedServiceName: 'MyServiceNowInstance'
            applicationName: 'PaymentDemo'
            deployableName: 'Production-EMEA'
            snapshotName: '$(varSnapshotName)'
    - stage: ChangeRequest
      dependsOn:
      - Two
      - Three
      jobs:
      - job: 'changerequestjob'
        timeoutInMinutes: 2
        pool:
          name: server
        variables:
        - name: varSnapshotName
          value: $[stageDependencies.Two.B.outputs['getSnapshotName.snapshotName']]
        steps:
        - task: ServiceNow-DevOps-Server-Change-Acceleration@1
          inputs:
            connectedServiceName: 'MyServiceNowInstance'
            applicationName: 'PaymentDemo'
            snapshotName: '$(varSnapshotName)'
    - stage: Four
      displayName: Export Snapshot
      dependsOn:
      - Two
      - Three
      - ChangeRequest
      pool:
        vmImage: ubuntu-latest
      variables:
      - name: varSnapshotName
        value: $[stageDependencies.Two.B.outputs['getSnapshotName.snapshotName']]
      jobs:
      - job: D
        displayName: Export
        steps:
        - task: ServiceNow-DevOps-Config-Agent-Export-Snapshot@1
          inputs:
            connectedServiceName: 'MyServiceNowInstance'
            applicationName: 'PaymentDemo'
            deployableName: 'Production-EMEA'
            exporterName: 'returnAllData-now'
            dataFormat: 'yaml'
            snapshotName: '$(varSnapshotName)'
            saveFile: true
            fileName: 'ExportData_$(build.definitionName)_$(build.buildNumber).yaml'
        - task: CmdLine@2
          inputs:
            script: |
              echo Write your commands here
              echo Hello world
              tree $(Pipeline.Workspace)