Criando DevOps subfluxos

  • Versão de lançamento: Yokohama
  • Atualizado 30 de jan. de 2025
  • 5 min. de leitura
  • Para integrações criadas pelo usuário, crie um subfluxo DevOps Workflow Studio para coletar e transformar dados da ferramenta que você está integrando.

    ServiceNow Flow Designer é um recurso Now Platform que seu desenvolvedor de integração pode usar para automatizar processos usando uma sequência de ações. As condições do gatilho iniciam o fluxo e as variáveis passam informações entre as ações.

    Consulte Flow Designer Subfluxos para obter informações sobre como criar um subfluxo.

    Subfluxo da capacidade de notificação

    Item Valor esperado
    Entradas

    Rótulo: atual

    Tipo: Referência.Evento de entrada

    Saídas

    N/D

    Transforme a carga original e salve a carga final no campo transform_payload.

    Carga da capacidade de Notificação JSON padrão esperada - Ferramenta de planejamento
    Nota:
    O atributo de versão na carga JSON é opcional. Mesmo se você não fornecer o atributo de versão, a carga será processada com sucesso.
    {
      "id": "STR1234",
      "type": "Story",
      "shortDescription": "Planning API Spec",
      "state": "In-progress",
      "createdDateTime": "1970-01-01T08:15:30-05:00",
      "assignedTo": {
        "name": "Leo Neo",
        "userName": "lenn",
        "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "email": "lenn@smithworksinc.com"
      },
    // The Version attribute is optional
      "version": {
          "id": "REL1234",
          "shortDescription": "APIs Release",
          "createdDateTime": "1970-01-01T08:15:30-05:00",
          "app": {
              "id": "PRODUCT1234",
              "shortDescription": "Mobile UI",
              "createdDateTime": "1970-01-01T08:15:30-05:00",
              "url": "https://jira.com/mycompany/browse/PRODUCT-125"
            },
          "url": "https://jira.com/mycompany/browse/REL-125"
        },
      "app": {
          "id": "PRODUCT1234",
          "shortDescription": "Mobile UI",
          "createdDateTime": "1970-01-01T08:15:30-05:00",
          "url": "https://jira.com/mycompany/browse/PRODUCT-125"
        },
      "url": "https://jira.com/mycompany/browse/HALOKEY-25"
    }
    Carga da capacidade de Notificação JSON padrão esperada - Ferramenta de codificação
    {
      "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "url": "https://github.com/mycompany/mobileplatform/commit/3fa85f6457174562b3fc2c963f66afa6",
      "committedDate": "1970-01-01T08:15:30-05:00",
      "repository": {
        "name": "Platform-Mobile",
        "url": "https://github.com/mycompany/mobileplatform"
      },
     "branch": {
        "name": "master",
        "path": "refs/heads/master"
      },
      "committer": {
        "email": "lenn@smithworksinc.com"
      },
      "details": [
        {
          "additions": 0,
          "deletions": 0,
          "totalChanges": 0,
          "file": "src/test/java/com/mycompany/app/App.java",
          "action": "modified",
          "changes": "%40%40%20-30%2C6%20%2B30%2C18%20%40%40%20public%20void%20testAppConstructor%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%7D%0A%20%0A%2B%20%20%20%20%40Test%0A%2B%20%20%20%20public%20void%20testDatabase%28%29%0A%2B%20%20%20%20%7B%0A%2B%09%2F%2FThis%20is%20a%20test%20function%0A%2B%20%20%20%20%20%20%20%20App.main%28null%29%3B%0A%2B%20%20%20%20%20%20%20%20try%20%7B%0A%2B%20%20%20%20%20%20%20%20%20%20%20%20assertEquals%28%22Hello%20World%21%22%20%2B%20System.getProperty%28%22line.separator%22%29%2C%20outContent.toString%28%29%29%3B%0A%2B%20%20%20%20%20%20%20%20%7D%20catch%20%28AssertionError%20e%29%20%7B%0A%2B%20%20%20%20%20%20%20%20%20%20%20%20fail%28%22%22message%22%20is%20not%20%22Hello%20World%21%22%22%29%3B%0A%2B%20%20%20%20%20%20%20%20%7D%0A%2B%20%20%20%20%7D%0A%2B%0A%20%20%20%20%20%40Test%0A%20%20%20%20%20public%20void%20testAppMain%28%29%0A%20%20%20%20%20%7B"
        }
      ]
    }
     
    Carga da capacidade de Notificação JSON padrão esperada - Ferramenta de Orquestração
    {
      "toolId": "bc1d9454dbdb0810ae77f3c61d9619d1",
      "buildNumber": "100",
      "nativeId": "HILR/Prod #100",
      "name": "HILR/Prod",
      "id": "HILR/Prod #100",
      "url": "https://dev.azure.com/lenn/CorpSite-ADO/_build/results?buildId=100#Prod/",
      "isMultiBranch": "false",
      "orchestrationTaskUrl": "https://dev.azure.com/lenn/CorpSite-ADO/_build?name=HILR#Prod",
      "orchestrationTaskName": "CorpSite-ADO/HILR#Prod",
      "upstreamTaskUrl": "https://dev.azure.com/lenn/CorpSite-ADO/_build/results?buildId=100#UAT/",
      "upstreamId": "CorpSite-ADO/HILR#UAT",
      "result": "building",
      "startDateTime": "2020-03-20 22:59:27"
    }
    
    Carga da capacidade de Notificação JSON padrão esperada - Ferramenta de teste
    Funcional:
    { 
    "name": "CorpSite-selenium#55", 
    "duration": 78.802, 
    "passedTests": 4, 
    "failedTests": 0, 
    "skippedTests": 0, 
    "blockedTests": 0, 
    "totalTests": 4, 
    "startTime": "2020-06-30T18:12:31Z", 
    "finishTime": "2020-06-30T18:12:31Z", 
    "passingPercent": 100, 
     
     
    // Use Artifact OR Package OR Build + Stage + PipelineName Attributes 
    "packages": [{"name": "CorpSite-pkg1"}], 
    "artifacts": [{"name": "CorpSite-artifact", "version": "1.0.0"}], 
    "buildNumber": "55", 
    "stageName": "test", 
    "pipelineName": "CorpSite-selenium", 
    } 
    
    Desempenho:
    { 
    "name": "Performance Tests", 
    "url": "http://abc.com", 
    "startTime": "2020-06-30T18:12:31Z", 
    "finishTime": "2020-06-30T18:12:31Z", 
    "duration": 78.802, 
    "maximumVirtualUsers": "", 
    "throughput": "", 
    "maximumTime": "", 
    "minimumTime": "", 
    "averageTime": "", 
    "ninetyPercent": "", 
    "standardDeviation": "", 
     
    // Use Artifact OR Package OR Build + Stage + PipelineName Attributes 
    "packages": [{"name": "CorpSite-pkg1"}], 
    "artifacts": [{"name": "CorpSite-artifact", "version": "1.0.0"}], 
    "buildNumber": "55", 
    "stageName": "test", 
    "pipelineName": "CorpSite-Performance", 
    } 
    
    Carga esperada da capacidade de Notificação JSON padrão - Ferramenta de artefato
    Pipelines:
    {
      "artifacts": [
        {
          "name": "acm.jar",
          "version": "1.82",
          "semanticVersion": "1.82.0",
          "repositoryName": "acm-repo"
        }
      ],
      "pipelineName": "testMultiBranch/master",
      "taskExecutionNumber": "82",
      "stageName": "buildmbmaster",
      "branchName": "master"
    }
    
    Jenkins Projeto de estilo livre/Maven:
    {
      "artifacts": [
        {
          "name": "mav1.jar",
          "version": "1.11",
          "semanticVersion": "1.11.0",
          "repositoryName": "mav-repo"
        }
      ],
      "projectName": "maven-test-proj",
      "taskExecutionNumber": "11"
    }
    
    Figura 1. DevOps Exemplo de diagrama de fluxo da capacidade de notificação - Ferramenta de codificação
    Fluxo da ferramenta de codificação de notificação de DevOps

    Subfluxo da capacidade de conexão

    A capacidade Connect é compatível.

    Item Valor esperado
    Entradas

    Rótulo: atual

    Tipo: Referência.Ferramenta de DevOps

    Registro da ferramenta para o qual a ação do botão Conectar é clicada.

    Saídas

    Consulte as saídas de subfluxo.

    • Rótulo: conectado

      Sinalizador que indica o sucesso ou a falha da conexão feita com a ferramenta de destino (verdadeiro/falso).

    • Rótulo: errormessage

      Mensagem de cadeia de caracteres exibida no formulário para falha de conexão. A variável será uma cadeia de caracteres vazia se a conexão for bem-sucedida.

    Erros de conexão mostrados no formulário da ferramenta DevOps :
    Falha na conexão
    O subfluxo foi executado com sucesso, mas não foi possível estabelecer a conexão.
    Erro: falha ao obter detalhes da falha do fluxo de conexão específico da ferramenta
    Falha na execução do subfluxo por um motivo desconhecido.
    Erro ao atualizar o status de conexão da ferramenta
    Não foi possível atualizar o atributo connection_state por um motivo desconhecido.
    Figura 2. DevOps Exemplo de diagrama de fluxo de capacidade do Connect - Ferramenta de Orquestração
    DevOps Connect Orchestration Tool

    Subfluxo de capacidade de descoberta

    A capacidade de descoberta é compatível.

    Item Valor esperado
    Entradas

    Rótulo: atual

    Tipo: Referência.Ferramenta de DevOps

    Saídas

    Consulte as saídas de subfluxo.

    Sem paginação:

    Rótulo: discoverypayload

    Tipo: matriz de objetos como cadeia de caracteres JSON.

    (JSON.stringify([{},{}]))

    Ferramenta de planejamento sem paginação:

    [
    {
       "id":"REL1234567",
       "name": "REL NUMBERS",
       "url":"https://jira.com/vult/browse/REL1234567",
       "nativeId": "1790e6cc-085b-4529-9cb8-47f393182226"
    },
    {
       "id":"TOR67",
       "name": "TOR 67",
       "url":"https://jira.com/welp/browse/TOR67",
       "nativeId": "482ce864-085b-4529-9cb8-47f393767eb2"
    }
    ]
    Ferramenta de codificação sem paginação:
    [
      {
          "name": "nvm_repo",
          "url": "https://github.com/nvm_repo/"
      },
      {
          "name": "golang_util",
          "url": "https://github.com/golang_util/"
      }
    ];
    Ferramenta de Orquestração sem paginação:
    {
      "orchestrationTasks": [
        {
          "name": "Build_APC_1",
          "url": "https://jenkins.wsf.xyz/job/Build_APC_1",
          "projectName": "Build_APC_1"
        },
        {
          "name": "CI_CD_Jenkins",
          "url": "https://pt1.jenkins.com/job/CI_CD_Jenkins",
          "projectName": "CI_CD_Jenkins"
        },
        {
          "name": "CI_deploy",
          "url": "https://pt2.jenkins.com/job/CI_deploy",
          "projectName": "CI_deploy"
        }
      ],
      "pipelines": [
        {
          "name": "Build_APC_1",
          "url": "https://jenkins.wsf.xyz/job/Build_APC_1",
          "projectName": "Build_APC_1"
        },
        {
          "name": "CI_CD_Jenkins",
          "url": "https://pt1.jenkins.com/job/CI_CD_Jenkins",
          "projectName": "CI_CD_Jenkins"
        },
        {
          "name": "CI_deploy",
          "url": "https://pt2.jenkins.com/job/CI_deploy",
          "projectName": "CI_deploy"
        }
      ]
    }

    Com paginação:

    Rótulo: discoverypayload

    Tipo: matriz de objetos como cadeia de caracteres JSON.

    (JSON.stringify([{},{}]))

    Exemplo de formato JSON:

    "pageInfo" : {
        "isLastPage" : true, 
        "discoverPayload" : {},
        “pageDetails” : {}
    }
    Ferramenta de planejamento com paginação:
    {               
        "pageInfo": {
            "isLastPage": false,
            "discoverPayload": [
                {
                   "id":"REL1234567",
                   "name": "REL NUMBERS",
            "url":"https://jira.com/vult/browse/REL1234567",
                   "nativeId": "1790e6cc-085b-4529-9cb8-47f393182226"
                },
                {
                   "id":"TOR67",
                   "name": "TOR 67",
                   "url":"https://jira.com/welp/browse/TOR67",
                   "nativeId": "482ce864-085b-4529-9cb8-47f393767eb2"
                }
                ],
            "pageDetails": {
                "curPage" : 1,
                "nextPage": 2
            }
        }
    }
    Ferramenta de codificação com paginação:
    {
        "pageInfo": {
            "isLastPage": false,
            "discoverPayload": [
                {
                    "name": "nvm_repo",
                    "url": "https://github.com/nvm_repo/"
                },
                {
                    "name": "golang_util",
                    "url": "https://github.com/golang_util/"
                }
            ],
            "pageDetails": {
                "curPage" : 1,
                "nextPage": 2
            }
        }
    }
    Ferramenta de Orquestração com paginação:
    { 
        "pageInfo": { 
            "isLastPage": false, 
            "discoverPayload": { 
                "orchestrationTasks": [ 
                  { 
                    "name": "Build_APC_1", 
                    "url": "https://jenkins.wsf.xyz/job/Build_APC_1", 
                    "projectName": "Build_APC_1" 
                  }, 
                  { 
                    "name": "CI_CD_Jenkins", 
                    "url": "https://pt1.jenkins.com/job/CI_CD_Jenkins", 
                    "projectName": "CI_CD_Jenkins" 
                  } 
                ], 
                "pipelines": [ 
                  { 
                    "name": "Build_APC_1", 
                    "url": "https://jenkins.wsf.xyz/job/Build_APC_1", 
                    "projectName": "Build_APC_1" 
                  } 
                ] 
              }, 
            "pageDetails": { 
                "curPage" : 1, 
                "nextPage": 2 
            } 
        } 
    } 
    O fluxo principal de descoberta é acionado durante a criação do registro de solicitação de importação. Uma solicitação de importação tem esses estados e mensagens.
    Estado Mensagem
    Solicitado --
    Processando --
    Concluído

    Atualizado<number> objeto(s)

    Encontrado<number> objetos com toolId inválido

    Encontrado<number> falha na validação de objetos

    Erro
    • Não é possível analisar a cadeia de caracteres de carga do subfluxo
    • Espera-se que a carga de descoberta seja uma matriz de objetos
    • O registro ImportRequest não tem referência à tabela de ferramentas
    Em pausa --
    Cancelado --
    Incompatíveis --
    Figura 3. DevOps Exemplo de diagrama de fluxo de capacidade de descoberta - Ferramenta de planejamento
    Fluxo da ferramenta do plano de descoberta de DevOps
    Figura 4. DevOps Capacidade de descoberta com diagrama de fluxo de suporte de paginação
    Diagrama de fluxo de um fluxo de descoberta típico com suporte de paginação

    Atualizar ação de solicitação de importação Workflow Studio

    Você pode usar a ação Atualizar solicitação de importação no subfluxo de descoberta para modificar o estado do registro da solicitação de importação, se desejar.

    Rótulo de entrada Tipo
    atual

    Referência.Solicitação de importação

    estado (Cadeia de caracteres)
    • solicitado
    • processando
      Nota:
      A execução do fluxo é interrompida (depois que o retorno é recebido do subfluxo) quando o estado é definido como processamento.
    • concluído
    • erro
    • pausado
    • cancelado(a)
    • incompatível
    detalhes (Cadeia de caracteres)