Création de DevOps flux secondaires

  • Rversion finale: Xanadu
  • Mis à jour 1 août 2024
  • 5 minutes de lecture
  • Pour les intégrations créées par les utilisateurs, créez un DevOps Studio de workflow flux secondaire pour collecter et transformer les données de l’outil que vous intégrez.

    ServiceNow Flow Designer est une Now Platform fonctionnalité que votre développeur d’intégration peut utiliser pour automatiser les processus à l’aide d’une séquence d’actions. Les conditions de déclenchement démarrent le flux et les variables transmettent des informations entre les actions.

    Pour en savoir plus sur la création d’un flux secondaire, consultez Flow Designer Flux secondaires.

    Flux secondaire d’aptitude de notification

    Élément Valeur attendue
    Entrées

    Étiquette : actuelle

    Type : Reference.Événement entrant

    Sorties

    N/A

    Transformez la charge utile d’origine et enregistrez la charge utile finale dans le champ transformed_payload .

    Charge utile attendue de l’aptitude de notification JSON standard : outil de planification
    Remarque :
    L’attribut de version de la charge utile JSON est facultatif. Même si vous ne fournissez pas l’attribut de version, la charge utile est traitée avec succès.
    {
      "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"
    }
    Charge utile attendue de l’aptitude de notification JSON standard : outil de codage
    {
      "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"
        }
      ]
    }
     
    JSON standard attendu Charge utile de l’aptitude de notification : outil d’orchestration
    {
      "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"
    }
    
    JSON standard attendu Charge utile de l’aptitude de notification : outil de test
    Fonctionnel:
    { 
    "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", 
    } 
    
    Performance:
    { 
    "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", 
    } 
    
    Charge utile de l’aptitude de notification JSON standard attendue : outil d’artefact
    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 Projet Freestyle/Maven :
    {
      "artifacts": [
        {
          "name": "mav1.jar",
          "version": "1.11",
          "semanticVersion": "1.11.0",
          "repositoryName": "mav-repo"
        }
      ],
      "projectName": "maven-test-proj",
      "taskExecutionNumber": "11"
    }
    
    Figure 1. DevOps Exemple de diagramme de flux d’aptitude de notification : outil de codage
    Flux d’outils de codage de notification DevOps

    Connecter le flux secondaire d’aptitude

    L’option Connexion est prise en charge.

    Élément Valeur attendue
    Entrées

    Étiquette : actuelle

    Type : outil Référence.DevOps

    Enregistrement d’outil pour lequel l’action du bouton Connecter est sélectionnée.

    Sorties

    Voir les sorties de flux secondaire.

    • Étiquette : connecté

      Marqueur indiquant la réussite ou l’échec de la connexion établie à l’outil cible (vrai/faux).

    • Étiquette : errormessage

      Message de chaîne affiché sur le formulaire en cas d’échec de connexion. La variable est une chaîne vide si la connexion réussit.

    Erreurs de connexion affichées sur le formulaire d’outil DevOps :
    Échec de la connexion
    Le flux secondaire a été exécuté avec succès, mais la connexion n’a pas pu être établie.
    Erreur : impossible d’obtenir les détails de l’échec à partir du flux de connexion spécifique à l’outil
    L’exécution du flux secondaire a échoué pour une raison inconnue.
    Erreur de mise à jour de l'état de connexion de l'outil.
    L’attribut connection_state n’a pas pu être mis à jour pour une raison inconnue.
    Figure 2. DevOps Exemple de diagramme de flux d’aptitude de connexion : Outil d’orchestration
    DevOps : connecter l’outil d’orchestration

    Détecter le flux secondaire d’aptitude

    L’option de détection est prise en charge.

    Élément Valeur attendue
    Entrées

    Étiquette : actuelle

    Type : outil Référence.DevOps

    Sorties

    Voir les sorties de flux secondaire.

    Sans pagination :

    Étiquette : discoverpayload

    Type : tableau d’objets sous forme de chaîne JSON.

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

    Outil de planification sans pagination :

    [
    {
       "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"
    }
    ]
    Outil de codage sans pagination :
    [
      {
          "name": "nvm_repo",
          "url": "https://github.com/nvm_repo/"
      },
      {
          "name": "golang_util",
          "url": "https://github.com/golang_util/"
      }
    ];
    Outil d’orchestration sans pagination :
    {
      "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"
        }
      ]
    }

    Avec pagination :

    Étiquette : discoverpayload

    Type : tableau d’objets sous forme de chaîne JSON.

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

    Exemple de format JSON :

    "pageInfo" : {
        "isLastPage" : true, 
        "discoverPayload" : {},
        “pageDetails” : {}
    }
    Outil de planification avec pagination :
    {               
        "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
            }
        }
    }
    Outil de codage avec pagination :
    {
        "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
            }
        }
    }
    Outil d’orchestration avec pagination :
    { 
        "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 
            } 
        } 
    } 
    Le flux principal de détection est déclenché lors de la création d’un enregistrement de demande d’importation. Une demande d’importation comporte ces états et messages.
    État Message
    Demandé --
    En cours de traitement --
    Terminé

    Mis à jour <numéro> objet(s)

    Objets <number> trouvés avec toolId non valide

    Échec de la validation des objets <nombre> trouvés

    Erreur
    • Impossible d’analyser la chaîne de charge utile à partir du flux secondaire
    • discoverpayload est censé être un tableau d’objets.
    • L'enregistrement ImportRequest n'a pas de référence à la table d'outils.
    En pause --
    Annulé --
    Sans correspondance --
    Figure 3. DevOps Exemple de diagramme de flux d’aptitude de détection : outil de planification
    DevOps : découvrir le flux d’outils de plan
    Figure 4. DevOps Détecter l’aptitude avec le diagramme de flux de prise en charge de la pagination
    Diagramme de flux d’un flux de détection classique avec prise en charge de la pagination

    Mettre à jour l’action de demande Studio de workflow d’importation

    Vous pouvez utiliser l’action Mettre à jour la demande d’importation dans votre flux secondaire de détection pour modifier l’état de l’enregistrement de la demande d’importation, si vous le souhaitez.

    Étiquette d'entrée Type
    current

    Demande d’importation Reference.Reference

    État (Chaîne)
    • Demandé
    • traitement
      Remarque :
      L’exécution du flux s’arrête (une fois le retour reçu du flux secondaire) lorsque l’état est défini sur Traitement.
    • terminé
    • erreur
    • en pause
    • annulé
    • unmatched
    Détails (Chaîne)