DevOps API

  • Rversion finale: Australia
  • Mis à jour 12 mars 2026
  • 99 minutes de lecture
  • L’API DevOps fournit des points de terminaison qui permettent l’interaction avec des outils externes DevOps .

    Cette API REST permet aux intégrateurs de :

    • Récupérez les outils disponibles DevOps associés à une instance.
    • Récupérez l’objet de schéma pour une ressource de code, un plan ou une ressource d’orchestration.
    • Vérifiez si une tâche d’orchestration est sous contrôle de changement et vérifiez son état de contrôle de changement.
    • Créez des rappels à associer à des exécutions de tâches sous contrôle des changements.
    • Envoyer diverses charges utiles d’événements, qui sont transformées en objets normalisés et stockées en tant qu’objets de code, d’orchestration et de plan.
    • Recherchez un commit, une branche ou un référentiel à l’aide de requêtes codées et de critères de recherche/tri spécifiques.
    • Enregistrez les versions et les packages d’artefacts, ainsi que leur exécution de pipeline et leurs validations associées.
    • Créez et gérez les événements d’application et d’outil d’intégration.

    Pour en savoir plus, consultez DevOps Config.

    À partir de la version v2, cette API prend en charge l’authentification basée sur les jetons. Les jetons peuvent être acquis en cliquant sur le bouton Copier le jeton sur l’enregistrement de l’outil, situé dans la table Outil [sn_devops_tool]. Le jeton peut ensuite être utilisé dans un en-tête d’autorisation au format Autorisation : sn_devops. DevOpsToken <tool_sys_id> :<tool_token>.
    Remarque :
    Si les détails de l’authentification de base (nom d’utilisateur et mot de passe) sont fournis en plus d’un en-tête d’autorisation avec jeton, l’authentification de base a priorité.

    Si l’utilisateur devops.system n’est pas disponible dans votre instance, utilisez la propriété Basculer vers cet utilisateur une fois l’authentification basée sur le jeton réussie . Cette propriété permet de définir n’importe quel utilisateur disposant du rôle sn_devops.integration, qui est nécessaire pour terminer l’authentification par jeton. (pour en savoir plus, consultez DevOps Change Velocity properties) ;

    DevOps - GET /devops/code/schéma

    Renvoie l’objet de schéma pour une ressource de code spécifiée : commit, référentiel ou branche.

    Une fois que vous disposez de l’objet de schéma requis, utilisez-le pour créer le corps de la demande pour votre appel POST correspondant ; POST /code/commit, POST /code/repository ou POST /code/branch.

    Remarque :
    Ce point de terminaison renvoie uniquement les éléments de corps de la demande qui sont requis.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/code/schema

    URL par défaut : /api/sn_devops/devops/code/schema

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 1. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 2. Paramètres de requête
    Nom Description
    Ressource Requis. Type de schéma de ressource à renvoyer.

    Valeurs valides (insensibles à la casse) :

    • branch
    • commit
    • repository

    Type de données : chaîne

    Tableau 3. Paramètres de corps de demande (XML ou JSON)
    Nom Description
    Néant

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 4. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Tableau 5. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 6. Codes d'état
    Code d'état Description
    200 Demande terminée avec succès.
    401 Authentification non valide ou manquante.
    500 Erreur interne du serveur. Une erreur inattendue s’est produite lors du traitement de la demande. La réponse contient des informations supplémentaires sur l’erreur.

    Paramètres du corps de réponse

    Nom Description
    branch Description de la branche dans laquelle la validation du code a été effectuée.

    Type de données : objet

    "branch": {
      "name": "String",
      "path": "String"
    }
    branch.name Nom de la branche dans laquelle la validation du code a été effectuée.

    Type de données : chaîne

    branche.chemin d’accès Chemin relatif de la branche.

    Type de données : chaîne

    validations Description des validations.

    Type de données : tableau d’objets

    "commits": [
      {
        "committedDate": "String",
        "committer": {Object},
        "details": [Array],
        "id": "String",
        "url": "String"      
      }
    ]
    commits.committedDate Date/heure à laquelle le code a été validé dans l’outil source DevOps .

    Type de données : chaîne

    Format : ISO 8601 avec décalage de fuseau horaire

    Par exemple : 1970-01-01T08:15:30-05:00

    commits.validateur Description de la personne/de l’entité qui a demandé la validation.

    Type de données : objet

    "committer": {
      "email": "String"
    }
    commits.committer.email Adresse e-mail de la personne ayant demandé la validation.

    Type de données : chaîne

    commits.details Détails du commit.
    Remarque :
    Il n’est pas obligatoire d’inclure des détails dans une validation. Ce point de terminaison renvoie un tableau vide pour les détails s’ils ne sont pas inclus dans le commit.

    Type de données : tableau d’objets

    "details": [
      {
        "action": "String",
        "additions": Number,
        "changes": Number,
        "deletions": Number,
        "file": "String",
        "totalChanges": Number
      }
    ]
    commits.details.action Action qui a été effectuée sur le fichier.

    Type de données : chaîne

    commits.details.additions Nombre total d’ajouts au fichier.

    Type de données : nombre

    commits.details.changes Nombre total de changements qui ont été apportés.

    Type de données : nombre

    commits.details.deletions Nombre total de suppressions dans le fichier.

    Type de données : nombre

    fichier.détails.commit Chemin d’accès au fichier qui a été modifié par rapport à la branche.

    Type de données : chaîne

    commits.details.totalChanges Nombre total d’ajouts et de suppressions.

    Type de données : nombre

    commits.id Identificateur de plateforme source ou SHA de validation.

    Type de données : chaîne

    commits.url URL du commit, telle que « https://github.com/mycompany/mobileplatform/commit/3fa85f6457174562b3fc2c963f66afa6 ».

    Type de données : chaîne

    nom Nom de la branche ou du référentiel, tel que « Master » ou « Platform-Mobile ».

    Type de données : chaîne

    chemin d'accès Chemin relatif de la branche.

    Type de données : chaîne

    repository Description du référentiel dans lequel la validation a été effectuée.

    Type de données : objet

    "repository": {
      "name": "String",
      "url": "String"
    }
    repository.name Nom du référentiel.

    Type de données : chaîne

    référentiel.url URL du référentiel dans l’outil source DevOps .

    Type de données : chaîne

    URL URL du référentiel, telle que « https://github.com/mycompany/mobileplatform ».

    Type de données : chaîne

    Exemple de demande cURL pour resource=branch

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/code/schema?resource=branch" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    
    {
       "result": {
          "name": "Master",
          "path": "refs/heads/master",
          "repository": {
             "name": "Platform-Mobile",
             "url": "https://github.com/mycompany/mobileplatform"
          }
       }
    }

    Exemple de demande cURL pour resource=commit

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/code/schema?resource=commit" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    
    {
       "result": {
          "repository": {
             "name": "Platform-Mobile",
             "url": "https://github.com/mycompany/mobileplatform"
          },
          "branch": {
             "name": "refs/heads/master"
          },
          "commits": [
             {
                "committer": {
                   "email": "name@email.com"
                },
                "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                "url": "https://github.com/mycompany/mobileplatform/commit/3fa85f6457174562b3fc2c963f66afa6",
                "committedDate": "2022-01-01T08:15:30-05:00",
                "details": [
                   {
                      "action": "edit",
                      "changes": "",
                      "file": "/azure-pipelines.yml",
                      "additions": 1,
                      "deletions": 0,
                      "totalChanges": 1
                   }
                ]
             }
          ]
       }
    }

    Exemple de demande cURL pour resource=repository

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/code/schema?resource=repository" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    
    {
        "result": {
            "name": "Platform-Mobile",
            "url": "https://github.com/mycompany/mobileplatform"
        }
    }

    DevOps : GET /devops/intégration/état

    Renvoie l’état actuel de l’événement d’intégration spécifié qui est traité ou en cours de traitement asynchrone par le DevOps service.

    Format d'URL

    URL avec version : /api/sn_devops/{api_version}/devops/onboarding/status

    URL par défaut : /api/sn_devops/devops/onboarding/status

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 7. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 8. Paramètres de requête
    Nom Description
    id Identificateur unique de l’événement d’intégration dont l’état doit revenir. Cette valeur est fournie dans les résultats de retour du point de terminaison qui a invoqué la demande d’événement, tels que /devops/onboarding/app ou /devops/onboarding/tool.

    Type de données : chaîne

    Tableau 9. Paramètres du corps de la demande
    Nom Description
    Néant

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 10. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Tableau 11. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 12. Codes d'état
    Code d'état Description
    200 Réussi. La demande a été traitée avec succès.
    202 En attente : la demande d’intégration a été créée et le DevOps service traite la demande.
    207 Réussite partielle : la demande d’intégration a été créée et le DevOps service traite la demande.
    400 Échec : l’événement d’intégration a échoué.
    404 Échec : le point de terminaison n’a trouvé aucune demande correspondant à l’ID d’événement spécifié.

    Paramètres du corps de réponse

    Nom Description
    résultat Résultats de la demande d’intégration.
    Type de données : objet
    "result": {
      "code": "String",
      "importRequestsSysIds": "[Array],
      "messageDetails": {Object],
      "onboardingRequestID": "String",
      "status": "String"
    }
    résultat.code Code d’état HTTP.

    Type de données : chaîne

    résultat.importRequestsSysIds Liste des demandes d’importation qui ont été créées dans le cadre de la demande d’intégration.

    Type de données : tableau de chaînes

    résultat.messageDétails Détails sur la progression de l’événement d’intégration.
    Type de données : objet
    "messageDetails": {
      "apps": [Array],
      "pipelines": [Array],
      "plans": [Array],
      "repositories": [Array],
      "status": "String",
      "toolResponse": [Array]
    }
    résultat.détailsmessage.applications Définit les applications à créer dans l’instance associée ServiceNow .

    Type de données : tableau d’objets

    "apps": [{
      "appId": "String",
      "message": "String",
      "name": "String",
      "status": "String",
    }]
    result.messageDetails.apps.appId Sys_id de l’application qui a été générée lors de l’intégration de l’application.

    Type de données : chaîne

    Table : applications [sn_devops_app]

    résultat.messageDétails.Applications.Message Message décrivant l’état de l’intégration de l’application.

    Type de données : chaîne

    result.messageDetails.apps.name Nom de l’application en cours d’intégration.

    Type de données : chaîne

    result.messageDetails.apps.status État actuel de l’intégration de l’application.
    Valeurs possibles :
    • Échoué
    • Réussite partielle
    • Succès

    Type de données : chaîne

    résultat.détailsmessage.pipelines Liste des pipelines associés à l’événement d’intégration et leurs détails correspondants.

    Type de données : tableau d’objets

    "pipelines": [{
      "changeStepAssociation": [Array],
      "errors": "String",
      "message": "String",
      "name": "String",
      "status": "String",
    }]
    result.messageDetails.pipelines.changeStepAssociation Tableau d’objets qui décrivent toutes les étapes de changement associées à l’intégration.

    Type de données : tableau d’objets

    "changeStepAssociation": [{
      "changeStepName": "String",
      "status": "String",
      "summary": "String",
    }]
    résultat.messageDetails.pipelines.changeStepAssociation.changeStepName Nom de l’étape du changement.

    Type de données : chaîne

    résultat.messageDetails.pipelines.changeStepAssociation.status État de l’association de l’étape de changement au pipeline.
    Valeurs possibles :
    • Échoué
    • Succès

    Type de données : chaîne

    résultat.messageDétails.pipelines.changementÉtapeAssociation.résumé Résumé de l’état de l’association des étapes de changement.

    Type de données : chaîne

    résultat.détailsmessage.pipelines.erreurs Liste des erreurs détectées lors de l’association du pipeline.

    Type de données : tableau

    résultat.messageDétails.pipelines.message Message décrivant l’état de l’association du pipeline.

    Type de données : chaîne

    result.messageDetails.pipelines.name Nom du pipeline.

    Type de données : chaîne

    résultat.détailsmessage.pipelines.état État de l’association du pipeline.

    Type de données : chaîne

    résultat.détailsmessage.plans Liste des plans associés à l’événement d’intégration et leurs détails correspondants.

    Type de données : tableau d’objets

    "plans": [{
      "errors": "String",
      "message": "String",
      "name": "String",
      "status": "String",
    }]
    résultat.détailsmessage.plans.erreurs Liste des erreurs détectées lors de l’association du plan.

    Type de données : tableau

    résultat.messageDétails.plans.message Message décrivant l’état de l’association du pipeline.

    Type de données : chaîne

    result.messageDetails.plans.name Nom du plan.

    Type de données : chaîne

    résultat.détailsmessage.plans.état État de l’association du plan.

    Type de données : chaîne

    résultat.détailsmessage.référentiels Liste des référentiels associés à l’événement d’intégration et leurs détails correspondants.

    Type de données : tableau d’objets

    "repositories": [{
      "configureStatus": {Object}, 
      "name": "String",
      "status": "String",
    }]
    résultat.détailsmessage.référentiels.configureStatus Détails du statut de configuration du webhook pour le référentiel.

    Type de données : objet

    "configureStatus": {
      "message": "String",
      "status": "String",
    }
    résultat.messageDetails.repositories.configureStatus.message Message décrivant l’état actuel de la configuration du Webhook.

    Type de données : chaîne

    résultat.messageDetails.repositories.configureStatus.status État de la configuration du webhook.

    Type de données : chaîne

    résultat.détailsmessage.référentiels.message Message décrivant l’état actuel de l’association au référentiel.

    Type de données : chaîne

    result.messageDetails.repositories.name Nom du référentiel.

    Type de données : chaîne

    résultat.détailsmessage.référentiels.état État de l’association du référentiel.

    Type de données : chaîne

    résultat.détailsmessage.état État de la demande d’intégration.
    Valeurs possibles :
    • Échoué
    • Réussite partielle
    • Succès

    Type de données : chaîne

    résultat.détailsmessage.toolResponse Liste des outils à intégrer dans l’instance associée ServiceNow .

    Type de données : tableau d’objets

    "toolResponse": [{
      "configureStatus": {Object},
      "connectStatus": {Object},
      "createStatus": {Object},
      "discoveryStatus": {Object},
      "name": "String",
      "status": "String",
      "type": "String"
    }]
    résultat.messageDetails.toolResponse.configureStatus Statut de la configuration de l’outil. En cas de réussite, il renvoie les valeurs status et message. En cas d’erreur, renvoie le status champ et error.

    Type de données : objet

    "configureStatus": {
      "error": "String",
      "message": "String",
      "status": "String"
    }
    résultat.messageDetails.toolResponse.configureStatus.error Erreurs détectées lors de la configuration de l’outil.

    Type de données : chaîne

    résultat.messageDetails.toolResponse.configureStatus.message Message qui décrit l’état de réussite de la configuration de l’outil.

    Type de données : chaîne

    résultat.messageDetails.toolResponse.configureStatus.status État de la configuration de l’outil.

    Type de données : chaîne

    résultat.détailsmessage.réponseoutil.connectStatus État de connexion de l’outil. En cas de réussite, il renvoie les valeurs status et message. En cas d’erreur, renvoie le status champ et error.

    Type de données : objet

    "connectStatus": {
      "error": "String",
      "message": "String",
      "status": "String"
    }
    résultat.messageDetails.toolResponse.connectStatus.error Erreurs détectées lors de la connexion de l’outil.

    Type de données : chaîne

    résultat.détailsmessage.réponseoutil.connectÉtat.message Message décrivant l’état de réussite de la connexion de l’outil.

    Type de données : chaîne

    résultat.messageDetails.toolResponse.connectStatus.status État de la connexion de l’outil.

    Type de données : chaîne

    résultat.détailsmessage.réponseoutil.createStatus Statut de la création de l’outil. En cas de réussite, il renvoie les valeurs status et message. En cas d’erreur, renvoie le status champ et error.

    Type de données : objet

    "createStatus": {
      "error": "String",
      "message": "String",
      "status": "String"
    }
    résultat.détailsmessage.réponseoutil.createstatus.error Erreurs détectées lors de la création de l’outil.

    Type de données : chaîne

    résultat.détailsmessage.réponseoutil.createstatus.message Message qui décrit l’état de réussite de la création de l’outil.

    Type de données : chaîne

    résultat.détailsmessage.réponseoutil.createstatus.état État de la création de l’outil.

    Type de données : chaîne

    résultat.détailsmessage.réponseoutil.discoveryStatus Statut de découverte de l’outil. En cas de réussite, il renvoie les valeurs status et message. En cas d’erreur, renvoie le status champ et error.

    Type de données : objet

    "discoveryStatus": {
      "error": "String",
      "imports: [Array],
      "message": "String",
      "status": "String"
    }
    résultat.messageDetails.toolResponse.discoveryStatus.error Erreurs détectées lors de la découverte d’outils.

    Type de données : chaîne

    résultat.messageDetails.toolResponse.discoveryStatus.imports Liste des entités qui ont été détectées.

    Type de données : tableau d’objets

    "imports": [{
      "details": "String",
      "id": "String",
      "status": "String"
    }]
    résultat.messageDetails.toolResponse.discoveryStatus.imports.details Détails décrivant l’importation effectuée.

    Type de données : chaîne

    result.messageDetails.toolResponse.discoveryStatus.imports.id Sys_id de la demande d’importation.

    Type de données : chaîne

    Table : sn_devops_m2m_inbound_event_import_request

    résultat.messageDetails.toolResponse.discoveryStatus.imports.status État de l’importation.

    Type de données : chaîne

    résultat.messageDetails.toolResponse.discoveryStatus.message Message qui décrit l’état de la découverte de l’outil.

    Type de données : chaîne

    résultat.messageDetails.toolResponse.discoveryStatus.status État de la découverte d’outils.

    Type de données : chaîne

    result.messageDetails.toolResponse.name Nom de l’outil intégré.

    Type de données : chaîne

    résultat.détailsmessage.réponseoutil.état État de l’intégration de l’outil.

    Type de données : chaîne

    résultat.détailsmessage.réponseoutil.type Type d’outil, tel que Jira ou Jenkins.

    Type de données : chaîne

    résultat.onboardingRequestID Identificateur unique de la demande d’intégration. Utilisez cette valeur lors de l’appel du point de terminaison /devops/onboarding/status pour obtenir l’état du processus d’intégration de l’outil associé.

    Type de données : chaîne

    résultat.état État de la demande d’intégration.
    Valeurs possibles :
    • Échoué
    • Réussite partielle
    • Succès

    Type de données : chaîne

    Demande cURL

    L’exemple suivant montre la demande d’état d’un outil en cours d’intégration.

    curl -X GET "https://servicenow-instance/api/sn_devops/v1/devops/onboarding/status?id=IBE0001603" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -u "username":"password" \

    {
        "result": {
            "code": "207",
            "onboardingRequestID": "IBE0001603",
            "status": "partial-success",
            "messageDetails": {
                "status": "Partial Success",
                "toolResponse": [
                    {
                        "name": "Primary Azure",
                        "type": "Azure DevOps",
                        "status": "Partial Success",
                        "createStatus": {
                            "status": "Success",
                            "message": "Created successfully"
                        },
                        "connectStatus": {
                            "status": "Failed",
                            "error": "Method failed: (/testFirst/_apis/work/boards) with code: 401 - Invalid username/password combo"
                        }
                    },
                    {
                        "name": "Primary Jenkins",
                        "type": "Jenkins",
                        "status": "Success",
                        "createStatus": {
                            "status": "Success",
                            "message": "Created successfully"
                        },
                        "connectStatus": {
                            "status": "Success",
                            "message": "Connected successfully"
                        },
                        "discoveryStatus": {
                            "status": "Success",
                            "message": "Discovered successfully",
                            "imports": [
                                {
                                    "status": "completed",
                                    "id": "2a4d216bdb2d2450fe4fd6a75e9619c3",
                                    "details": "Discovered 1 new job(s) and 3 new pipeline(s)\n"
                                }
                            ]
                        }
                    },
                    {
                        "name": "Primary GitHub",
                        "type": "GitHub",
                        "status": "Success",
                        "createStatus": {
                            "status": "Success",
                            "message": "Created successfully"
                        },
                        "connectStatus": {
                            "status": "Success",
                            "message": "Connected successfully"
                        },
                        "discoveryStatus": {
                            "status": "Success",
                            "message": "Discovered successfully",
                            "imports": [
                                {
                                    "status": "completed",
                                    "id": "7f4d616bdb2d2450fe4fd6a75e9619c2",
                                    "details": "Discovered 5 new repositories. "
                                }
                            ]
                        }
                    },
                    {
                        "name": "Primary Bitbucket",
                        "type": "BitBucket",
                        "status": "Success",
                        "createStatus": {
                            "status": "Success",
                            "message": "Created successfully"
                        },
                        "connectStatus": {
                            "status": "Success",
                            "message": "Connected successfully"
                        },
                        "discoveryStatus": {
                            "status": "Success",
                            "message": "Discovered successfully",
                            "imports": [
                                {
                                    "status": "completed",
                                    "id": "815da16bdb2d2450fe4fd6a75e9619d0",
                                    "details": "Discovered 11 new repositories. "
                                }
                            ]
                        }
                    },
                    {
                        "name": "Primary Gitlab",
                        "type": "GitLab",
                        "status": "Partial Success",
                        "createStatus": {
                            "status": "Success",
                            "message": "Created successfully"
                        },
                        "connectStatus": {
                            "status": "Failed",
                            "error": "The current operation ended in state: ERROR"
                        }
                    }
                ],
                "importRequestsSysIds": [
                    "2a4d216bdb2d2450fe4fd6a75e9619c3",
                    "7f4d616bdb2d2450fe4fd6a75e9619c2",
                    "815da16bdb2d2450fe4fd6a75e9619d0"
                ]
            }
        }
    }

    Demande cURL

    L’exemple suivant illustre la demande d’état d’une intégration d’application.

    curl -X POST "https://servicenow-instance/api/sn_devops/v1/devops/onboarding/status?onboardingRequestID=IBE0001604" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -u "username":"password" \

    {
        "result": {
            "code": "207",
            "onboardingRequestID": "IBE0001604",
            "status": "partial-success",
            "messageDetails": {
                "status": "Partial Success",
                "apps": [
                    {
                        "name": "Bike Rentals Service",
                        "status": "Success",
                        "appId": "c7fd696bdb2d2450fe4fd6a75e961993",
                        "message": "App by name 'Bike Rentals Service' has been successfully created"
                    }
                ],
                "pipelines": [
                    {
                        "name": "Bike Rentals",
                        "status": "Success",
                        "message": "Successfully associated with app 'Bike Rentals Service'",
                        "changeStepAssociation": [
                            {
                                "status": "Success",
                                "changeStepName": "Prod",
                                "summary": "Change step with name 'Prod' has been created"
                            }
                        ]
                    }
                ],
                "repositories": [
                    {
                        "name": "nowdevops01/BikeRentals",
                        "status": "Partial Success",
                        "message": "Successfully associated with app 'Bike Rentals Service'",
                        "configureStatus": {
                            "status": "Failed",
                            "message": "Webhook configuration failed due to empty credentials for repository by name nowdevops01/BikeRentals in tool Primary GitHub"
                        }
                    }
                ],
                "plans": [
                    {
                        "status": "Failed",
                        "name": "testFirst",
                        "errors": [
                            "Plan by name 'testFirst' does not exist in tool Primary Azure"
                        ]
                    }
                ]
            }
        }
    }

    DevOps - GET /devops/orchestration/changeControl

    Vérifie si la tâche d’orchestration est sous contrôle de changement.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/orchestration/changeControl

    URL par défaut : /api/sn_devops/devops/orchestration/changeControl

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 13. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 14. Paramètres de requête
    Nom Description
    Nom de la tâche d’orchestration Nom de la tâche d’orchestration à vérifier.

    Type de données : chaîne

    testConnection Marqueur indiquant s’il faut tester la connexion de bout en bout entre l’instance et l’outil DevOps .
    Valeurs valides :
    • vrai : testez la connexion de bout en bout.
    • faux : ne testez pas la connexion de bout en bout.

    Type de données : booléennes

    Valeur par défaut : false

    toolId Requis. Sys_id de l’outil d’orchestration.

    Type de données : chaîne

    Table : Outil d’orchestration [sn_devops_orchestration_tool]

    toolType Type d’outil.

    Valeurs valides : Jenkins

    Type de données : chaîne

    Tableau 15. Paramètres du corps de la demande
    Nom Description
    Néant

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 16. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Autorisation
    À partir de la version v2, cette API prend en charge l’authentification basée sur les jetons. Les jetons peuvent être acquis en cliquant sur le bouton Copier le jeton sur l’enregistrement de l’outil, situé dans la table Outil [sn_devops_tool]. Le jeton peut ensuite être utilisé dans un en-tête d’autorisation au format Autorisation : sn_devops. DevOpsToken <tool_sys_id> :<tool_token>.
    Remarque :
    Si les détails de l’authentification de base (nom d’utilisateur et mot de passe) sont fournis en plus d’un en-tête d’autorisation avec jeton, l’authentification de base a priorité.

    Si l’utilisateur devops.system n’est pas disponible dans votre instance, utilisez la propriété Basculer vers cet utilisateur une fois l’authentification basée sur le jeton réussie . Cette propriété permet de définir n’importe quel utilisateur disposant du rôle sn_devops.integration, qui est nécessaire pour terminer l’authentification par jeton. (pour en savoir plus, consultez DevOps Change Velocity properties) ;

    Tableau 17. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 18. Codes d'état
    Code d'état Description
    200 Réussi. La demande a été traitée avec succès.
    401 Authentification non valide ou manquante.
    500 Erreur interne du serveur. Une erreur inattendue s’est produite lors du traitement de la demande. La réponse contient des informations supplémentaires sur l’erreur.

    Paramètres du corps de la réponse (JSON ou XML)

    Nom Description
    contrôle de changement Marqueur indiquant si la tâche d’orchestration est sous contrôle de changement.
    Valeurs possibles :
    • vrai : sous contrôle des changements.
    • faux : non soumis au contrôle des changements.

    Type de données : booléennes

    Sous contrôle des changements et via l’API v2

    curl -X GET "https://instance.servicenow.com/api/sn_devops/v2/devops/orchestration/changeControl?toolId=1c219f7e8708f1508ca933383cbb3543&orchestrationTaskName=Platform-Analytics-UAT-Deployment&orchestrationTaskURL=https%253A%252F%252Fjenkins.mycompany.com%253A8080%252Fjob%252FMobile-Platform-deploy%252F&toolType=jenkins" 
    -H "accept: application/json"\
    -H "Authorization: sn_devops.DevOpsToken 1c219f7e8708f1508ca933383cbb3543:FtN13dfDuahYEtdfDvhHorh0QPp9na3u"

    Corps de la réponse.

    {
    "result": {
      "changeControl": true,
      "status": "Success" 
      } 
    }

    Non soumis au contrôle des changements et utilisant l’API v1

    curl -X GET "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/changeControl?toolId=f0ca45679323008b52f3b457415ae6&orchestrationTaskName=Platform-Analytics-UAT-Deployment&orchestrationTaskURL=https%253A%252F%252Fjenkins.mycompany.com%253A8080%252Fjob%252FMobile-Platform-deploy%252F&toolType=jenkins" 
    -H "accept: application/json"\
    -u "username":"password"

    Corps de la réponse.

    {
        "result": {
            "changeControl": false
        }
    }

    DevOps - GET /devops/orchestration/changeInfo

    Récupère les détails de la demande de changement pour une exécution de pipeline d’orchestration spécifiée.

    Format d'URL

    URL avec version : /api/sn_devops/{api_version}/devops/orchestration/changeInfo

    URL par défaut : /api/sn_devops/devops/orchestration/changeInfo

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 19. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 20. Paramètres de requête
    Nom Description
    branchName Nom de la branche associée à la tâche d’orchestration.
    Remarque :
    Vous devez fournir ce paramètre lorsque vous faites référence à des pipelines à plusieurs branches, sinon la réponse peut inclure des détails de changement incorrects.

    Type de données : chaîne

    buildNumber Requis. Numéro de version du pipeline dans l’outil d’orchestration.

    Type de données : chaîne

    pipelineName Facultatif pour les projets Jenkins Freestyle ou Maven, requis pour tous les autres. Nom du pipeline Orchestration.

    Type de données : chaîne

    projectName Requis pour les projets Jenkins Freestyle ou Maven, facultatif pour tous les autres. Nom du projet de l’outil d’orchestration.

    Type de données : chaîne

    stageName Facultatif pour les projets Jenkins Freestyle ou Maven, requis pour tous les autres. Nom de l’étape d’orchestration.

    Type de données : chaîne

    Longueur maximale : 160

    toolId Requis. Sys_id de l’outil d’orchestration.

    Type de données : chaîne

    Table : Outil d’orchestration [sn_devops_orchestration_tool]

    Tableau 21. Paramètres de corps de demande (XML ou JSON)
    Nom Description
    Néant

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 22. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Autorisation
    À partir de la version v2, cette API prend en charge l’authentification basée sur les jetons. Les jetons peuvent être acquis en cliquant sur le bouton Copier le jeton sur l’enregistrement de l’outil, situé dans la table Outil [sn_devops_tool]. Le jeton peut ensuite être utilisé dans un en-tête d’autorisation au format Autorisation : sn_devops. DevOpsToken <tool_sys_id> :<tool_token>.
    Remarque :
    Si les détails de l’authentification de base (nom d’utilisateur et mot de passe) sont fournis en plus d’un en-tête d’autorisation avec jeton, l’authentification de base a priorité.

    Si l’utilisateur devops.system n’est pas disponible dans votre instance, utilisez la propriété Basculer vers cet utilisateur une fois l’authentification basée sur le jeton réussie . Cette propriété permet de définir n’importe quel utilisateur disposant du rôle sn_devops.integration, qui est nécessaire pour terminer l’authentification par jeton. (pour en savoir plus, consultez DevOps Change Velocity properties) ;

    Tableau 23. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 24. Codes d'état
    Code d'état Description
    200 Réussi. La demande a été traitée avec succès.
    400 Demande incorrecte. Un type de demande incorrecte ou mal formé a été détecté.
    404 Introuvable. L’élément demandé est introuvable.

    Paramètres du corps de la réponse (JSON ou XML)

    Nom Description
    changeFound Marqueur indiquant si la demande de changement a été localisée.
    Valeurs possibles :
    • vrai : la demande de changement a été trouvée.
    • faux : la demande de changement est introuvable.

    Type de données : booléennes

    Numéro Numéro de la demande de changement.

    Type de données : chaîne

    phase Phase actuelle.

    Type de données : chaîne

    phase_state État de la phase actuelle.

    Type de données : chaîne

    Priorité Priorité de la demande de changement. La priorité est basée sur l’impact et l’urgence de la demande. Ce champ identifie la rapidité avec laquelle le Centre de services doit traiter la demande.
    Valeurs possibles :
    • 1 : Critique
    • 2 : Élevé
    • 3 : Modéré
    • 4 : Faible

    Type de données : chaîne

    risk Niveau de risque du changement.
    Valeurs possibles :
    • Faible
    • Élevé
    • Modéré

    Type de données : chaîne

    État État de la demande de changement.
    Valeurs possibles :
    • Évaluer
    • Autoriser
    • Annulé
    • Fermés
    • Implémenter
    • Nouveau
    • Revue
    • Planifié

    Type de données : chaîne

    Par défaut : nouveau

    sys_id Sys_id de la demande de changement.

    Type de données : chaîne

    type Type de la demande de changement.
    Valeurs possibles :
    • Urgence
    • Normal
    • Standard

    Type de données : chaîne

    URL URL de la demande de changement dans l’instance associée ServiceNow .

    Type de données : chaîne

    changeAssignmentGroup Groupe d’affectation de la demande de changement.

    Type de données : chaîne

    changeApprovers Liste des approbateurs avec lesquels le changement est en attente d’approbation.

    Type de données : chaîne

    plannedStartDate Date et heure de début planifiées du changement.

    Type de données : chaîne

    plannedEndDate Date et heure de fin planifiées du changement.

    Type de données : chaîne

    Demande cURL

    curl -X GET "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/changeInfo?toolId=1487f457db642810765555535e9619d3&pipelineName=Automation/apps HR/family release&stageName=deployfamilyrelease&buildNumber=1639"  
    -H "accept: application/json"\ 
    -u "username":"password"
    {  
      "result": {  
        "changeFound": true,  
        "sys_id": "ee89341bdb642810765555535e96196e",  
        "number": "CHG0030001",  
        "type": "normal",  
        "state": "0",  
        "phase": "requested",  
        "phase_state": "open",  
        "priority": "4",  
        "risk": "4",  
        "url": "https://instance.servicenow.com/change_request.do?sys_id=ee89341bdb642810765555535e96196e",  
        "changeAssignmentGroup": "Change Management", 
        "changeApprovers": "Ron Kettering, Christen Mitchell, Howard Johnson, Luke Wilson", 
        "plannedStartDate": "2023-02-05 08:00:00", 
        "plannedEndDate": "2024-02-05 08:00:00" 
      }  
    }

    DevOps - GET /devops/orchestration/schéma

    Renvoie l’objet de schéma pour une ressource d’orchestration spécifiée.

    Une fois que vous disposez de l’objet de schéma requis, utilisez-le pour créer le corps de la demande pour votre appel POST correspondant ; /orchestration/orchestrationTask ou /orchestration/taskExecution.

    Remarque :
    Ce point de terminaison renvoie uniquement les éléments de corps de la demande qui sont requis.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/orchestration/schema

    URL par défaut : /api/sn_devops/devops/orchestration/schema

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 25. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 26. Paramètres de requête
    Nom Description
    Ressource Type de schéma de ressource à renvoyer.
    Valeurs valides (insensibles à la casse) :
    • build_details
    • rappel
    • orchestration_task
    • task_execution

    Type de données : chaîne

    Tableau 27. Paramètres du corps de la demande
    Nom Description
    Néant

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 28. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Tableau 29. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 30. Codes d'état
    Code d'état Description
    200 Demande terminée avec succès.
    401 Authentification non valide ou manquante.
    500 Erreur interne du serveur. Une erreur inattendue s’est produite lors du traitement de la demande. La réponse contient des informations supplémentaires sur l’erreur.

    Paramètres du corps de réponse

    Nom Description
    URL de rappel URL du rappel.

    Type de données : chaîne

    endDateTime Date/heure de fin de l’exécution de la tâche.

    Type de données : chaîne

    nom Nom de la tâche d’orchestration.

    Type de données : chaîne

    Numéro Numéro d’exécution de la tâche. Identique à un numéro d’incident.

    Type de données : chaîne

    orchestrationTaskDetails Description de la tâche d’orchestration.

    Type de données : objet

    "orchestrationTaskDetails": {
      "message": "String",
      "name": "String",
      "triggerType": "String",
      "url": "String"
    }
    orchestrationTaskDetails.message Message texte de forme libre.

    Type de données : chaîne

    orchestrationTaskDetails.name Nom de la tâche d’orchestration.

    Type de données : chaîne

    orchestrationTaskDetails.triggerType La façon dont la tâche d’orchestration a été démarrée.

    Type de données : chaîne

    orchestrationTaskDetails.url URL de la tâche d’orchestration de l’outil d’orchestration associé.

    Type de données : chaîne

    orchestrationTaskURL URL de la tâche d’orchestration.

    Type de données : chaîne

    résultat Résultat de l’exécution de la tâche.
    Valeurs valides :
    • Échoué
    • Succès

    Type de données : chaîne

    startDateTime Date/heure à laquelle l’exécution de la tâche a commencé.

    Type de données : chaîne

    URL d’exécution de tâche URL de la tâche à exécuter.

    Type de données : chaîne

    triggerType La façon dont la tâche d’orchestration a été démarrée.

    Valeurs valides :

    • scm : la validation du code de l’outil Git/scm a déclenché la tâche.
    • en amont : la tâche en amont a déclenché cette tâche.
    • user : l’utilisateur a démarré manuellement la tâche.

    Type de données : chaîne

    URL URL de la tâche d’orchestration de l’outil d’orchestration associé.

    Type de données : chaîne

    Exemple de demande cURL avec ressource=task_execution

    curl -X GET \
    'https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/schema?resource=task_execution' \
    -H 'Accept: application/json'\
    -u 'username':'password'
    {
    "result": {
      "number": 40,
      "url": "https://jenkins.mycompany.com:8080/job/Mobile-Platform-CI/40/",
      "startDateTime": "1970-01-01T08:15:30-05:00",
      "endDateTime": "1970-01-01T08:25:30-05:00",
      "triggerType": "upstream",
      "result": "Success",
      "orchestrationTaskDetails": {
        "name": "Mobile-Platform-CI",
        "url": "https://jenkins.mycompany.com:8080/job/Mobile-Platform-CI/"
        }
      }
    }

    Exemple de demande cURL avec ressource=orchestration_task

    curl -X GET \ 
    'https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/schema?resource=orchestration_task' \
    -H 'Accept: application/json'\
    -u 'username':'password' 
    
    { 
    "result": { 
      "name": "Mobile-Platform-CI", 
      "url": "https://jenkins.mycompnay.com:8080/job/Mobile-Platform-CI/" 
      } 
    } 

    Exemple de demande cURL avec resource=callback

    curl -X GET \
    'https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/schema?resource=task_execution' \
    -H 'Accept: application/json' \
    -u 'username':'password'
    
    { 
      "result": { 
        "callbackURL": "http://127.0.0.1:8090/jenkins/sn-devops/9b0feb79-f0b9-4661-83ef-2861b8924784", 
        "orchestrationTaskURL": "http://127.0.0.1:8090/jenkins/job/felipe-downstream/", 
        "orchestrationTaskDetails": { 
          "message": "Started by upstream project \"felipe-upstream\" build number 27", 
          "triggerType": "upstream" 
        } 
      } 
    } 

    DevOps - GET /devops/orchestration/stepMapping

    Vérifie que les informations transmises sont valides pour la création d’une tâche d’orchestration et sont valides pour l’association à une étape précédemment créée.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/orchestration/stepMapping

    URL par défaut : /api/sn_devops/devops/orchestration/stepMapping

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 31. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 32. Paramètres de requête
    Nom Description
    branchName Nom de la branche associée à la tâche d’orchestration.

    Type de données : chaîne

    isMultiBranch Si l’outil d’orchestration est Jenkins, marqueur indiquant si le projet est de type Multibranche.
    Valeurs valides :
    • true : le projet est de type Multibranche.
    • faux : le projet n’est pas de type Multibranche.

    Type de données : booléennes

    Valeur par défaut : false

    parentStageName Si la tâche d’orchestration est un enfant imbriqué à l’intérieur d’une tâche d’orchestration parente, le nom de la tâche d’orchestration parente.

    Type de données : chaîne

    parentStageURL Si la tâche d’orchestration est un enfant imbriqué à l’intérieur d’une tâche d’orchestration parente, l’URL de la tâche d’orchestration parente.

    Type de données : chaîne

    Nom de la tâche d’orchestration Requis. Nom de la tâche d’orchestration.

    Type de données : chaîne

    orchestrationTaskURL Requis. URL de la tâche d’orchestration.
    Remarque :
    Doit être encodé en pourcentage ( %), tel que https%3A%2F%2Fjenkins.mycompany.com %3A8080%2Fjob %2FMobile-Platform-deploy %2F.
    Type de données : chaîne
    testConnection Marqueur indiquant s’il faut tester la connexion de bout en bout entre l’instance et l’outil DevOps .
    Valeurs valides :
    • vrai : testez la connexion de bout en bout.
    • faux : ne testez pas la connexion de bout en bout.

    Type de données : booléennes

    Valeur par défaut : false

    toolId Requis. Sys_id de l’outil d’orchestration. Situé dans la table Outil d’orchestration [sn_devops_orchestration_tool].

    Type de données : chaîne

    toolType Requis. Type d’outil.

    Valeurs valides : Jenkins

    Type de données : chaîne

    Tableau 33. Paramètres du corps de la demande
    Nom Description
    Néant

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 34. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Tableau 35. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 36. Codes d'état
    Code d'état Description
    200 Réussi. La demande a été traitée avec succès.
    401 Non autorisé. Les informations d’identification de l’utilisateur sont incorrectes ou n’ont pas été transmises.
    500 Erreur interne du serveur. Une erreur inattendue s’est produite lors du traitement de la demande. La réponse contient des informations supplémentaires sur l’erreur.

    Paramètres du corps de réponse

    Élément Description
    statut Marqueur indiquant si la vérification a réussi.
    Valeurs valides :
    • vrai : la vérification a réussi.
    • faux : la vérification a échoué.

    Type de données : booléennes

    stepValide Marqueur indiquant si les informations envoyées sont valides.
    Valeurs valides :
    • vrai : les informations envoyées sont valides.
    • faux : les informations envoyées ne sont pas valides.

    Type de données : booléennes

    Exemple de demande cURL

    curl -X GET "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/stepMapping?toolId=f0ca45679323008b52f3b457415ae6&orchestrationTaskName=Platform-Analytics-UAT-Deployment&orchestrationTaskURL=https%253A%252F%252Fjenkins.mycompany.com%253A8080%252Fjob%252FMobile-Platform-deploy%252F&toolType=jenkins "
     -H "Accept: application/json" \
     -u "username":"password"
    

    Résultats si l’information est valide.

    {
      "result": {
        "stepValid": true,
        "status": "Success"
      }
    }

    Exemple de demande cURL

    curl -X GET "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/stepMapping?toolId=f0ca45679323008b52f3b457415ae6&orchestrationTaskName=Platform-Analytics-UAT-Deployment&orchestrationTaskURL=https%253A%252F%252Fjenkins.mycompany.com%253A8080%252Fjob%252FMobile-Platform-deploy%252F&toolType=jenkins "
     -H "Accept: application/json" \
     -u "username":"password"
    

    Résultats si les informations ne sont pas valides.

    {
    "result": {
      "stepValid": false,
      "status": "Success"
    }
    

    DevOps - GET /devops/plan/schéma

    Renvoie l’objet de schéma pour un plan spécifique : application, version ou élément de travail.

    Une fois que vous disposez de l’objet de schéma requis, utilisez-le pour créer le corps de la demande pour votre appel POST correspondant ; POST /plan/app, POST /plan/version ou POST /plan/workitem.

    Remarque :
    Ce point de terminaison renvoie uniquement les éléments de corps de la demande qui sont requis.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/plan/schema

    URL par défaut : /api/sn_devops/devops/plan/schema

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 37. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 38. Paramètres de requête
    Nom Description
    Ressource Type de schéma de ressource à renvoyer.

    Valeurs valides (insensibles à la casse) :

    • application
    • version
    • work_item

    Type de données : chaîne

    Tableau 39. Paramètres du corps de la demande
    Nom Description
    Néant

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 40. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Tableau 41. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 42. Codes d'état
    Code d'état Description
    200 Réussi. La demande a été traitée avec succès.
    401 Authentification non valide ou manquante.
    404 Introuvable. L’enregistrement spécifié est introuvable.
    500 Erreur interne du serveur. Une erreur inattendue s’est produite lors du traitement de la demande. La réponse contient des informations supplémentaires sur l’erreur.

    Paramètres du corps de réponse

    Nom Description
    application Description de l’application à associer à la version.

    Type de données : objet

    "app": {
      "createdDateTime": "String",
      "id": "String",
      "shortDescription": "String",
      "team": {Object},
      "url": "String"
    }
    app.createdDateTime Date/heure de création de l’application dans l’outil source DevOps .

    Type de données : chaîne

    app.id Identificateur unique de l’application. Généré par l’outil de planification de la source.

    Type de données : chaîne

    application.courtedescription Brève description de l’application associée.

    Type de données : chaîne

    app.équipe Description de l’équipe associée à l’application.

    Type de données : objet

    "team": {
      "id": "String",
      "name": "String"
    }
    app.team.id Identificateur unique de l’équipe associée à l’application. Généré par l’outil de planification de la source.

    Type de données : chaîne

    app.team.name Nom de l’équipe associée à l’application.

    Type de données : chaîne

    url d’application URL de l’application sur le site de l’outil de planification source.

    Type de données : chaîne

    assignedTo Description de la personne à qui l’élément de travail est affecté.

    Type de données : objet

    "assignedTo": {
      "email": "String",
      "id": "String",
      "name": "String",
      "userName": "String"
    }
    assignedTo.email Adresse e-mail de la personne affectée à l’élément de travail.

    Type de données : chaîne

    assignedTo.id Identificateur unique de la personne affectée à l’élément de travail.

    Type de données : chaîne

    assignedTo.name Nom de la personne affectée à l’élément de travail.

    Type de données : chaîne

    assignedTo.userName Nom d’utilisateur de la personne affectée à l’élément de travail.

    Type de données : chaîne

    createDateTime Date et heure de création de l’application, de la version ou de l’enregistrement de l’élément de travail.

    Type de données : chaîne

    id Identificateur unique de l’application, de la version ou de l’élément de travail. Généré par l’outil de planification de la source.

    Type de données : chaîne

    nom Nom de l'application.

    Type de données : chaîne

    chemin d'accès Chemin d’accès relatif à l’application.

    Type de données : chaîne

    shortDescription Brève description de l’application, de la version ou de l’élément de travail.

    Type de données : chaîne

    État État de l’élément de travail. Généré par l’outil de planification de la source.

    Type de données : chaîne

    équipe Description de l’équipe associée à l’application.

    Type de données : objet

    "team": {
      "id": "String",
      "name": "String"
    }
    team.id Identificateur unique de l’équipe associée à l’application. Généré par l’outil de planification de la source.

    Type de données : chaîne

    team.name Nom de l’équipe associée à l’application.

    Type de données : chaîne

    type Type d’élément de travail. Généré par l’outil de planification.

    Type de données : chaîne

    URL URL à utiliser pour accéder à l’application, à la version ou à l’élément de travail.

    Type de données : chaîne

    version Tableau décrivant la version.

    Type de données : objet

    "version": {
      "app": {Object},
      "createdDateTime": "String",
      "id": "String",
      "shortDescription": "String",
      "url": "String"
    }
    version.app Description de l’application à associer à la version.

    Type de données : objet

    "app": {
      "createdDateTime": "String",
      "id": "String",
      "shortDescription": "String",
      "team": {Object},
      "url": "String"
    }
    version.app.createdDateTime Date/heure de création de la version sur l’outil source DevOps .

    Type de données : chaîne

    version.app.id Identificateur unique de l’application. Généré par l’outil de planification de la source.

    Type de données : chaîne

    version.app.Description brève Brève description de l’application associée.

    Type de données : chaîne

    version.app.team Description de l’équipe associée à l’application.

    Type de données : objet

    "team": {
      "id": "String",
      "name": "String"
    }
    version.app.team.id Identificateur unique de l’équipe associée à l’application. Généré par l’outil de planification de la source.

    Type de données : chaîne

    version.app.team.name Nom de l’équipe associée à l’application.

    Type de données : chaîne

    version.app.url URL de l’application sur le site de l’outil de planification source.

    Type de données : chaîne

    version.createdDateTime Date/heure de création de la version sur l’outil source DevOps .

    Type de données : chaîne

    version.id Identificateur unique de la version. Généré par l’outil de planification de la source.

    Type de données : chaîne

    version.courtedescription Brève description de la version associée.

    Type de données : chaîne

    version.url URL de la version sur le site de l’outil de planification source.

    Type de données : chaîne

    Exemple de demande cURL pour resource=app

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/plan/schema?resource=app" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    {
      "result": {
        "id": "PRODUCT1234",
        "shortDescription": "Mobile UI",
        "createdDateTime": "1970-01-01T08:15:30-05:00",
        "team": {
          "name": "Mobile UI",
          "id": "f0ca45679323008b52f3b457415ae6"
        },
        "url": "https://jira.com/mycompany/browse/PRODUCT-125"
      }
    }

    Exemple de demande cURL pour resource=version

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/plan/schema?resource=version" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    
    {
      "result": {
        "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",
          "team": {
            "name": "Mobile UI",
            "id": "f0ca45679323008b52f3b457415ae6"
          },
          "url": "https://jira.com/mycompany/browse/PRODUCT-125"
        },
        "url": "https://jira.com/mycompany/browse/REL-125"
      }
    }

    Exemple de demande cURL pour ressource=work_item

    curl "https://instance.servicenow.com/api/sn_devops/v1/devops/plan/schema?resource=work_item" \
    --request GET \
    --header "Accept:application/json" \
    --user "username":"password"
    
    {
      "result": {
        "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"
        },
        "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",
            "team": {
              "name": "Mobile UI",
              "id": "f0ca45679323008b52f3b457415ae6"
            },
            "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",
          "team": {
            "name": "Mobile UI",
            "id": "f0ca45679323008b52f3b457415ae6"
          },
          "url": "https://jira.com/mycompany/browse/PRODUCT-125"
        },
        "url": "https://jira.com/mycompany/browse/HALOKEY-25"
      }
    }

    DevOps : POST /devops/artifact/registration

    Active les outils d’orchestration pour enregistrer les artefacts dans une ServiceNow instance.

    Ce point de terminaison crée de nouveaux artefacts et de nouvelles versions d’artefacts, et les associe à des validations. La section suivante décrit le flux de processus du point de terminaison :
    • Si la est toolId transmise dans la demande, le point de terminaison valide que l’outil existe au sein de l’instance. Il vérifie également si le référentiel d’artefacts spécifié existe et, si ce n’est artifacts.repositoryName pas le cas, le crée sous l’outil d’artefact associé.
    • Si le n’est toolId pas transmis dans la demande, un référentiel est créé, mais il n’est lié à aucun outil d’artefact.
    • Il vérifie ensuite si l’artefact spécifié existe artifacts.name déjà et, si ce n’est pas le cas, le crée sous le référentiel associé.
    • Si la artifact.version est transmise dans la demande :
      • S’il n’existe pas, un nouvel enregistrement de version d’artefact est créé dans la table Version de l’artefact [sn_devops_artifact_version] associée.
      • Le point de terminaison recherche ensuite les exécutions de tâches associées en fonction des détails de version fournis (pipelineName ou projectName, taskExecutionNumber, branchNameet stageName) et du orchestrationToolId paramètre.
      • Si l’exécution d’une tâche est détectée et que son post-traitement est terminé, la version de l’artefact est liée à l’exécution de la tâche et stockée dans la table Artefact à exécution de tâche [sn_devops_m2m_artifact_execution]. Les validations liées à ces exécutions de tâches sont également associées à la version de l’artefact et stockées dans la table Version de l’artefact à valider [sn_devops_m2m_artifact_version_commit]. Toutes les validations liées à des exécutions de tâches précédentes qui n’ont pas créé d’artefact sont également associées à la version de l’artefact.
      • Si l’exécution d’une tâche est trouvée et que son post-traitement n’est pas terminé, la demande est conservée dans la table Demande intermédiaire d’artefact [sn_devops_artifact_staging]. La demande intermédiaire contient une référence à l’exécution de la tâche.
      • Si aucune exécution de tâche n’est trouvée, la demande est conservée dans la table intermédiaire. La demande intermédiaire contient les détails de la version.
    • Si la n’est artifact.version pas transmise, selon la configuration de l’outil, la version de l’artefact est récupérée soit en appelant le point de terminaison /devops/tool/artifact si votre outil d’artefact prend en charge les webhooks, soit via un flux secondaire personnalisé qui récupère la version de l’artefact à partir de l’outil d’artefact.

    Pour plus d’informations sur les artefacts, consultez Utilisation de l’accélération du changement DevOps pour les mises en production.

    Format d'URL

    URL avec version : /api/sn_devops/{api_version}/devops/artifact/registration

    URL par défaut : /api/sn_devops/devops/artifact/registration

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 43. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 44. Paramètres de requête
    Nom Description
    orchestrationToolId Requis. Sys_id de l’outil d’orchestration associé à l’artefact. Le point de terminaison utilise ces informations pour localiser les informations d’exécution des tâches.

    Type de données : chaîne

    Table : Outil d’orchestration [sn_devops_orchestration_tool]

    toolId Sys_id de l’outil d’artefact associé à l’artefact.

    Type de données : chaîne

    Table : Outil d’artefact [sn_devops_artifact_tool]

    Tableau 45. Paramètres de corps de demande (XML ou JSON)
    Nom Description
    Artefacts Au moins une entrée requise. Tableau d’objets dans lequel chaque objet identifie de manière unique une version d’artefact à enregistrer.

    Type de données : tableau d’objets

    "artifacts": [
      {
        "name": "String",
        "repositoryName": "String",
        "semanticVersion": "String",
        "version": "String"
      }
    ]
    artifacts.name Requis. Nom du fichier d’artefact.

    Type de données : chaîne

    Longueur maximale : 160 caractères

    artefacts.nomréférentiel Requis. Nom du référentiel de l’artefact.

    Si l’enregistrement du référentiel spécifié n’existe pas, il est créé.

    Type de données : chaîne

    Longueur maximale : 160 caractères

    artefacts.sémanticVersion Version sémantique de l’artefact.

    Type de données : chaîne

    Format : MAJEUR. MINEUR. APPLICATION DE CORRECTIF

    Exemples de valeurs possibles :
    • 2.0.0
    • 2.0.0-rc.2
    • 2.0.0 à rc.1
    • 1.0.0-bêta

    Longueur maximale : 160 caractères

    Valeur par défaut : nul

    artefact.version Requis si toolId non transmis. Version de l’artefact.

    Type de données : chaîne

    Format : MAJEUR. MINEURE

    Longueur maximale : 160 caractères

    Valeur par défaut : nul

    branchName Requis s’il s’agit d’un projet à plusieurs branches. Nom de la branche dans le référentiel où l’artefact est stocké.

    Type de données : chaîne

    Longueur maximale : 160

    Valeur par défaut : nul

    pipelineName Requis si projectName non transmis. Nom du pipeline.

    Type de données : chaîne

    Longueur maximale : 160

    Valeur par défaut : nul

    projectName Requis si pipelineName non transmis. Nom de projet de forme libre.

    Type de données : chaîne

    Longueur maximale : 160

    Valeur par défaut : nul

    stageName Requis si pipelineName est réussi. Nom de l’étape.

    Type de données : chaîne

    Longueur maximale : 160

    Valeur par défaut : nul

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 46. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Autorisation
    À partir de la version v2, cette API prend en charge l’authentification basée sur les jetons. Les jetons peuvent être acquis en cliquant sur le bouton Copier le jeton sur l’enregistrement de l’outil, situé dans la table Outil [sn_devops_tool]. Le jeton peut ensuite être utilisé dans un en-tête d’autorisation au format Autorisation : sn_devops. DevOpsToken <tool_sys_id> :<tool_token>.
    Remarque :
    Si les détails de l’authentification de base (nom d’utilisateur et mot de passe) sont fournis en plus d’un en-tête d’autorisation avec jeton, l’authentification de base a priorité.

    Si l’utilisateur devops.system n’est pas disponible dans votre instance, utilisez la propriété Basculer vers cet utilisateur une fois l’authentification basée sur le jeton réussie . Cette propriété permet de définir n’importe quel utilisateur disposant du rôle sn_devops.integration, qui est nécessaire pour terminer l’authentification par jeton. (pour en savoir plus, consultez DevOps Change Velocity properties) ;

    Type de contenu Format des données du corps de la demande. Prend uniquement en charge application/json.
    Tableau 47. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 48. Codes d'état
    Code d'état Description
    200 Réussite. Réussite avec le corps de la réponse.
    201 Créé. Réussite avec le corps de la réponse.
    400 Demande incorrecte. L’URI de demande ne correspond pas aux API du système ou l’opération a échoué pour des raisons inconnues. Des en-têtes non valides peuvent également provoquer cette erreur.
    500 Erreur interne du serveur. Une erreur inattendue s’est produite lors du traitement de la demande. La réponse contient des informations supplémentaires sur l’erreur.

    Paramètres du corps de réponse

    Nom Description
    réponse Résultats de la demande d’enregistrement de l’artefact.

    Type de données : objet

    "response": {
      "artifact": {Object},
      "artifact_register_requests": {Object},
      "artifact_repository": {Object},
      "artifact_version": {Object}
    }
    réponse.artefact Résultats pour chaque artefact traité.

    Type de données : objet

    "artifact": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    réponse.artefact.créer Si la demande a créé des enregistrements d’artefacts, la liste des sys_ids des enregistrements créés.

    Type de données : tableau d’objets

    "create": [
      {
        "id": "String"
      }
    ]

    Table : Artefacts [sn_devops_artifact]

    response.artifact.create.id Sys_id de l’enregistrement d’artefact créé par la demande.

    Type de données : chaîne

    réponse.artefact.trouvé Si un artefact existe déjà dans la table Artefacts, la liste des sys_ids des enregistrements d’artefacts existants.
    Remarque :
    Aucune modification n’est apportée aux packages existants.

    Type de données : tableau d’objets

    "found": [
      {
        "id": "String"
      }
    ]
    response.artifact.found.id Sys_id de l’enregistrement d’artefact existant.

    Type de données : chaîne

    réponse.artefact.mise à jour Actuellement inutilisé
    response.artifact.update.id Actuellement inutilisé
    response.artifact_register_requests Les résultats de tous les artefacts enregistrent les demandes dont le traitement n’est pas terminé et qui ont été stockées dans la table Demande intermédiaire d’artefact.

    Type de données : objet

    "artifact_register_requests": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.artifact_register_requests.créer Si la demande a créé des enregistrements intermédiaires d’artefacts, liste des sys_ids des enregistrements créés.

    Type de données : tableau d’objets

    "create": [
      {
        "id": "String"
      }
    ]
    response.artifact_register_requests.create.id Sys_id de l’enregistrement intermédiaire d’artefact créé par la demande.

    Type de données : chaîne

    response.artifact_register_requests.trouvé Si des artefacts ont déjà des enregistrements intermédiaires d’artefacts associés, la liste des sys_ids des enregistrements intermédiaires d’artefacts existants.
    Remarque :
    Aucune modification n’est apportée aux packages existants.

    Type de données : tableau d’objets

    "found": [
      {
        "id": "String"
      }
    ]
    response.artifact_register_requests.trouvé.id Sys_id d’un enregistrement intermédiaire d’artefact existant.

    Type de données : chaîne

    response.artifact_register_requests.mise à jour Actuellement inutilisé
    response.artifact_register_requests.update.id Actuellement inutilisé
    response.artifact_repository Résultats pour tous les enregistrements de référentiel d’artefacts qui ont été manipulés pendant le traitement de la demande.

    Type de données : objet

    "artifact_repository": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.artifact_repository.créer Si des référentiels d’artefacts ont été créés par la demande, la liste des sys_ids des enregistrements créés.

    Type de données : tableau d’objets

    "create": [
      {
        "id": "String"
      }
    ]
    response.artifact_repository.create.id Sys_id de l’enregistrement du référentiel de l’artefact créé par la demande.

    Type de données : chaîne

    response.artifact_repository.trouvé Si des enregistrements de référentiel d’artefacts utilisés dans la demande de registre existent déjà, la liste des sys_ids des enregistrements existants.
    Remarque :
    Aucune modification n’est apportée aux packages existants.

    Type de données : tableau d’objets

    "found": [
      {
        "id": "String"
      }
    ]
    response.artifact_repository.trouvé.id Sys_id d’un enregistrement de référentiel d’artefact existant utilisé par la demande.

    Type de données : chaîne

    response.artifact_repository.mise à jour Si le point de terminaison met à jour le marqueur de suivi sur un référentiel sur vrai (à partir de faux), liste des sys_ids enregistrements du référentiel qui ont été modifiés.

    Type de données : tableau d’objets

    "update": [
      {
        "id": "String"
      }
    ]
    response.artifact_repository.update.id Sys_id de l’enregistrement du référentiel dont le marqueur de suivi a été modifié.

    Type de données : chaîne

    response.artifact_version Résultats pour tous les enregistrements de version d’artefact qui ont été manipulés pendant le traitement de la demande.

    Type de données : objet

    "artifact_version": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.artifact_version.créer Résultats pour tous les enregistrements de version d’artefact qui ont été créés pendant le traitement de la demande.

    Type de données : tableau d’objets

    "create": [
      {
        "id": "String"
      }
    ]
    response.artifact_version.create.id Sys_id de l’enregistrement de version de l’artefact créé par la demande.

    Type de données : chaîne

    response.artifact_version.trouvé Si des enregistrements de version d’artefact utilisés dans la demande de registre existent déjà, la liste des sys_ids des enregistrements existants.

    Type de données : tableau d’objets

    "found": [
      {
        "id": "String"
      }
    ]
    response.artifact_version.trouvé.id Sys_id de l’enregistrement de version de l’artefact existant utilisé par la demande.

    Type de données : chaîne

    response.artifact_version.mise à jour Actuellement inutilisé
    response.artifact_version.update.id Actuellement inutilisé
    statut État de la demande d’inscription.
    Valeurs possibles :
    • Réussite : le corps de la réponse contient les résultats de retour.
    • Erreur : le corps de la réponse contient une liste de toutes les erreurs.

    Type de données : chaîne

    Exemple de demande cURL

    curl -X POST \
    'https://instance.servicenow.com/api/sn_devops/devops/artifact/registration?toolId=391b4ff6dba24010bc8cdd384b96198f&orchestrationToolId=99d70b36dba24010bc8cdd384b961985' \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json' \
    -u 'username':'password' \
    -d ' {"artifacts": [\
     {\
     "name": "sa-web.jar",\
     "version": "3.1",\
     "semanticVersion": "3.1.0",\
     "repositoryName": "services-1031"\
     },\
     {\
     "name": "sa-frontend.jar",\
     "version": "3.2",\
     "semanticVersion": "3.2.0",\
     "repositoryName": "services-1031"\
     }\
     ],\
     "pipelineName": "spring-boot-app",\
     "taskExecutionNumber": "160",\
     "stageName": "Build",\
     "branchName": "primary"\
    }]'
    {
    "result": {
      "status": "Success",
      "response": {
        "artifact_repository": {
          "create": [
            {
              "id": "2e50ba8bdbaa4010bc8cdd384b961988"
            }
          ],
          "update": [],
          "found": [
            {
              "id": "2e50ba8bdbaa4010bc8cdd384b961988"
            }
          ]
        },
        "artifact": {
          "create": [
            {
              "id": "6a50f603dbea4010bc8cdd384b96193d"
            },
            {
              "id": "2e50f603dbea4010bc8cdd384b96193f"
            }
          ],
          "update": [],
          "found": []
        },
        "artifact_version": {
          "create": [
            {
              "id": "a650f603dbea4010bc8cdd384b96193e"
            },
            {
              "id": "6250f603dbea4010bc8cdd384b961940"
            }
          ],
          "update": [],
          "found": []
        },
        "artifact_register_requests": {
          "create": [
            {
              "id": "6250f603dbea4010bc8cdd384b96193f"
            },
            {
              "id": "6650f603dbea4010bc8cdd384b961940"
            }
          ],
          "update": [],
          "found": []
        }
      }
     }
    }

    DevOps - POST /devops/onboarding/app

    Crée un événement d’application d’intégration qui est traité de façon asynchrone par le DevOps service.

    Ce point de terminaison peut effectuer les actions suivantes :
    • Créez des applications.
    • Associez DevOps des objets tels qu’un plan, un référentiel et un pipeline, à une application.
    • Créez un enregistrement d’étape de changement et associez un processus d’approbation des changements à un pipeline.

    Toutes ces actions sont spécifiques aux outils et aux capacités. Le tableau suivant présente les actions disponibles pour chaque outil pris en charge.

    Matrice d’intégration de l’application

    Format d'URL

    URL avec version : /api/sn_devops/{api_version}/devops/onboarding/app

    URL par défaut : /api/sn_devops/devops/onboarding/app

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 49. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 50. Paramètres de requête
    Nom Description
    Néant
    Tableau 51. Paramètres du corps de la demande
    Nom Description
    applications Tableau des objets qui définissent les applications à créer dans l’instance associée ServiceNow .

    Type de données : tableau

    "apps": [{
      "bussinessApp": "String",
      "name": "String"
    }]
    apps.businesssinessApp Nom du cmdb_ci_business_app auquel mapper l’application. L’application DevOps est alors liée à l’application CMDB spécifiée.

    Type de données : chaîne

    apps.name Requis. Nom convivial de l’application à créer. Une application est un DevOps objet conteneur de produit qui relie les plans, les référentiels et les pipelines.

    Type de données : chaîne

    informations d'identification Requis. Informations d’identification à utiliser pour la création du webhook. Le webhook créé est utilisé par l’outil pour envoyer des notifications.

    Type de données : objet

    "credentials": {
      "name": "String",
      "password": "String"
    }
    credentials.name Requis. ServiceNow ID utilisateur de l’utilisateur effectuant la demande de point de terminaison. Cet utilisateur doit avoir le rôle devops.integration.user. À partir de la version 1.34.1, cet utilisateur doit disposer du rôle sn_devops.admin.

    Type de données : chaîne

    Table : Utilisateur [sys_user]

    informations d’identification.mot de passe Requis. Mot de passe de l’utilisateur spécifié dans le credenitals.name paramètre.

    Type de données : chaîne

    pipelines Liste des pipelines à associer aux applications.

    Type de données : tableau d’objets

    "pipelines": [{
      "app": "String",
      "name": "String",
      "tool": "String"
    }]
    pipelines.app Requis si un pipelines objet est spécifié. Nom de l’application à associer au plan spécifié dans le pipelines.name paramètre. L’application doit avoir déjà été créée ou être spécifiée dans l’objet apps de cette demande.

    Type de données : chaîne

    pipelines.changementÉtapes Modifiez les étapes à créer pour le pipeline spécifié dans le pipelines.name champ.

    Type de données : tableau d’objets

    "changeSteps": [{
      "changeApprovalGroup": "String",
      "changeControlledBranches": "String",
      "changeType": "String",
      "name": "String",
      "type": "String"
    }]
    pipelines.changeSteps.changeApprovalGroup Requis si un changeSteps objet est spécifié. Nom du groupe d’approbation des changements à associer au pipeline. Ce groupe doit déjà exister sur l’instance ServiceNow .

    Type de données : chaîne

    Table : Groupe [sys_user_group]

    pipelines.étapesde changement.changementsBranches contrôlées Liste séparée par des virgules des branches de code qui sont sous contrôle de changement. Cela s’applique uniquement à la prise en charge multi-branches.

    Type de données : chaîne

    Par défaut : * (toutes les branches)

    pipelines.changeSteps.changeType Requis si un changeSteps objet est spécifié. Type de demande de changement à créer.

    Type de données : chaîne

    Table : dans le champ Type de la table Demande de changement [change_request].

    pipelines.changeSteps.name Requis si un changeSteps objet est spécifié. Nom de l’étape à créer. Le nom de l’étape doit correspondre au nom de l’étape correspondante dans le pipeline de l’outil d’orchestration.

    Type de données : chaîne

    pipelines.changementÉtapes.type Requis si un changeSteps objet est spécifié. Type d’étape à créer.

    Type de données : chaîne

    Table : dans le champ Type de la table Étapes [sn_devops_step].

    pipelines.name Requis si un pipelines objet est spécifié. Nom du pipeline à associer à l’application spécifiée dans pipelines.app le paramètre. Ce pipeline doit déjà être détecté sur l’instance ServiceNow .

    Type de données : chaîne

    pipelines.projet Requis si un objet pipelines est spécifié et que l’entité pipelines.tool prend en charge les projets (par exemple, l’outil ADO). Projet à associer au pipeline pour créer un identificateur de pipeline/d’outil unique. La valeur du paramètre doit provenir d’un projet de la table Projet [sn_devops_project].

    Type de données : chaîne

    pipelines.outil Requis si un pipelines objet est spécifié. Outil à associer au pipeline pour créer un identificateur de pipeline/d’outil unique.

    Type de données : chaîne

    plans Liste des plans à associer à une application.

    Type de données : tableau d’objets

    "plans": [{
      "app": "String",
      "name": "String",
      "tool": "String"
    }]
    plans.apps Requis si un plans objet est spécifié. Noms des applications à associer au plan spécifié dans le plans.name paramètre. Ces applications doivent avoir déjà été créées ou être spécifiées dans l’objet apps de cette demande.

    Type de données : tableau de chaînes

    plans.name Requis si un plans objet est spécifié. Nom du plan à associer à l’application spécifiée dans plans.app le paramètre. Ce plan doit déjà être détecté sur l’instance ServiceNow .

    Type de données : chaîne

    plans.projet Requis si un objet plans est spécifié et que l’entité plans.tool prend en charge les projets (par exemple, l’outil ADO). Outil à associer au pipeline pour créer un identificateur de plans/d’outil unique. La valeur du paramètre doit provenir d’un projet de la table Projet [sn_devops_project].

    Type de données : chaîne

    plans.outil Requis si un plans objet est spécifié. Outil à associer au plan pour créer un identificateur de plan/outil unique.

    Type de données : chaîne

    référentiels Liste des référentiels associés à une application. Si l’objet Référentiels contient un paramètre d’application, il mappe le référentiel à l’application.

    Type de données : tableau d’objets

    "repositories": [{
      "app": "String",
      "name": "String",
      "tool": "String"
    }]
    repositories.app Requis si un repositories objet est spécifié. Nom de l’application à associer à ce référentiel. L’application doit avoir déjà été créée ou être spécifiée dans l’objet apps de cette demande.

    Type de données : chaîne

    repositories.name Requis si un repositories objet est spécifié. Nom du référentiel à associer à l’application spécifiée dans repositories.app le paramètre. Ce référentiel doit déjà être détecté sur l’instance ServiceNow .

    Type de données : chaîne

    référentiels.projet Requis si un objet de référentiels est spécifié et qu’il repositories.tool prend en charge une entité de projets (par exemple, l’outil ADO). Outil à associer aux référentiels pour créer un référentiel/un identificateur d’outil unique. La valeur du paramètre doit provenir d’un projet de la table Projet [sn_devops_project].

    Type de données : chaîne

    référentiels.outil Requis si un repositories objet est spécifié. Nom d’outil convivial à associer au référentiel pour créer un identificateur de référentiel/d’outil unique. L’outil doit déjà être créé sur l’instance ServiceNow .

    Type de données : chaîne

    artifactRepositories.app Requis si l’objet artifactRepositories est spécifié. Nom de l’application à associer à cet artifactRepositories. L’application doit avoir déjà été créée ou être spécifiée dans l’objet apps de cette demande.

    Type de données : chaîne

    artifactRepositories.name Requis si l’objet artifactRepositories est spécifié. Nom des référentiels d’artefact à associer à l’application spécifiée dans artifactRepositories.app paramètre. Cet artifactRepositories doit déjà être découvert sur l’instance ServiceNow.

    Type de données : chaîne

    artefactRepositories.outil Requis si l’objet artifactRepositories est spécifié. Nom d’outil convivial à associer à artifactRepositories pour créer un artefactRepositories unique /identificateur d’outil. L’outil doit déjà être créé sur l’instance ServiceNow.

    Type de données : chaîne

    artefactRepositories.project Requis si l’objet artifactRepositories est spécifié et si l’entité prend en charge les repositories.tool projets (par exemple, l’outil ADO). Outil à associer à pour créer un identificateur de pipeline/d’outil artifactRepositories unique.

    Type de données : chaîne

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 52. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Type de contenu Format des données du corps de la demande. Prend uniquement en charge application/json.
    Tableau 53. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 54. Codes d'état
    Code d'état Description
    202 La demande d’intégration a été créée avec succès.

    Paramètres du corps de réponse

    Nom Description
    résultat Résultats de la demande d’intégration.
    Type de données : objet
    "result": {
      "code": "String",
      "details": "String",
      "errors": {Object],
      "onboardingRequestID": "String",
      "status": "String"
    }
    résultat.code Code d’état HTTP.

    Type de données : chaîne

    résultat.détails Détails sur la demande d’intégration.

    Type de données : chaîne

    résultat.erreurs Description de toute erreur qui s’est produite.

    Type de données : objet

    Résultat.Erreur.Message Message d’erreur.

    Type de données : chaîne

    résultat.onboardingRequestID Identificateur unique de la demande d’intégration. Utilisez cette valeur lors de l’appel du point de terminaison /devops/onboarding/status pour obtenir l’état du processus d’intégration associé.

    Type de données : chaîne

    résultat.état État de la demande d’intégration, soit Réussite, soit Échec.

    Type de données : chaîne

    Demande cURL

    Cet exemple crée l’application Service de location de vélos et l’associe au pipeline Jenkins Location de vélos, au référentiel GitHub nowDevops01/CorpSite et au plan Azure testPlan_Bike_Rental.

    curl -X POST "https://servicenow-instance/api/sn_devops/v1/devops/onboarding/app" \ 
    -H "Accept: application/json" \ 
    -H "Content-Type: application/json" \ 
    -u "username":"password" \ 
    -d "{ 
      "apps": [ 
        { 
          "name": "Bike Rental Service" 
        } 
      ] 
      "pipelines": [ 
        { 
          "tool": "Primary Jenkins", 
          "name": "Bike Rentals", 
          "app": "Bike Rental Service", 
          "changeSteps": [ 
            { 
              "name": "Prod", 
              "type": "deploy", 
              "changeApprovalGroup": "Change Management", 
              "changeType": "normal" 
            } 
          ] 
        } 
      ], 
      "repositories": [ 
        { 
          "tool": "Primary GitHub", 
          "name": "nowDevops01/CorpSite", 
          "app": "Bike Rental Service" 
        } 
      ] 
      "plans": [ 
        { 
          "tool": "Primary Azure", 
          "name": "testPlan_Bike_Rental", 
    "project": "DemoProjecttt", 
          "apps": [ 
            "Bike Rental Service" 
          ] 
        } 
      ] 
    "artifactRepositories": [ 
    { 
    "tool": "AdoTool", 
    "name": "empb5-sonar", 
    "apps": [ 
    "appXXXXtz" 
    ] 
    } 
    ] 
     
      "credentials" : { 
        "name": "devops_user", 
        "password": "devops_password" 
      }  
    } 

    Sortie :

    { 
      "result":{ 
        "status": "Success", 
        "details": "Onboarding request has been created. Please use the /status api and the onboarding request number to get the status of the request", 
        "onboardingRequestID": "IBE0001045", 
        "code": "202" 
      } 
    } 

    DevOps : POST /devops/onboarding/outil

    Crée un événement d’outil d’intégration qui est traité de façon asynchrone par le DevOps service.

    Selon le type d’outil pour lequel la demande est publiée, le point de terminaison effectue les actions suivantes :
    • Crée l’outil dans l’instance associée ServiceNow
    • Se connecte à l’outil
    • Essaie de configurer l’outil (uniquement si la connexion réussit)
    • Détecte l’outil (uniquement si la connexion aboutit)
    Toutes ces actions sont spécifiques à l’outil et sont exécutées en fonction des options d’intégration de l’outil spécifié.

    Matrice d’intégration de l’outil

    Les résultats de retour pour ce point de terminaison indiquent uniquement si la demande a été publiée, ils n’indiquent pas si les outils associés ont été créés. La création réelle de l’outil est traitée de manière asynchrone. Pour obtenir l’état de la création de l’outil et de toutes les autres actions, vous devez appeler le point de terminaison /devops/onboarding/status et transmettre le onboardingRequestID paramètre renvoyé par ce point de terminaison.

    Avant de pouvoir accéder à ce point de terminaison, votre administrateur doit avoir configuré l’alias de connexion et d’informations d’identification (CreateDevOpsTool) pour configurer les DevOps outils dans l’instance. Pour plus d’informations, consultez Installer la vélocité de changement DevOps. En outre, l’entité appelante doit avoir le rôle devops.integration.user.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/onboarding/tool

    URL par défaut : /api/sn_devops/devops/onboarding/tool

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 55. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 56. Paramètres de requête
    Nom Description
    Néant
    Tableau 57. Paramètres du corps de la demande
    Nom Description
    informations d'identification Requis. Informations d’identification à utiliser pour la création du webhook. L’outil utilise le webhook créé pour envoyer des notifications.

    Type de données : objet

    "credentials": {
      "name": "String",
      "password": "String"
    }
    credentials.name Requis. ServiceNow Identificateur de l’utilisateur effectuant la demande de point de terminaison. Cet utilisateur doit avoir le rôle devops.integration.user. À partir de la version 1.34.1, cet utilisateur doit disposer du rôle sn_devops.admin.

    Type de données : chaîne

    Table : Utilisateur [sys_user]

    informations d’identification.mot de passe Requis. Mot de passe de l’utilisateur spécifié dans le credenitals.name paramètre.

    Type de données : chaîne

    outils Requis. Outils à créer dans l’instance associée ServiceNow . Vous pouvez créer un ou plusieurs outils dans une seule demande.

    Type de données : tableau d’objets

    "tools": [{
      "name": "String",
      "password": "String",
      "type": "String",
      "useMidServer": Boolean,
      "username": "String",
      "url": "String"
    }]
    tools.name Requis. Nom ou étiquette convivial de l’outil à créer. Ce nom est utilisé pour identifier l’outil dans le DevOps service.

    Type de données : chaîne

    outils.mot de passe Requis sauf pour l’outil Agile. Mot de passe à utiliser pour accéder à l’outil. Les authentifications prises en charge sont de base et de jeton ; OAuth n’est pas pris en charge.

    Type de données : chaîne

    outils.type Requis. Type d’outil à créer, tel que GitHub ou BitBucket. La valeur spécifiée doit être l’une des étiquettes d’outil de la table Intégrations d’outils [sn_devops_tool_integration].

    Type de données : chaîne

    tools.useMidServer Marqueur indiquant si l’outil se connecte via un Serveur MID.

    Valeurs valides :

    • true : Se connecte via un Serveur MID fichier .
    • false : Ne se connecte pas via un Serveur MID.

    Type de données : booléennes

    Outils.nom d’utilisateur Requis sauf pour l’outil Agile. Nom d’utilisateur à utiliser pour accéder à l’outil via ce point de terminaison.

    Type de données : chaîne

    outils.url Requis sauf pour l’outil Agile. URL de l’outil à créer. Le DevOps service utilise cette URL pour s’intégrer à l’outil. Si vous utilisez l’outil « Azure DevOps », peut contenir soit l’URL de l’organisation ADO, tools.url soit l’URL du projet ADO.

    Lors de la fourniture d’une URL d’organisation ADO, l’API détecte tous les projets sous l’organisation spécifiée et ne configure aucun projet. Lors de la fourniture d’une URL de projet ADO, l’API détecte les entités associées au projet telles que les pipelines, les référentiels et les plans, et configure également un projet si l’objet credentials est présent. Pour indiquer explicitement à l’API d’ignorer la configuration du projet, configurez un marqueur configureTool (type : booléen) sur faux. Si configureTool cela n’est pas explicitement fourni dans la charge utile ou si la valeur est définie sur vrai, l’outil est automatiquement configuré.

    Type de données : chaîne

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 58. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Type de contenu Format des données du corps de la demande. Prend uniquement en charge application/json.
    Tableau 59. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 60. Codes d'état
    Code d'état Description
    202 La demande d’intégration a été créée avec succès.

    Paramètres du corps de réponse

    Nom Description
    résultat Résultats de la demande d’intégration.
    Type de données : objet
    "result": {
      "code": "String",
      "details": "String",
      "errors": {Object},
      "onboardingRequestID": "String",
      "status": "String"
    }
    résultat.code Code d’état HTTP.

    Type de données : chaîne

    résultat.détails Message détaillé sur la demande d’intégration.

    Type de données : chaîne

    résultat.erreurs Description de toute erreur qui s’est produite.

    Type de données : objet

    Résultat.Erreur.Message Message d’erreur.

    Type de données : chaîne

    résultat.onboardingRequestID Identificateur unique de la demande d’intégration. Utilisez cette valeur lors de l’appel du point de terminaison /devops/onboarding/status pour obtenir l’état du processus d’intégration de l’outil associé.

    Type de données : chaîne

    résultat.état État de la demande d’intégration, soit Réussite, soit Échec.

    Type de données : chaîne

    Demande cURL

    L’exemple suivant montre comment intégrer GitHub.

    curl -X POST "https://servicenow-instance/api/sn_devops/v1/devops/onboarding/tool" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -u "username":"password" \
    -d {
      "tool":[{
        "name": "Primary GitHub",
        "type": "GitHub",
        "url": "https"//api.github.com",
        "username": "username",
        "password": "password",
        "useMidServer": false 
      }]
      "credentials" : {
        "name": "devops_user",
        "password": "devops_password"
      }
    }

    {
      "result":{
        "status": "Success",
        "details": "Onboarding request has been created. Please use the /status api and the onboarding request number to get the status of the request",
        "onboardingRequestID": "IBE0001041",
        "code": "202"
      }
    }

    DevOps - POST /devops/orchestration/changeControl

    Enregistre un rappel auprès d’une ServiceNow instance pour une tâche d’orchestration sous contrôle de changement, qui peut être appelée une fois qu’une décision a été prise sur la demande de changement.

    Avant d’appeler ce point de terminaison, vous devez avoir une tâche d’orchestration créée dans votre ServiceNow instance. Vous pouvez créer cette tâche via Détection ou en appelant le point de DevOps : POST /devops/orchestration/stepMapping terminaison. Vous devez également vous assurer que la tâche d’orchestration est associée à une étape de pipeline précédemment définie et que le contrôle des changements est activé (en sélectionnant l’option Contrôle des changements sur le formulaire Étape de l’application). Pour plus d’informations, consultez Accélérer le changement DevOps.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/orchestration/changeControl

    URL par défaut : /api/sn_devops/devops/orchestration/changeControl

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 61. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 62. Paramètres de requête
    Nom Description
    toolId Requis. Sys_id de l’outil DevOps pour lequel placer la tâche spécifiée sous contrôle des changements.

    Type de données : chaîne

    Table : Outil d’orchestration [sn_devops_orchestration_tool]

    toolType Type d’outil.

    Valeur valide : toute valeur qui identifie l’outil, telle que « jenkins ».

    Type de données : chaîne

    Tableau 63. Paramètres du corps de la demande
    Nom Description
    URL de rappel Requis. URL que l’instance ServiceNow peut rappeler une fois le processus d’approbation de demande de changement associé terminé. Ce rappel doit permettre à l’exécution du pipeline de se poursuivre ou non, en fonction du résultat de l’approbation.

    Type de données : chaîne

    changeRequestDetails Paires nom-valeur des champs à définir lors de la fermeture d’une demande de changement. Cet objet peut contenir tous les champs de l’enregistrement de demande de changement, à l’exception des champs suivants :
    • impact
    • Numéro
    • risk
    • risk_impact_analysis
    • sys_id

    Si ces champs sont inclus dans la demande, le point de terminaison renvoie une erreur 400 et la demande de changement n’est pas mise à jour. En outre, si vous incluez des champs qui nécessitent la définition d’autres champs obligatoires et que ces champs ne sont pas envoyés, la demande échouera lors du traitement ultérieur du pipeline. Cette défaillance est notée dans les notes de travail de la demande de changement, accompagnée d’un message d’erreur pour cette demande de changement particulière, tel que : Échec de la mise à jour de la demande de changement avec le motif : <Message d’erreur de la plateforme>. Annulation de la demande de changement et de l’exécution de l’étape connexe.

    Vous pouvez également transmettre le paramètre setCloseCode booléen dans cet objet pour spécifier si les informations de fermeture doivent être définies sur l’enregistrement de demande de changement associé.
    • Si la valeur est définie sur vrai, le champ close_code est défini sur l’état de la tâche et le champ close_notes est défini sur un lien vers l’exécution de l’étape dans l’enregistrement de demande de changement associé. La valeur par défaut est vrai.
    • Si la valeur est définie sur faux, les champs close_code et close_notes ne sont pas définis et un lien vers l’exécution de l’étape est défini dans le champ work_notes.

    Type de données : objet

    isMultiBranch Si l’outil d’orchestration est Jenkins, marqueur indiquant si le projet est de type Multibranche.
    Valeurs valides :
    • true : le projet est de type Multibranche.
    • faux : le projet n’est pas de type Multibranche.

    Type de données : booléennes

    Valeur par défaut : false

    orchestrationTaskDetails Requis. Description de la tâche d’orchestration.

    Type de données : objet

    "orchestrationTaskDetails": {
      "message": "String",
      "triggerType": "String",
      "upstreamTaskExecutionURL": "String"
    }
    orchestrationTaskDetails.message Message texte de forme libre.

    Type de données : chaîne

    orchestrationTaskDetails.triggerType Requis. La façon dont la tâche d’orchestration a été démarrée.

    Valeurs valides :

    • scm : la validation du code de l’outil Git/scm a déclenché la tâche.
    • en amont : la tâche en amont a déclenché cette tâche.
    • user : l’utilisateur a démarré manuellement la tâche.

    Type de données : chaîne

    orchestrationTaskDetails.upstreamTaskExecutionURL Requis si triggerType est défini sur en amont. URL d’exécution des tâches en amont.

    Par exemple : https://jenkins.mycompany.com:8080/job/Mobile-Platform-test/40/

    Type de données : chaîne

    orchestrationTaskURL Requis. URL de la tâche d’orchestration pour laquelle créer le rappel.

    Par exemple : https://jenkins.mycompany.com:8080/orchestration_task/Mobile-Platform-deploy/

    Type de données : chaîne

    Nœud parent Si la tâche d’orchestration est un enfant imbriqué à l’intérieur d’une tâche d’orchestration parente, cette valeur contient les détails du nœud parent.

    Type de données : objet

    "parentNode": {
      "id": "String",
      "name": "String",
      "upstreamStageName": "String",
      "upstreamTaskExecutionURL": "String"
    }
    parentNode.id ID unique pour le nœud parent.

    Dans Jenkins, cette valeur correspond à un ID d’étape de pipeline.

    Type de données : chaîne
    parentNode.name Nom du nœud parent.

    Dans Jenkins, cette valeur correspond à un nom d’étape de pipeline.

    Type de données : chaîne
    parentNode.upstreamStageName Nom de la tâche d’orchestration en amont du nœud parent.

    Dans Jenkins, cette valeur correspond à un nom d’étape de pipeline.

    Type de données : chaîne
    parentNode.upstreamTaskExecutionURL URL de l’exécution de la tâche en amont du nœud parent.

    Dans Jenkins, cette valeur correspond à une URL d’exécution d’étape de pipeline.

    Type de données : chaîne
    parentStageName Si la tâche d’orchestration est un enfant imbriqué à l’intérieur d’une tâche d’orchestration parente, le nom de la tâche d’orchestration parente.

    Type de données : chaîne

    parentStageURL Si la tâche d’orchestration est un enfant imbriqué à l’intérieur d’une tâche d’orchestration parente, l’URL de la tâche d’orchestration parente.

    Type de données : chaîne

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 64. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Types pris en charge : application/json ou application/xml.

    Valeur par défaut : application/json

    Autorisation
    À partir de la version v2, cette API prend en charge l’authentification basée sur les jetons. Les jetons peuvent être acquis en cliquant sur le bouton Copier le jeton sur l’enregistrement de l’outil, situé dans la table Outil [sn_devops_tool]. Le jeton peut ensuite être utilisé dans un en-tête d’autorisation au format Autorisation : sn_devops. DevOpsToken <tool_sys_id> :<tool_token>.
    Remarque :
    Si les détails de l’authentification de base (nom d’utilisateur et mot de passe) sont fournis en plus d’un en-tête d’autorisation avec jeton, l’authentification de base a priorité.

    Si l’utilisateur devops.system n’est pas disponible dans votre instance, utilisez la propriété Basculer vers cet utilisateur une fois l’authentification basée sur le jeton réussie . Cette propriété permet de définir n’importe quel utilisateur disposant du rôle sn_devops.integration, qui est nécessaire pour terminer l’authentification par jeton. (pour en savoir plus, consultez DevOps Change Velocity properties) ;

    Type de contenu Format des données du corps de la demande. Prend uniquement en charge application/json.
    Tableau 65. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 66. Codes d'état
    Code d'état Description
    201 Demande terminée avec succès.
    400 Demande incorrecte. Un type de demande incorrecte ou mal formé a été détecté.
    401 Authentification non valide ou manquante.
    500 Erreur interne du serveur. Une erreur inattendue s’est produite lors du traitement de la demande. La réponse contient des informations supplémentaires sur l’erreur.

    Paramètres du corps de réponse

    Nom Description
    contrôle de changement Marqueur indiquant si la tâche d’orchestration est sous contrôle de changement.
    Valeurs possibles :
    • vrai : sous contrôle des changements.
    • faux : non soumis au contrôle des changements.

    Type de données : booléennes

    Demande cURL

    curl -X POST "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/changeControl?toolId=f0ca45679323008b52f3b457415ae6&toolType=jenkins"
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{
      \"orchestrationTaskURL\":\"https://jenkins.mycompany.com:8080/orchestration task/Mobile-Platform-deploy/\",
      \"callbackURL\":\"https://jenkins.mycompany.com:8080/sn-devops/964aca59-0cae-4d9b-a36d-5929f426cf31\",
      \"orchestrationTaskDetails\":{
        \"message\":\"Started by upstream project \\\"Mobile-Platform-test\\\" build number 40\",
        \"triggerType\":\"upstream\",
        \"upstreamTaskExecutionURL\":\"https://jenkins.mycompany.com:8080/job/Mobile-Platform-test/40/\"}
    }"

    Corps de la réponse.

    {
    "result": {
       "changeControl": true,
       "status": "Success"
       }
    }

    Demande cURL

    Cet exemple montre comment transmettre des champs dans l’objet lors de la fermeture d’une changeRequestDetails demande de changement.

    curl -X POST "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/changeControl?toolId=f0ca45679323008b52f3b457415ae6&toolType=jenkins"
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{
      "callbackURL":"http://192.168.0.4:3000/jenkins/sn-devops/pipeline_839b7605-b98d-4831-bc87-96829de7da37",
      "orchestrationTaskURL":"http://192.168.0.4:3000/jenkins/job/java_sample_tests#deploy/",
      "isMultiBranch":"false",
      "orchestrationTaskName":"java_sample_tests#deploy",
      "orchestrationTaskDetails":{
        "triggerType":"upstream",
        "upstreamTaskExecutionURL":"http://192.168.0.4:3000/jenkins/job/java_sample_tests/129/execution/node/35/wfapi/describe",
        "taskExecutionURL":"http://192.168.0.4:3000/jenkins/job/java_sample_tests/129/execution/node/50/wfapi/describe"
      },
      "changeRequestDetails":{
        "setCloseCode":false,
        "attributes":{
          "sys_created_by":"1832fbe1d701120035ae23c7ce610369",
          "sys_updated_by":"56826bf03710200044e0bfc8bcbe5dca",
          "requested_by":{
             "name":"test user1"
          },
          "watch_list":[
            {
              "name":"test user1"
            },
            {
              "name":"test user2"
            },
            {
              "name":"Alejandra Prenatt"
            },
              "56826bf03710200044e0bfc8bcbe5dca"
          ],
          "work_notes_list":[
            "56826bf03710200044e0bfc8bcbe5dca",
            "46c6f9efa9fe198101ddf5eed9adf6e7",
            "d8f57f140b20220050192f15d6673a98"
          ],
          "assigned_to":"1832fbe1d701120035ae23c7ce610369",
          "category":"Service",
          "sys_created_on":"2021-02-09 18:58:41",
          "priority":"2",
        }
      }
    }"

    Corps de la réponse.

    {
    "result": {
       "changeControl": true,
       "status": "Success"
       }
    }

    DevOps : POST /devops/orchestration/stepMapping

    Vérifie que les informations transmises sont valides pour la création d’une tâche d’orchestration et sont valides pour l’association à une étape précédemment créée. Si les deux sont valides, il crée la tâche d’orchestration et effectue l’association.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/orchestration/stepMapping

    URL par défaut : /api/sn_devops/devops/orchestration/stepMapping

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 67. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 68. Paramètres de requête
    Nom Description
    toolId Requis. Sys_id de l’outil d’orchestration. Situé dans la table Outil d’orchestration [sn_devops_orchestration_tool].

    Type de données : chaîne

    toolType Requis. Type d’outil.

    Valeurs valides : Jenkins

    Type de données : chaîne

    Tableau 69. Paramètres du corps de la demande
    Nom Description
    branchName Nom de la branche associée à la tâche d’orchestration.

    Type de données : chaîne

    isMultiBranch Si l’outil d’orchestration est Jenkins, marqueur indiquant si le projet est de type Multibranche.
    Valeurs valides :
    • true : le projet est de type Multibranche.
    • faux : le projet n’est pas de type Multibranche.

    Type de données : booléennes

    Valeur par défaut : false

    Nœud parent Si la tâche d’orchestration est un enfant imbriqué à l’intérieur d’une tâche d’orchestration parente, cette valeur contient les détails du nœud parent.

    Type de données : objet

    "parentNode": {
      "id": "String",
      "name": "String",
      "upstreamStageName": "String",
      "upstreamTaskExecutionURL": "String"
    }
    parentNode.id ID unique pour le nœud parent.

    Dans Jenkins, cette valeur correspond à un ID d’étape de pipeline.

    Type de données : chaîne
    parentNode.name Nom du nœud parent.

    Dans Jenkins, cette valeur correspond à un nom d’étape de pipeline.

    Type de données : chaîne
    parentNode.upstreamStageName Nom de la tâche d’orchestration en amont du nœud parent.

    Dans Jenkins, cette valeur correspond à un nom d’étape de pipeline.

    Type de données : chaîne
    parentNode.upstreamTaskExecutionURL URL de l’exécution de la tâche en amont du nœud parent.

    Dans Jenkins, cette valeur correspond à une URL d’exécution d’étape de pipeline.

    Type de données : chaîne
    parentStageName Si la tâche d’orchestration est un enfant imbriqué à l’intérieur d’une tâche d’orchestration parente, le nom de la tâche d’orchestration parente.

    Type de données : chaîne

    parentStageURL Si la tâche d’orchestration est un enfant imbriqué à l’intérieur d’une tâche d’orchestration parente, l’URL de la tâche d’orchestration parente.

    Type de données : chaîne

    Nom de la tâche d’orchestration Requis. Nom de la tâche d’orchestration. Il s’agit de la même tâche référencée dans le orchestrationTaskURL.

    Type de données : chaîne

    orchestrationTaskURL Requis. URL de la tâche d’orchestration.

    Par exemple : https://jenkins.mycompany.com:8080/orchestration_task/Mobile-Platform-deploy/

    Type de données : chaîne

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 70. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Autorisation
    À partir de la version v2, cette API prend en charge l’authentification basée sur les jetons. Les jetons peuvent être acquis en cliquant sur le bouton Copier le jeton sur l’enregistrement de l’outil, situé dans la table Outil [sn_devops_tool]. Le jeton peut ensuite être utilisé dans un en-tête d’autorisation au format Autorisation : sn_devops. DevOpsToken <tool_sys_id> :<tool_token>.
    Remarque :
    Si les détails de l’authentification de base (nom d’utilisateur et mot de passe) sont fournis en plus d’un en-tête d’autorisation avec jeton, l’authentification de base a priorité.

    Si l’utilisateur devops.system n’est pas disponible dans votre instance, utilisez la propriété Basculer vers cet utilisateur une fois l’authentification basée sur le jeton réussie . Cette propriété permet de définir n’importe quel utilisateur disposant du rôle sn_devops.integration, qui est nécessaire pour terminer l’authentification par jeton. (pour en savoir plus, consultez DevOps Change Velocity properties) ;

    Type de contenu Format des données du corps de la demande. Prend uniquement en charge application/json.
    Tableau 71. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 72. Codes d'état
    Code d'état Description
    201 Réussi. La demande a été traitée avec succès.
    400 Demande incorrecte. Un type de demande incorrecte ou mal formé a été détecté.
    401 Non autorisé. Les informations d’identification de l’utilisateur sont incorrectes ou n’ont pas été transmises.
    500 Erreur interne du serveur. Une erreur inattendue s’est produite lors du traitement de la demande. La réponse contient des informations supplémentaires sur l’erreur.

    Paramètres du corps de réponse

    Élément Description
    statut Marqueur indiquant si la vérification a réussi.
    Valeurs valides :
    • vrai : la vérification a réussi.
    • faux : la vérification a échoué.

    Type de données : booléennes

    stepValide Marqueur indiquant si les informations envoyées sont valides.
    Valeurs valides :
    • vrai : les informations envoyées sont valides.
    • faux : les informations envoyées ne sont pas valides.

    Type de données : booléennes

    Exemple de demande cURL

    curl -X POST "https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/stepMapping?toolId=f0ca45679323008b52f3b457415ae6&toolType=jenkins"
    -H "Accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{
      \"orchestrationTaskURL\":\" http://127.0.0.1:8090/jenkins/job/CorpSite/job/primary#deploy PROD/\",
      \"orchestrationTaskName\":\" primary#deploy PROD\"
    }"

    Résultats si l’information est valide.

    {
      "result": {
        "stepValid": true,
        "status": "Success"
      }
    }

    Résultats si les informations ne sont pas valides.

    {
      "result": {
        "stepValid": false,
        "status": "Success"
      }
    }

    DevOps : POST /devops/package/registration

    Active les outils d’orchestration pour créer de nouveaux packages d’artefacts contenant des versions d’artefacts spécifiées.

    Les packages d’artefacts permettent d’afficher les validations aux approbateurs de changement lorsqu’ils consultent une demande de changement. Pour que les validations s’affichent dans les demandes de changement, le package doit être créé à l’étape précédant l’étape contenant l’approbation du changement.

    Toutes les versions d’artefacts incluses dans la demande d’enregistrement du package doivent déjà être enregistrées auprès de DevOps. Pour plus de détails sur l’enregistrement des versions d’artefacts, reportez-vous à la section DevOps : POST /devops/artifact/registration.

    En règle générale, vous transmettrez les paramètres et artifacts.name lors de l’identification d’une version d’artefact artifacts.version à inclure dans un package. Vous pouvez également utiliser les fonctionnalités avancées de ce point de terminaison qui vous permet de transmettre les détails de la version pour chaque version d’artefact au lieu de la version elle-même. Les détails de version spécifiques à l’artefact incluent les paramètres suivants :
    • artifacts.pipelineName ou artifacts.projectName
    • artifacts.taskExecutionNumber
    • artifacts.stageName
    • artifacts.branchName
    Le point de terminaison utilise ces détails de version spécifiques à l’artefact pour rechercher des informations sur l’exécution des tâches, puis copie les versions associées dans le package. Il utilise des détails de version non spécifiques à l’artefact (pipelineName ou projectName, taskExecutionNumber, branchName, et stageName) pour associer le package créé à une exécution de pipeline.
    Remarque :
    Ce point de terminaison ne prend pas en charge les mises à jour. Il crée toujours un nouveau paquet, même s’il en existe déjà un portant le même nom.

    Pour plus d’informations sur les packages d’artefacts, consultez Utilisation de l’accélération du changement DevOps pour les mises en production.

    Format d'URL

    URL avec version : /api/sn_devops/{api_version}/devops/package/registration

    URL par défaut : /api/sn_devops/devops/package/registration

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 73. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 74. Paramètres de requête
    Nom Description
    orchestrationToolId Requis. Sys_id de l’outil d’orchestration associé au package d’artefact. Le point de terminaison utilise ces informations pour localiser les informations d’exécution des tâches.

    Type de données : chaîne

    Table : Outil d’orchestration [sn_devops_orchestration_tool]

    toolId Sys_id de l’outil d’artefact associé au package d’artefact.

    Type de données : chaîne

    Table : Outil d’artefact [sn_devops_artifact_tool]

    Tableau 75. Paramètres du corps de la demande
    Nom Description
    Artefacts Au moins une entrée requise. Tableau d’objets dans lequel chaque objet identifie de manière unique une version d’artefact à inclure dans le package.

    Type de données : tableau d’objets

    "artifacts": [
    {
      "branchName": "String",
      "name": "String",
      "pipelineName": "String",
      "projectName": "String",
      "repositoryName": "String",
      "stageName": "String",
      "taskExecutionNumber": "String",
      "version": "String"
    ]
    artefacts.nom_branche Requis si artifact.version n’est pas validé et s’il s’agit d’une configuration à plusieurs branches. Nom de la branche dans laquelle les versions d’artefacts sont stockées.

    Type de données : chaîne

    Longueur maximale : 160

    Valeur par défaut : nul

    artifacts.name Requis. Nom du fichier d’artefact.

    Type de données : chaîne

    Longueur maximale : 160 caractères

    artefacts.pipelineName Requis si et artifact.versionartifacts.projectName ne sont pas transmis. Nom du pipeline.

    Type de données : chaîne

    Longueur maximale : 160

    Valeur par défaut : nul

    artefacts.nom.projet Requis si et artifact.versionartifact.pipelineName ne sont pas transmis. Nom de projet de forme libre.

    Type de données : chaîne

    Longueur maximale : 160

    Valeur par défaut : nul

    artefacts.nomréférentiel Requis. Nom du référentiel de l’artefact.

    Type de données : chaîne

    Longueur maximale : 160 caractères

    artefacts.nométape Requis si artifact.version non transmis. Nom de l’étape.

    Type de données : chaîne

    Longueur maximale : 160

    Valeur par défaut : nul

    artefacts.taskExecutionNumber Requis si artifact.version non transmis. Numéro d’exécution du pipeline.

    Type de données : chaîne

    Valeur par défaut : nul

    artefact.version Requis si les détails de la version ne sont pas fournis. Version des artefacts.

    Type de données : chaîne

    Format : <Majeure>.<Mineure>

    Valeur par défaut : nul

    branchName Requis s’il s’agit d’un projet multibranche. Nom de la branche dans le référentiel où les artefacts sont stockés.

    Type de données : chaîne

    Longueur maximale : 200 caractères

    Valeur par défaut : nul

    nom Requis. Nom du package.

    Type de données : chaîne

    Longueur maximale : 160 caractères

    pipelineName Requis si projectName non transmis. Nom du pipeline.

    Type de données : chaîne

    Longueur maximale : 160 caractères

    Valeur par défaut : nul

    projectName Requis si pipelineName non transmis. Nom de projet de forme libre.

    Type de données : chaîne

    Longueur maximale : 160

    Valeur par défaut : nul

    stageName Requis si pipelineName est réussi. Nom de l’étape.

    Type de données : chaîne

    Longueur maximale : 160 caractères

    Valeur par défaut : nul

    taskExecutionNumber Requis. Numéro d’exécution du pipeline.

    Type de données : chaîne

    Longueur maximale : 128 caractères

    Valeur par défaut : nul

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 76. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Autorisation
    À partir de la version v2, cette API prend en charge l’authentification basée sur les jetons. Les jetons peuvent être acquis en cliquant sur le bouton Copier le jeton sur l’enregistrement de l’outil, situé dans la table Outil [sn_devops_tool]. Le jeton peut ensuite être utilisé dans un en-tête d’autorisation au format Autorisation : sn_devops. DevOpsToken <tool_sys_id> :<tool_token>.
    Remarque :
    Si les détails de l’authentification de base (nom d’utilisateur et mot de passe) sont fournis en plus d’un en-tête d’autorisation avec jeton, l’authentification de base a priorité.

    Si l’utilisateur devops.system n’est pas disponible dans votre instance, utilisez la propriété Basculer vers cet utilisateur une fois l’authentification basée sur le jeton réussie . Cette propriété permet de définir n’importe quel utilisateur disposant du rôle sn_devops.integration, qui est nécessaire pour terminer l’authentification par jeton. (pour en savoir plus, consultez DevOps Change Velocity properties) ;

    Type de contenu Format des données du corps de la demande. Prend uniquement en charge application/json.
    Tableau 77. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 78. Codes d'état
    Code d'état Description
    200 Réussite. Réussite avec le corps de la réponse.
    201 Créé. Réussite avec le corps de la réponse.
    400 Demande incorrecte. L’URI de demande ne correspond pas aux API du système ou l’opération a échoué pour des raisons inconnues. Des en-têtes non valides peuvent également provoquer cette erreur.
    500 Erreur interne du serveur. Une erreur inattendue s’est produite lors du traitement de la demande. La réponse contient des informations supplémentaires sur l’erreur.

    Paramètres du corps de réponse

    Nom Description
    réponse Résultats de la demande d’enregistrement du package.

    Type de données : objet

    "response": {
      "artifact_register_requests": {Object},
      "sn_devops_m2m_artifact_version_package": {Object},
      "sn_devops_package": {Object}
    }
    response.artifact_register_requests Résultats de toutes les demandes de registre dont le traitement n’est pas terminé et qui ont été stockés dans la table Demande intermédiaire d’artefact [sn_devops_artifact_staging].

    Type de données : objet

    "artifact_register_requests": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.artifact_register_requests.créer Si la demande a créé des enregistrements intermédiaires de package, la liste des sys_ids des enregistrements intermédiaires créés.

    Type de données : tableau d’objets

    "create": [
      {
        "id": "String"
      }
    ]
    response.artifact_register_requests.create.id Sys_id de l’enregistrement intermédiaire du package créé par la demande.

    Type de données : chaîne

    response.artifact_register_requests.trouvé Si les enregistrements intermédiaires de package associés existent déjà, la liste des sys_ids des enregistrements existants.
    Remarque :
    Aucune modification n’est apportée aux packages existants.

    Type de données : tableau d’objets

    "found": [
      {
        "id": "String"
      }
    ]
    response.artifact_register_requests.trouvé.id Sys_id d’un enregistrement intermédiaire de package existant.

    Type de données : chaîne

    response.artifact_register_requests.mise à jour Actuellement inutilisé.
    response.artifact_register_requests.update.id Actuellement inutilisé.
    response.sn_devops_m2m_artifact_version_package Résultats pour chaque version d’artefact associée à un package.

    Type de données : objet

    "sn_devops_m2m_artifact_version_package": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.sn_devops_m2m_artifact_version_package.créer Si la demande a créé des enregistrements liant les versions d’artefacts aux packages, la liste des sys_ids des enregistrements créés.

    Type de données : tableau d’objets

    "create": [
      {
        "id": "String"
      }
    ]

    Table : Version d’artefact à Package [sn_devops_m2m_artifact_version_package]

    response.sn_devops_m2m_artifact_version_package.create.id Sys_id de la version de l’artefact à l’enregistrement de package créé par la demande.

    Type de données : chaîne

    response.sn_devops_m2m_artifact_version_package.trouvé Si un enregistrement de liaison existe déjà dans la table Version d’artefacts à Package, la liste des sys_ids des enregistrements de liaison existants.
    Remarque :
    Aucune modification n’est apportée aux enregistrements existants.

    Type de données : tableau d’objets

    "found": [
      {
        "id": "String"
      }
    ]
    response.sn_devops_m2m_artifact_version_package.trouvé.id Sys_id de la version de l’artefact existante vers l’enregistrement de package.

    Type de données : chaîne

    response.sn_devops_m2m_artifact_version_package.mettre à jour

    Actuellement inutilisé.

    response.sn_devops_m2m_artifact_version_package.update.id

    Actuellement inutilisé.

    response.sn_devops_package Résultats pour tous les enregistrements de package de la table Packages [sn_devops_package] qui ont été manipulés pendant le traitement de la demande.

    Type de données : objet

    "sn_devops_package": {
      "create": [Array],
      "found": [Array],
      "update": [Array]
    }
    response.sn_devops_package.créer Si des enregistrements de package ont été créés par la demande, la liste des sys_ids des enregistrements créés.

    Type de données : tableau d’objets

    "create": [
      {
        "id": "String"
      }
    ]
    response.sn_devops_package.create.id Sys_id de l’enregistrement de package créé par la demande.

    Type de données : chaîne

    response.sn_devops_package.trouvé Si des enregistrements de package utilisés dans la demande de registre existent déjà, la liste des sys_ids des enregistrements existants.
    Remarque :
    Aucune modification n’est apportée aux enregistrements existants.

    Type de données : tableau d’objets

    "found": [
      {
        "id": "String"
      }
    ]
    response.sn_devops_package.trouvé.id Sys_id d’un enregistrement de package existant référencé par la demande.

    Type de données : chaîne

    response.sn_devops_package.Mettre à jour Actuellement inutilisé.
    response.sn_devops_package.update.id Actuellement inutilisé.
    statut État de la demande d’inscription.
    Valeurs possibles :
    • Erreur : le corps de la réponse contient une liste de toutes les erreurs.
    • Réussite : le corps de la réponse contient les résultats de retour.

    Type de données : chaîne

    Exemple de demande cURL

    # Example passing the artifact version
    curl -X POST "https://instance.servicenow.com/api/sn_devops/devops/package/registration?toolId=f0ca45679323008b52f3b457415ae6"\
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{\
    "name": "sentimentpackage",\
    "artifacts": [\
    {\
    "name": "sa-web.jar",\
    "repositoryName": "services-1031",\
    "version": "3.1"\
    },\
    {\
    "name": "sa-frontend.jar",\
    "repositoryName": "services-1031",\
    "version": "9.2"\
    }\
    ],\
    "pipelineName": "spring-boot-app",\
    "taskExecutionNumber": "160",\
    "stageName": "Build",\
    "branchName": "primary"\
    }"

    Réponse : package créé :

    "result": {
    "status": "Success",
    "response": {
      "sn_devops_package": {
        "create": [
            {
              "id": "0d57367a532e00107109ddeeff7b122a"
            } 
          ],
        "update": [],
        "found": []
      },
      "sn_devops_m2m_artifact_version_package": {
        "create": [
          {
            "id": "c957367a532e00107109ddeeff7b122b"
          },
          {
            "id": "8157367a532e00107109ddeeff7b122c"
          }
        ],
        "update": [],
        "found": []
        }
      },
      "responseCode": 201
      }
    }

    Exemple de demande cURL

    # Example passing the build details
    curl -X POST "https://instance.servicenow.com/api/sn_devops/devops/package/registration?toolId=f0ca45679323008b52f3b457415ae6"
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{\
    "name": "sentimentpackage",\
    "artifacts": [\
    {\
    "name": "sa-web.jar",\
    "repositoryName": "services-1031",\
    "pipelineName": "spring-boot-app",\
    "taskExecutionNumber": "160",\
    "stageName": "Build",\
    "branchName": "primary"\
    },\
    {\
    "name": "sa-frontend.jar",\
    "repositoryName": "services-1031",\
    "pipelineName": "spring-boot-fe",\
    "taskExecutionNumber": "991",\
    "stageName": "Build",\
    "branchName": "primary"\
    }\
    ],\
    "pipelineName": "spring-boot-app",\
    "taskExecutionNumber": "160",\
    "stageName": "Build",\
    "branchName": "primary"\
    }"

    Réponse : la demande a créé un package intermédiaire :

    {
    "result": {
      "status": "Success",
      "response": {
        "artifact_register_requests": {
          "create": [
            { 
              "id": "4628f276532e00107109ddeeff7b1245"
            },
            {
              "id": "4e28f276532e00107109ddeeff7b1245"
            },
            {
              "id": "ce28f276532e00107109ddeeff7b1245"
            }
          ],
          "update": [],
          "found": []
        }
      }, 
      "responseCode": 201 
     }
    }

    DevOps - POST /devops/outil/{fonctionnalité}

    Publie la charge utile transmise à la table Événements entrants [sn_devops_inbound] pour traitement par un flux secondaire personnalisé DevOps .

    Appelez ce point de terminaison à partir du webhook associé dans votre outil, spécifié par le paramètre transmis capability . Un flux secondaire personnalisé, pour traiter la charge utile transmise, doit déjà être défini dans votre ServiceNow instance. Selon un calendrier prédéfini, le DevOps flux principal récupère les informations sur l’événement webhook dans la table Événement entrant et les transmet au flux secondaire personnalisé, qui traite ensuite la charge utile. Pour plus d’informations sur la création d’un flux secondaire personnalisé, consultez Création de flux secondaires DevOps.

    Pour plus d’informations sur l’intégration des outils de test, consultez Intégration des outils de test DevOps.

    Avant d’appeler ce point de terminaison pour un outil personnalisé DevOps , vous devez implémenter les méthodes handleTool() et getNativeIdForOrchestrationTask() à partir de sn_devops. DevOpsOrchestrationToolIntegrationHandler. Pour plus d’informations, consultez DevOpsOrchestrationToolIntegrationHandler : délimitéDevOpsOrchestrationToolIntegrationHandler : champ d’application.

    Remarque :
    À partir de la version 1.34.1, une nouvelle version de cette API a été introduite. Avec cette API, les politiques d’authentification adaptative peuvent ne pas s’exécuter comme prévu. Pour en savoir plus sur ces stratégies, reportez-vous à la section Adaptive authentication.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/tool/{capability}

    URL par défaut : /api/sn_devops/devops/tool/{capability}

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 79. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    aptitude Type d’outil transmettant la charge utile à stocker dans la table des événements entrants.
    Valeurs valides (insensibles à la casse) :
    • Artefact
    • code
    • Orchestration
    • plan
    • test

    Type de données : chaîne

    Tableau 80. Paramètres de requête
    Nom Description
    orchestrationToolId Facultatif. Sys_id de l’outil d’orchestration auquel le pipeline connexe appartient. orchestrationToolId est requis si le paramètre de capability demande est défini sur test ou softwareQuality.

    La valeur du toolId paramètre est l’outil d’orchestration par défaut si le orchestrationToolId paramètre n’est pas transmis.

    Type de données : chaîne

    Type de test Requis si capability est défini sur test. Type de test en cours d’exécution.

    Type de données : chaîne

    Table : les valeurs valides pour ce paramètre sont celles de la colonne Type de test de la table Types de test [sn_devops_test_type].

    toolId Requis. Sys_id de l’outil pour lequel le point de terminaison est appelé.

    Type de données : chaîne

    Tableau 81. Paramètres du corps de la demande
    Nom Description
    Dépendant de l’outil L’outil détermine le contenu de la charge utile.

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 82. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Autorisation
    À partir de la version v2, cette API prend en charge l’authentification basée sur les jetons. Les jetons peuvent être acquis en cliquant sur le bouton Copier le jeton sur l’enregistrement de l’outil, situé dans la table Outil [sn_devops_tool]. Le jeton peut ensuite être utilisé dans un en-tête d’autorisation au format Autorisation : sn_devops. DevOpsToken <tool_sys_id> :<tool_token>.
    Remarque :
    Si les détails de l’authentification de base (nom d’utilisateur et mot de passe) sont fournis en plus d’un en-tête d’autorisation avec jeton, l’authentification de base a priorité.

    Si l’utilisateur devops.system n’est pas disponible dans votre instance, utilisez la propriété Basculer vers cet utilisateur une fois l’authentification basée sur le jeton réussie . Cette propriété permet de définir n’importe quel utilisateur disposant du rôle sn_devops.integration, qui est nécessaire pour terminer l’authentification par jeton. (pour en savoir plus, consultez DevOps Change Velocity properties) ;

    Type de contenu Format des données du corps de la demande. Prend uniquement en charge application/json.
    Tableau 83. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 84. Codes d'état
    Code d'état Description
    201 Demande terminée avec succès.
    400 Demande incorrecte. Un type de demande incorrecte ou mal formé a été détecté.
    401 Authentification non valide ou manquante.
    500 Erreur interne du serveur. Une erreur logique s’est produite sur le code côté serveur.

    Paramètres du corps de réponse

    Nom Description
    Détails Entrée pour toutes les conditions d’erreur.

    Type de données : objet

    "details": {
      "errors": [Array]
    }
    détails.erreurs Description d’une erreur unique.

    Type de données : tableau d’objets

    "errors": [
      {
        "message": "String"
      }
    ]
    Détails.Erreurs.Message Message d’erreur détaillé.
    • La demande n’a pas de paramètres de chemin d’accès : aucun paramètre de chemin d’accès n’est inclus dans l’appel.
    • La demande n’a pas de paramètre de chemin d’aptitude : le paramètre de chemin d’accès d’aptitude n’a pas été inclus dans l’appel.
    • Type d’aptitude non pris en charge : le paramètre d’aptitude spécifié n’est pas une valeur valide.

    Type de données : chaîne

    statut État de la réponse tel que « Réussite » ou « Erreur de données ».

    Type de données : chaîne

    sys_id Sys_id de l’enregistrement créé dans la table Événement entrant.

    Type de données : chaîne

    Exemple de demande cURL pour l’artefact

    curl -X POST "https://instance.service-now.com/api/sn_devops/v1/tool/artifact?toolId=3b59043ee4ea556e6850d61bc1a77e8a" 
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{
       "artifacts": [
          {
             "name": "sp-boot-app",
             "version": "1.320",
             "semanticVersion": "1.320.0",
             "repositoryName": "sp-boot-app-repo"
          }
       ],
       "pipelineName": "spring-boot-app-gitea",
       "taskExecutionNumber": "320",
       "stageName": "Build"
    }"

    Réponse de réussite :

    {
       "result": {
          "status": "Success",
          "sysId": "33c57245dbf68410bc8cdd384b961966"
       }
    }

    Exemple de demande cURL pour l’artefact

    curl -X POST "https://instance.service-now.com/api/sn_devops/v1/tool/artifact?toolId=3b59043ee4ea556e6850d61bc1a77e8a" 
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\ 
    -d "{\
       "timestamp": "2020-01-11T00:52:01.541+0000",\
       "nodeId": "137BEECF-E1BF7BC1-90212D1C-0749A6D4-BC670F6B",\
       "initiator": "admin/172.17.0.1",\
       "repositoryName": "maven-releases29",\
       "action": "CREATED",\
       "component": {\
          "id": "2a59043ed2ea556e6850d61bc1a77c7b",\
          "componentId": "c3AtYm9vdC1hcHAtcmVwbzoyYTU5MDQzZWQyZWE1NTZlNjg1MGQ2MWJjMWE3N2M3Yg",\
          "format": "maven2",\
          "name": "sentiment-analysis-web",\
          "group": "com.spboot",\
          "version": "1.1"\
       }\
    }"

    Réponse d’erreur :

    {
       "result": {
          "status": "Data Error",
          "details": {
             "errors": [
                {
                   "message": "Unsupported capability type"
                }
             ]
          }
       }
    }

    Exemple de demande cURL pour le code

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/code?toolId=8d4f56598702c510f894419d0ebb35aa&testType=junit" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "commits": [
          {
             "totalFiles": 1,
             "nativeIdList": [
                "49",
                "50"
             ],
             "id": "f14732d0cc854ce3ec374b97ecd4ec3c383386cd",
             "url": "https://dev.azure.com/xyzabcd/adoTests/_git/DeployableRepo/commit/f14732d0cc854ce3ec374b97ecd4ec3c383386cd",
             "apiURL": "https://dev.azure.com/xyzabcd/9fe32a65-60a5-46fe-bc8d-11a92bf059f9/_apis/git/repositories/8d7ba019-1739-431c-beb4-6025dd41f1ac/commits/f14732d0cc854ce3ec374b97ecd4ec3c383386cd",
             "message": "Fixes #49 and #50",
             "committedDate": "2022-03-23T11:59:46Z",
             "committer": {
                "email": "xyz.abcd@email.com"
             },
             "details": [
                {
                   "action": "edit",
                   "changes": "",
                   "file": "/LICENSE",
                   "additions": 0,
                   "deletions": 0,
                   "totalChanges": 0
                }
             ]
          }
       ],
       "repository": {
          "id": "8d7ba019-1739-431c-beb4-6025dd41f1ac",
          "name": "DeployableRepo",
          "url": "https://dev.azure.com/xyzabcd/adoTests/_git/DeployableRepo"
       },
       "branch": {
          "name": "refs/heads/master",
          "url": "https://dev.azure.com/xyzabcd/adoTests/_git/DeployableRepo?version=GBmaster"
       }
    }" \
    --user 'username':'passsword'
    

    Réponse de réussite :

    {
       "result": {
          "status": "Success",
          "sysId: "1f8e586b879e85100f71cbfc0ebb3526"
       }
    }

    Exemple de demande cURL pour l’orchestration

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/orchestration?toolId=8d4f56598702c510f894419d0ebb35aa&testType=junit" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
      "toolId": "d450f5c887e609100f71cbfc0ebb35e5",
      "buildNumber": 5676,
      "nativeId": "adoTests/DeployableRepo#deploy#5676",
      "pipelineId": "2",
      "name": "adoTests/DeployableRepo#deploy",
      "id": "adoTests/DeployableRepo#deploy#5676",
      "url": "https://dev.azure.com/xyzabcd/_build/results?buildId=5676#deploy/",
      "previousAttemptUrl": "",
      "attemptNumber": 1,
      "pipelineExecutionUrl": "https://dev.azure.com/xyzabcd/_build/results?buildId=5676",
      "orchestrationTaskUrl": "https://dev.azure.com/xyzabcd/adoTests/_build?name=DeployableRepo#deploy",
      "orchestrationTaskName": "adoTests/DeployableRepo #deploy",
      "orchestrationTask": {
        "orchestrationTaskName": "adoTests/DeployableRepo#deploy",
        "toolId": "d450f5c887e609100f71cbfc0ebb35e5",
        "orchestrationTaskURL": "https://dev.azure.com/xyzabcd/adoTests/_build?name=DeployableRepo#deploy",
        "stageName": "deploy"
      },
      "upstreamTaskUrl": [],
      "result": "building",
      "startDateTime": "2022-03-23 12:01:31",
      "log": "https://dev.azure.com/xyzabcd/adoTests/_build/results?buildId=5676&view=logs&j=5264e576-3c6f-51f6-f055-fab409685f20",
      "logUrl": "https://dev.azure.com/xyzabcd/adoTests/_build/results?buildId=5676&view=logs&j=5264e576-3c6f-51f6-f055-fab409685f20"
    }" \
    --user 'username':'password'
    

    Réponse de réussite :

    {
       "result": {
          "status": "Success",
          "sysId: "37dfd8a7879e85100f71cbfc0ebb35c0"
       }
    }

    Exemple de demande cURL pour le plan

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/plan?toolId=8d4f56598702c510f894419d0ebb35aa&testType=junit" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "id": "1053",
       "type": "bug",
       "state": "planned",
       "shortDescription": "Title - Work Item test in 1.33.3",
       "createdDateTime": "2022-03-23T10:45:53.02Z",
       "parentId": "",
       "url": "https://dev.azure.com/xyzabcd/9fe32a65-60a5-46fe-bc8d-11a92bf059f9/_workitems/edit/1053",
       "version": {
          "id": "adoTests",
          "shortDescription": "adoTests",
          "createdDateTime": "2022-03-23T10:46:12.355Z",
          "url": "https://dev.azure.com/xyzabcd/adoTests",
          "app": {
             "id": "adoTests",
             "shortDescription": "adoTests",
             "createdDateTime": "2022-03-23T10:46:12.355Z",
             "url": "https://dev.azure.com/xyzabcd/9fe32a65-60a5-46fe-bc8d-11a92bf059f9/_workitems/edit/1053"
          }
       },
       "app": {
          "id": "adoTests",
          "shortDescription": "adoTests",
          "createdDateTime": "2022-03-23T10:46:12.355Z",
          "url": "https://dev.azure.com/xyzabcd/adoTests"
       },
       "native_type": "Issue",
       "native_state": "To Do",
       "assignedTo": {
          "name": "Xyz Abcd",
          "userName": "xyz.abcd@email.com",
          "id": "84c92fcd-e08b-6a5f-a8a6-ccda27055560",
          "email": "xyz.abcd@email.com"
       },
       "createdBy": {
          "name": "Xyz Abcd",
          "userName": "xyz.abcd@email.com",
          "id": "84c92fcd-e08b-6a5f-a8a6-ccda27055560",
          "email": "xyz.abcd@email.com"
       }
    }" \
    --user 'username':'password'
    

    Réponse de réussite :

    {
       "result": {
          "status": "Success",
          "sysId: "533020eb879e85100f71cbfc0ebb3591"
       }
    }

    Exemple de demande cURL pour le test

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/test?toolId=8d4f56598702c510f894419d0ebb35aa&testType=junit" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "attemptNumber": 1,
       "blockedTests": 0,
       "buildNumber": 675,
       "duration": 0.079,
       "failedTests": 0,
       "finishTime": "2022-03-23T12:02:25.957Z",
       "name": "adoTests/DeployableRepo/Test #675-2982",
       "passedTests": 20,
       "pipelineName": "adoTests/DeployableRepo",
       "skippedTests": 0,
       "stageName": "Test",
       "startTime": "2022-03-23T12:02:24.36Z",
       "taskExecutionUrl": "https://dev.azure.com/xyzabcd/adoTests/_build/results?buildId=675#Test/{Job name}",
       "totalTests": 20,
       "url": "https://dev.azure.com/xyzabcd/adoTests/_TestManagement/Runs?runId=2982&_a=runCharts"
    }" \
    --user 'username':'password'
    

    Réponse de réussite :

    {
       "result": {
          "status": "Success",
          "sysId: "fd3fdc6b879e85100f71cbfc0ebb356a"
       }
    }

    DevOps - POST /devops/outil/événement/{sn_tool_id}

    Publie la charge utile transmise à partir de GitHub, Jira ou Bitbucket dans la table Événements [sn_devops_event] pour traitement par un flux secondaire prédéfini.

    Avant d’appeler ce point de terminaison, vous devez créer une intégration avec l’outil que vous utilisez.

    Pour traiter les événements à partir d’un outil autre que GitHub, Jira ou Bitbucket, utilisez plutôt le point de DevOps - POST /devops/outil/{fonctionnalité} terminaison.

    Remarque :
    À partir de la version 1.34.1, une nouvelle version de cette API a été introduite. Avec cette API, les politiques d’authentification adaptative peuvent ne pas s’exécuter comme prévu. Pour en savoir plus sur ces stratégies, reportez-vous à la section Adaptive authentication.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/tool/event/{sn_tool_id}

    URL par défaut : /api/sn_devops/devops/tool/event/{sn_tool_id}

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 85. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    sn_tool_id Sys_id de l’outil à utiliser pour la demande.

    Type de données : chaîne

    Table : outils DevOps [sn_devops_tool]

    Tableau 86. Paramètres de requête
    Nom Description
    Néant
    Tableau 87. Paramètres du corps de la demande
    Nom Description
    Dépendant de l’outil L’outil détermine le contenu de la charge utile. La charge utile peut être située dans l’outil sous les informations du webhook.

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 88. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Autorisation
    À partir de la version v2, cette API prend en charge l’authentification basée sur les jetons. Les jetons peuvent être acquis en cliquant sur le bouton Copier le jeton sur l’enregistrement de l’outil, situé dans la table Outil [sn_devops_tool]. Le jeton peut ensuite être utilisé dans un en-tête d’autorisation au format Autorisation : sn_devops. DevOpsToken <tool_sys_id> :<tool_token>.
    Remarque :
    Si les détails de l’authentification de base (nom d’utilisateur et mot de passe) sont fournis en plus d’un en-tête d’autorisation avec jeton, l’authentification de base a priorité.

    Si l’utilisateur devops.system n’est pas disponible dans votre instance, utilisez la propriété Basculer vers cet utilisateur une fois l’authentification basée sur le jeton réussie . Cette propriété permet de définir n’importe quel utilisateur disposant du rôle sn_devops.integration, qui est nécessaire pour terminer l’authentification par jeton. (pour en savoir plus, consultez DevOps Change Velocity properties) ;

    Type de contenu Format des données du corps de la demande. Prend uniquement en charge application/json.
    Tableau 89. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 90. Codes d'état
    Code d'état Description
    200 Réussi. La demande a été traitée avec succès.
    201 Demande terminée avec succès.
    400 Demande incorrecte. Un type de demande incorrecte ou mal formé a été détecté.
    401 Authentification non valide ou manquante.
    500 Erreur interne du serveur. Une erreur logique s’est produite sur le code côté serveur.

    Paramètres du corps de réponse

    Nom Description
    résultat État de la réponse.
    Valeurs possibles :
    • échec : ID d’outil incorrect. Événement non créé.
    • réussite : événement créé dans la table Événements [sn_devops_event]. Toutefois, l’état de l’événement peut être Erreur si une charge utile incorrecte a été fournie.

    Type de données : chaîne

    Demande cURL

    GitHub

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/event/46a07b2f471e011028c23a34846d43b2" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "ref": "refs/heads/master",
       "before": "59078a17cad1f4129754971c808d6c399b6141a5",
       "after": "b7957bab20835449c4d597fee24075a9a5a2c099",
       "repository": {
          "id": 252146476,
          "node_id": "MDEwOlJlcG9zaXRvcnkyNTIxNDY0NzY=",
          "name": "test",
          "full_name": "Xyz002/test",
          "private": false,
          "owner": {
             "name": "Xyz002",
             "email": "62993516+Xyz002@users.noreply.github.com",
             "login": "Xyz002",
             "id": 62993516,
             "node_id": "MDQ6VXNlcjYyOTkzNTE2",
             "avatar_url": "https://avatars.githubusercontent.com/u/62993516?v=4",
             "gravatar_id": "",
             "url": "https://api.github.com/users/Xyz002",
             "html_url": "https://github.com/Xyz002",
             "followers_url": "https://api.github.com/users/Xyz002/followers",
             "following_url": "https://api.github.com/users/Xyz002/following{/other_user}",
             "gists_url": "https://api.github.com/users/Xyz002/gists{/gist_id}",
             "starred_url": "https://api.github.com/users/Xyz002/starred{/owner}{/repo}",
             "subscriptions_url": "https://api.github.com/users/Xyz002/subscriptions",
             "organizations_url": "https://api.github.com/users/Xyz002/orgs",
             "repos_url": "https://api.github.com/users/Xyz002/repos",
             "events_url": "https://api.github.com/users/Xyz002/events{/privacy}",
             "received_events_url": "https://api.github.com/users/Xyz002/received_events",
             "type": "User",
             "site_admin": false
          },
          "html_url": "https://github.com/Xyz002/test",
          "description": null,
          "fork": false,
          "url": "https://github.com/Xyz002/test",
          "forks_url": "https://api.github.com/repos/Xyz002/test/forks",
          "keys_url": "https://api.github.com/repos/Xyz002/test/keys{/key_id}",
          "collaborators_url": "https://api.github.com/repos/Xyz002/test/collaborators{/collaborator}",
          "teams_url": "https://api.github.com/repos/Xyz002/test/teams",
          "hooks_url": "https://api.github.com/repos/Xyz002/test/hooks",
          "issue_events_url": "https://api.github.com/repos/Xyz002/test/issues/events{/number}",
          "events_url": "https://api.github.com/repos/Xyz002/test/events",
          "assignees_url": "https://api.github.com/repos/Xyz002/test/assignees{/user}",
          "branches_url": "https://api.github.com/repos/Xyz002/test/branches{/branch}",
          "tags_url": "https://api.github.com/repos/Xyz002/test/tags",
          "blobs_url": "https://api.github.com/repos/Xyz002/test/git/blobs{/sha}",
          "git_tags_url": "https://api.github.com/repos/Xyz002/test/git/tags{/sha}",
          "git_refs_url": "https://api.github.com/repos/Xyz002/test/git/refs{/sha}",
          "trees_url": "https://api.github.com/repos/Xyz002/test/git/trees{/sha}",
          "statuses_url": "https://api.github.com/repos/Xyz002/test/statuses/{sha}",
          "languages_url": "https://api.github.com/repos/Xyz002/test/languages",
          "stargazers_url": "https://api.github.com/repos/Xyz002/test/stargazers",
          "contributors_url": "https://api.github.com/repos/Xyz002/test/contributors",
          "subscribers_url": "https://api.github.com/repos/Xyz002/test/subscribers",
          "subscription_url": "https://api.github.com/repos/Xyz002/test/subscription",
          "commits_url": "https://api.github.com/repos/Xyz002/test/commits{/sha}",
          "git_commits_url": "https://api.github.com/repos/Xyz002/test/git/commits{/sha}",
          "comments_url": "https://api.github.com/repos/Xyz002/test/comments{/number}",
          "issue_comment_url": "https://api.github.com/repos/Xyz002/test/issues/comments{/number}",
          "contents_url": "https://api.github.com/repos/Xyz002/test/contents/{+path}",
          "compare_url": "https://api.github.com/repos/Xyz002/test/compare/{base}...{head}",
          "merges_url": "https://api.github.com/repos/Xyz002/test/merges",
          "archive_url": "https://api.github.com/repos/Xyz002/test/{archive_format}{/ref}",
          "downloads_url": "https://api.github.com/repos/Xyz002/test/downloads",
          "issues_url": "https://api.github.com/repos/Xyz002/test/issues{/number}",
          "pulls_url": "https://api.github.com/repos/Xyz002/test/pulls{/number}",
          "milestones_url": "https://api.github.com/repos/Xyz002/test/milestones{/number}",
          "notifications_url": "https://api.github.com/repos/Xyz002/test/notifications{?since,all,participating}",
          "labels_url": "https://api.github.com/repos/Xyz002/test/labels{/name}",
          "releases_url": "https://api.github.com/repos/Xyz002/test/releases{/id}",
          "deployments_url": "https://api.github.com/repos/Xyz002/test/deployments",
          "created_at": 1585737871,
          "updated_at": "2022-01-04T14:37:36Z",
          "pushed_at": 1648103939,
          "git_url": "git://github.com/Xyz002/test.git",
          "ssh_url": "git@github.com:Xyz002/test.git",
          "clone_url": "https://github.com/Xyz002/test.git",
          "svn_url": "https://github.com/Xyz002/test",
          "homepage": null,
          "size": 1378,
          "stargazers_count": 0,
          "watchers_count": 0,
          "language": "Java",
          "has_issues": true,
          "has_projects": true,
          "has_downloads": true,
          "has_wiki": true,
          "has_pages": false,
          "forks_count": 0,
          "mirror_url": null,
          "archived": false,
          "disabled": false,
          "open_issues_count": 2,
          "license": null,
          "allow_forking": true,
          "is_template": false,
          "topics": [],
          "visibility": "public",
          "forks": 0,
          "open_issues": 2,
          "watchers": 0,
          "default_branch": "master",
          "stargazers": 0,
          "master_branch": "master"
       },
       "pusher": {
          "name": "Xyz002",
          "email": "62993516+Xyz002@users.noreply.github.com"
       },
       "sender": {
          "login": "Xyz002",
          "id": 62993516,
          "node_id": "MDQ6VXNlcjYyOTkzNTE2",
          "avatar_url": "https://avatars.githubusercontent.com/u/62993516?v=4",
          "gravatar_id": "",
          "url": "https://api.github.com/users/Xyz002",
          "html_url": "https://github.com/Xyz002",
          "followers_url": "https://api.github.com/users/Xyz002/followers",
          "following_url": "https://api.github.com/users/Xyz002/following{/other_user}",
          "gists_url": "https://api.github.com/users/Xyz002/gists{/gist_id}",
          "starred_url": "https://api.github.com/users/Xyz002/starred{/owner}{/repo}",
          "subscriptions_url": "https://api.github.com/users/Xyz002/subscriptions",
          "organizations_url": "https://api.github.com/users/Xyz002/orgs",
          "repos_url": "https://api.github.com/users/Xyz002/repos",
          "events_url": "https://api.github.com/users/Xyz002/events{/privacy}",
          "received_events_url": "https://api.github.com/users/Xyz002/received_events",
          "type": "User",
          "site_admin": false
       },
       "created": false,
       "deleted": false,
       "forced": false,
       "base_ref": null,
       "compare": "https://github.com/Xyz002/test/compare/59078a17cad1...b7957bab2083",
       "commits": [
          {
             "id": "b7957bab20835449c4d597fee24075a9a5a2c099",
             "tree_id": "fa8d699762ec0a25868fa1ab4d299da392f0a974",
             "distinct": true,
             "message": "updated this file",
             "timestamp": "2022-03-24T12:08:59+05:30",
             "url": "https://github.com/Xyz002/test/commit/b7957bab20835449c4d597fee24075a9a5a2c099",
             "author": {
                "name": "Xyz002",
                "email": "62993516+Xyz002@users.noreply.github.com",
                "username": "Xyz002"
             },
             "committer": {
                "name": "GitHub",
                "email": "noreply@github.com",
                "username": "web-flow"
             },
             "added": [],
             "removed": [],
             "modified": [
                "README.me"
             ]
          }
       ],
       "head_commit": {
          "id": "b7957bab20835449c4d597fee24075a9a5a2c099",
          "tree_id": "fa8d699762ec0a25868fa1ab4d299da392f0a974",
          "distinct": true,
          "message": "updated this file",
          "timestamp": "2022-03-24T12:08:59+05:30",
          "url": "https://github.com/Xyz002/test/commit/b7957bab20835449c4d597fee24075a9a5a2c099",
          "author": {
             "name": "Xyz002",
             "email": "62993516+Xyz002@users.noreply.github.com",
             "username": "Xyz002"
          },
          "committer": {
             "name": "GitHub",
             "email": "noreply@github.com",
             "username": "web-flow"
          },
          "added": [],
          "removed": [],
          "modified": [
             "README.me"
          ]
       },
       "sn_tool_id": "46a07b2f471e011028c23a34846d43b2"
    }" \
    --user 'username':'password'
    

    Réponse de réussite :

    {
       "result": "success"
    }

    Demande cURL

    Jira

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/event/9ed237af471e011028c23a34846d4327" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "timestamp": 1648104684180,
       "webhookEvent": "jira:issue_created",
       "issue_event_type_name": "issue_created",
       "user": {
          "self": "http://jira1.sndevops.xyz/rest/api/2/user?username=admin",
          "name": "admin",
          "key": "admin",
          "emailAddress": "username@email.com",
          "avatarUrls": {
             "48x48": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=48",
             "24x24": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=24",
             "16x16": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=16",
             "32x32": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=32"
          },
          "displayName": "Administrator",
          "active": true,
          "timeZone": "America/Los_Angeles"
       },
       "issue": {
          "id": "84800",
          "self": "http://jira1.sndevops.xyz/rest/api/2/issue/84800",
          "key": "BAL-2",
          "fields": {
             "issuetype": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/issuetype/10002",
                "id": "10002",
                "description": "A task that needs to be done.",
                "iconUrl": "http://jira1.sndevops.xyz/secure/viewavatar?size=xsmall&avatarId=10318&avatarType=issuetype",
                "name": "Task",
                "subtask": false,
                "avatarId": 10318
             },
             "timespent": null,
             "project": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/project/10507",
                "id": "10507",
                "key": "BAL",
                "name": "balu_devops",
                "projectTypeKey": "software",
                "avatarUrls": {
                   "48x48": "http://jira1.sndevops.xyz/secure/projectavatar?avatarId=10324",
                   "24x24": "http://jira1.sndevops.xyz/secure/projectavatar?size=small&avatarId=10324",
                   "16x16": "http://jira1.sndevops.xyz/secure/projectavatar?size=xsmall&avatarId=10324",
                   "32x32": "http://jira1.sndevops.xyz/secure/projectavatar?size=medium&avatarId=10324"
                }
             },
             "fixVersions": [],
             "aggregatetimespent": null,
             "resolution": null,
             "customfield_10302": null,
             "customfield_10105": null,
             "resolutiondate": null,
             "workratio": 0,
             "lastViewed": null,
             "watches": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/issue/BAL-2/watchers",
                "watchCount": 0,
                "isWatching": false
             },
             "created": "2022-03-24T06:51:22.896+0000",
             "priority": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/priority/3",
                "iconUrl": "http://jira1.sndevops.xyz/images/icons/priorities/medium.svg",
                "name": "Medium",
                "id": "3"
             },
             "customfield_10100": "0|i0cprw:",
             "customfield_10101": "SCRUMBOARD-14",
             "customfield_10300": null,
             "labels": [],
             "timeestimate": 240,
             "aggregatetimeoriginalestimate": 300,
             "versions": [],
             "issuelinks": [
                {
                   "id": "10701",
                   "self": "http://jira1.sndevops.xyz/rest/api/2/issueLink/10701",
                   "type": {
                      "id": "10000",
                      "name": "Blocks",
                      "inward": "is blocked by",
                      "outward": "blocks",
                      "self": "http://jira1.sndevops.xyz/rest/api/2/issueLinkType/10000"
                   },
                   "outwardIssue": {
                      "id": "84741",
                      "key": "BAL-1",
                      "self": "http://jira1.sndevops.xyz/rest/api/2/issue/84741",
                      "fields": {
                         "summary": "log4jtesting",
                         "status": {
                            "self": "http://jira1.sndevops.xyz/rest/api/2/status/3",
                            "description": "This issue is being actively worked on at the moment by the assignee.",
                            "iconUrl": "http://jira1.sndevops.xyz/images/icons/statuses/inprogress.png",
                            "name": "In Progress",
                            "id": "3",
                            "statusCategory": {
                               "self": "http://jira1.sndevops.xyz/rest/api/2/statuscategory/4",
                               "id": 4,
                               "key": "indeterminate",
                               "colorName": "yellow",
                               "name": "In Progress"
                            }
                         },
                         "priority": {
                            "self": "http://jira1.sndevops.xyz/rest/api/2/priority/3",
                            "iconUrl": "http://jira1.sndevops.xyz/images/icons/priorities/medium.svg",
                            "name": "Medium",
                            "id": "3"
                         },
                         "issuetype": {
                            "self": "http://jira1.sndevops.xyz/rest/api/2/issuetype/10004",
                            "id": "10004",
                            "description": "A problem which impairs or prevents the functions of the product.",
                            "iconUrl": "http://jira1.sndevops.xyz/secure/viewavatar?size=xsmall&avatarId=10303&avatarType=issuetype",
                            "name": "Bug",
                            "subtask": false,
                            "avatarId": 10303
                         }
                      }
                   }
                }
             ],
             "assignee": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/user?username=admin",
                "name": "admin",
                "key": "admin",
                "emailAddress": "username@email.com",
                "avatarUrls": {
                   "48x48": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=48",
                   "24x24": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=24",
                   "16x16": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=16",
                   "32x32": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=32"
                },
                "displayName": "Administrator",
                "active": true,
                "timeZone": "America/Los_Angeles"
             },
             "updated": "2022-03-24T06:51:22.896+0000",
             "status": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/status/10000",
                "description": "",
                "iconUrl": "http://jira1.sndevops.xyz/",
                "name": "To Do",
                "id": "10000",
                "statusCategory": {
                   "self": "http://jira1.sndevops.xyz/rest/api/2/statuscategory/2",
                   "id": 2,
                   "key": "new",
                   "colorName": "blue-gray",
                   "name": "To Do"
                }
             },
             "components": [],
             "timeoriginalestimate": 300,
             "description": "Task description",
             "timetracking": {
                "originalEstimate": "5m",
                "remainingEstimate": "4m",
                "originalEstimateSeconds": 300,
                "remainingEstimateSeconds": 240
             },
             "customfield_10203": null,
             "customfield_10204": null,
             "customfield_10205": null,
             "attachment": [],
             "aggregatetimeestimate": 240,
             "summary": "Task Summary",
             "creator": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/user?username=admin",
                "name": "admin",
                "key": "admin",
                "emailAddress": "username@email.com",
                "avatarUrls": {
                   "48x48": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=48",
                   "24x24": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=24",
                   "16x16": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=16",
                   "32x32": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=32"
                },
                "displayName": "Administrator",
                "active": true,
                "timeZone": "America/Los_Angeles"
             },
             "subtasks": [],
             "reporter": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/user?username=admin",
                "name": "admin",
                "key": "admin",
                "emailAddress": "username@email.com",
                "avatarUrls": {
                   "48x48": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=48",
                   "24x24": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=24",
                   "16x16": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=16",
                   "32x32": "https://www.gravatar.com/avatar/eccd6ec2c978f1f1d4a1fed4e81265eb?d=mm&s=32"
                },
                "displayName": "Administrator",
                "active": true,
                "timeZone": "America/Los_Angeles"
             },
             "customfield_10000": "{summaryBean=com.atlassian.jira.plugin.devstatus.rest.SummaryBean@2ccf8c6[summary={pullrequest=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@fbc42d4[overall=PullRequestOverallBean{stateCount=0, state='OPEN', details=PullRequestOverallDetails{openCount=0, mergedCount=0, declinedCount=0}},byInstanceType={}], build=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@71e33347[overall=com.atlassian.jira.plugin.devstatus.summary.beans.BuildOverallBean@1c24654d[failedBuildCount=0,successfulBuildCount=0,unknownBuildCount=0,count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType={}], review=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@1ea8fb17[overall=com.atlassian.jira.plugin.devstatus.summary.beans.ReviewsOverallBean@6dc95939[stateCount=0,state=<null>,dueDate=<null>,overDue=false,count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType={}], deployment-environment=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@55826cc[overall=com.atlassian.jira.plugin.devstatus.summary.beans.DeploymentOverallBean@3ae93527[topEnvironments=[],showProjects=false,successfulCount=0,count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType={}], repository=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@6340012e[overall=com.atlassian.jira.plugin.devstatus.summary.beans.CommitOverallBean@44678cee[count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType={}], branch=com.atlassian.jira.plugin.devstatus.rest.SummaryItemBean@4dbce8[overall=com.atlassian.jira.plugin.devstatus.summary.beans.BranchOverallBean@737ee1cb[count=0,lastUpdated=<null>,lastUpdatedTimestamp=<null>],byInstanceType={}]},errors=[],configErrors=[]], devSummaryJson={\"cachedValue\":{\"errors\":[],\"configErrors\":[],\"summary\":{\"pullrequest\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"stateCount\":0,\"state\":\"OPEN\",\"details\":{\"openCount\":0,\"mergedCount\":0,\"declinedCount\":0,\"total\":0},\"open\":true},\"byInstanceType\":{}},\"build\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"failedBuildCount\":0,\"successfulBuildCount\":0,\"unknownBuildCount\":0},\"byInstanceType\":{}},\"review\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"stateCount\":0,\"state\":null,\"dueDate\":null,\"overDue\":false,\"completed\":false},\"byInstanceType\":{}},\"deployment-environment\":{\"overall\":{\"count\":0,\"lastUpdated\":null,\"topEnvironments\":[],\"showProjects\":false,\"successfulCount\":0},\"byInstanceType\":{}},\"repository\":{\"overall\":{\"count\":0,\"lastUpdated\":null},\"byInstanceType\":{}},\"branch\":{\"overall\":{\"count\":0,\"lastUpdated\":null},\"byInstanceType\":{}}}},\"isStale\":false}}",
             "aggregateprogress": {
                "progress": 0,
                "total": 240,
                "percent": 0
             },
             "customfield_10200": null,
             "customfield_10201": null,
             "customfield_10202": null,
             "environment": null,
             "duedate": "2022-03-24",
             "progress": {
                "progress": 0,
                "total": 240,
                "percent": 0
             },
             "comment": {
                "comments": [],
                "maxResults": 0,
                "total": 0,
                "startAt": 0
             },
             "votes": {
                "self": "http://jira1.sndevops.xyz/rest/api/2/issue/BAL-2/votes",
                "votes": 0,
                "hasVoted": false
             },
             "worklog": {
                "startAt": 0,
                "maxResults": 20,
                "total": 0,
                "worklogs": []
             }
          }
       },
       "changelog": {
          "id": "14401",
          "items": [
             {
                "field": "Link",
                "fieldtype": "jira",
                "from": null,
                "fromString": null,
                "to": "BAL-1",
                "toString": "This issue blocks BAL-1"
             }
          ]
       },
       "sn_tool_id": "9ed237af471e011028c23a34846d4327"
    }" \
    --user 'username':'password'
    

    Réponse de réussite :

    {
       "result": "success"
    }

    Demande cURL

    Bitbucket

    curl "https://instance.service-now.com/api/sn_devops/devops/tool/event/6975ecaf879e85100f71cbfc0ebb3575" \
    --request POST \
    --header "Accept:application/json" \
    --header "Content-Type:application/json" \
    --data "{
       "eventKey": "repo:refs_changed",
       "date": "2022-03-23T15:57:05+0000",
       "actor": {
          "name": "admin",
          "emailAddress": "username@email.com",
          "id": 1,
          "displayName": "Admin",
          "active": true,
          "slug": "admin",
          "type": "NORMAL",
          "links": {
             "self": [
                {
                   "href": "http://bitbucket2.sndevops.xyz/users/admin"
                }
             ]
          }
       },
       "repository": {
          "slug": "testautomationrepo1",
          "id": 12,
          "name": "TestAutomationRepo1",
          "scmId": "git",
          "state": "AVAILABLE",
          "statusMessage": "Available",
          "forkable": true,
          "origin": {
             "slug": "testautomationrepo1",
             "id": 1,
             "name": "TestAutomationRepo1",
             "scmId": "git",
             "state": "AVAILABLE",
             "statusMessage": "Available",
             "forkable": true,
             "project": {
                "key": "TES",
                "id": 1,
                "name": "TestAutomation",
                "public": false,
                "type": "NORMAL",
                "links": {
                   "self": [
                      {
                         "href": "http://bitbucket2.sndevops.xyz/projects/TES"
                      }
                   ]
                }
             },
             "public": false,
             "links": {
                "clone": [
                   {
                      "href": "ssh://git@bitbucket2.sndevops.xyz:7999/tes/testautomationrepo1.git",
                      "name": "ssh"
                   },
                   {
                      "href": "http://bitbucket2.sndevops.xyz/scm/tes/testautomationrepo1.git",
                      "name": "http"
                   }
                ],
                "self": [
                   {
                      "href": "http://bitbucket2.sndevops.xyz/projects/TES/repos/testautomationrepo1/browse"
                   }
                ]
             }
          },
          "project": {
             "key": "~ADMIN",
             "id": 3,
             "name": "Admin",
             "type": "PERSONAL",
             "owner": {
                "name": "admin",
                "emailAddress": "username@email.com",
                "id": 1,
                "displayName": "Admin",
                "active": true,
                "slug": "admin",
                "type": "NORMAL",
                "links": {
                   "self": [
                      {
                         "href": "http://bitbucket2.sndevops.xyz/users/admin"
                      }
                   ]
                }
             },
             "links": {
                "self": [
                   {
                      "href": "http://bitbucket2.sndevops.xyz/users/admin"
                   }
                ]
             }
          },
          "public": false,
          "links": {
             "clone": [
                {
                   "href": "http://bitbucket2.sndevops.xyz/scm/~admin/testautomationrepo1.git",
                   "name": "http"
                },
                {
                   "href": "ssh://git@bitbucket2.sndevops.xyz:7999/~admin/testautomationrepo1.git",
                   "name": "ssh"
                }
             ],
             "self": [
                {
                   "href": "http://bitbucket2.sndevops.xyz/users/admin/repos/testautomationrepo1/browse"
                }
             ]
          }
       },
       "changes": [
          {
             "ref": {
                "id": "refs/heads/master",
                "displayId": "master",
                "type": "BRANCH"
             },
             "refId": "refs/heads/master",
             "fromHash": "b482b2e232f5fbdee73feed8ca1cfb774de6976e",
             "toHash": "d783254fe6f77bc7cc079358158aeef52a457587",
             "type": "UPDATE"
          }
       ],
       "sn_tool_id": "6975ecaf879e85100f71cbfc0ebb3575"
    }" \
    --user 'username':'password'
    

    Réponse de réussite :

    {
       "result": "success"
    }

    DevOps - PUT /devops/orchestration/changeControl/{changeControlId}

    Met à jour les informations de contrôle des changements pour la tâche d’orchestration spécifiée.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/orchestration/changeControl/{changeControlId}

    URL par défaut : /api/sn_devops/devops/orchestration/changeControl/{changeControlId}

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 91. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    changeControlId Sys_id de la tâche de contrôle des changements. Situé dans la table Callback [sn_devops_callback].

    Type de données : chaîne

    Tableau 92. Paramètres de requête
    Nom Description
    toolId Requis. Sys_id de l’outil DevOps associé à la tâche de contrôle des changements.

    Type de données : chaîne

    Table : Outil d’orchestration [sn_devops_orchestration_tool]

    Tableau 93. Paramètres du corps de la demande
    Nom Description
    URL de rappel Requis. URL que l’instance ServiceNow peut rappeler une fois le processus d’approbation de demande de changement associé terminé. Ce rappel doit permettre à l’exécution du pipeline de se poursuivre ou non, en fonction du résultat de l’approbation.

    Type de données : chaîne

    orchestrationTaskDetails Requis. Description de la tâche d’orchestration.

    Type de données : objet

    "orchestrationTaskDetails": {
      "message": "String",
      "triggerType": "String",
      "upstreamTaskExecutionURL": "String"
    }
    orchestrationTaskDetails.message Message texte de forme libre.

    Type de données : chaîne

    orchestrationTaskDetails.triggerType Requis. La façon dont la tâche d’orchestration a été démarrée.

    Valeurs valides :

    • scm : la validation du code de l’outil Git/scm a déclenché la tâche.
    • en amont : la tâche en amont a déclenché cette tâche.
    • user : l’utilisateur a démarré manuellement la tâche.

    Type de données : chaîne

    orchestrationTaskDetails.upstreamTaskExecutionURL Requis si triggerType est défini sur en amont. URL d’exécution des tâches en amont.

    Par exemple : https://jenkins.mycompany.com:8080/job/Mobile-Platform-test/40/

    Type de données : chaîne

    orchestrationTaskURL Requis. URL de la tâche d’orchestration.

    Par exemple : https://jenkins.mycompany.com:8080/orchestration_task/Mobile-Platform-deploy/

    Type de données : chaîne

    toolType Type d’outil DevOps .

    Valeur valide : Jenkins

    Type de données : chaîne

    URL d’exécution de tâche Requis. URL de la tâche à exécuter.

    Type de données : chaîne

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 94. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Autorisation
    À partir de la version v2, cette API prend en charge l’authentification basée sur les jetons. Les jetons peuvent être acquis en cliquant sur le bouton Copier le jeton sur l’enregistrement de l’outil, situé dans la table Outil [sn_devops_tool]. Le jeton peut ensuite être utilisé dans un en-tête d’autorisation au format Autorisation : sn_devops. DevOpsToken <tool_sys_id> :<tool_token>.
    Remarque :
    Si les détails de l’authentification de base (nom d’utilisateur et mot de passe) sont fournis en plus d’un en-tête d’autorisation avec jeton, l’authentification de base a priorité.

    Si l’utilisateur devops.system n’est pas disponible dans votre instance, utilisez la propriété Basculer vers cet utilisateur une fois l’authentification basée sur le jeton réussie . Cette propriété permet de définir n’importe quel utilisateur disposant du rôle sn_devops.integration, qui est nécessaire pour terminer l’authentification par jeton. (pour en savoir plus, consultez DevOps Change Velocity properties) ;

    Type de contenu Format des données du corps de la demande. Prend uniquement en charge application/json.
    Tableau 95. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 96. Codes d'état
    Code d'état Description
    200 Demande terminée avec succès.
    400 Demande incorrecte. Un type de demande incorrecte ou mal formé a été détecté.
    401 Authentification non valide ou manquante.
    404 Introuvable. L’enregistrement spécifié est introuvable.
    500 Erreur interne du serveur. Une erreur inattendue s’est produite lors du traitement de la demande. La réponse contient des informations supplémentaires sur l’erreur.

    Paramètres du corps de réponse

    Nom Description
    change_control Marqueur indiquant si la tâche d’orchestration est sous contrôle de changement.
    Valeurs possibles :
    • vrai : sous contrôle des changements.
    • faux : non soumis au contrôle des changements.

    Type de données : booléennes

    Détails Entrée pour toutes les conditions d’erreur.

    Type de données : objet

    "details": {
      "errors": [Array]
    }
    détails.erreurs Description d’une erreur unique.

    Type de données : tableau d’objets

    "errors": [
      {
        "message": "String"
      }
    ]
    Détails.Erreurs.Message Message d’erreur détaillé.

    Type de données : chaîne

    Exemple de demande cURL

    curl -X PUT "https://instance.service-now.com/api/sn_devops/v1/devops/orchestration/changeControl/f0ca45679323008b52f3b457415ae6?toolId=f0ca45679323008b52f3b457415ae6"
    -H "accept: application/json"\
    -H "Content-Type: application/json"\
    -u "username":"password"\
    -d "{
      \"orchestrationTaskURL\":\"https://jenkins.mycompany.com:8080/job/Mobile-Platform-deploy/\",
      \"toolType\":\"jenkins\",
      \"callbackURL\":\"https://jenkins.mycompany.com:8080/sn-devops/964aca59-0cae-4d9b-a36d-5929f426cf31\",
    \"taskExecutionURL\":\"https://jenkins.mycompany.com:8080/job/Mobile-Platform-test/40/\",  
    "\orchestrationTaskName\":\"StageName\",
      \"orchestrationTaskDetails\":{
        \"message\":\"Started by upstream project \\\"Mobile-Platform-test\\\" build number 40\",
        \"triggerType\":\"upstream\",
        \"upstreamTaskExecutionURL\":\"https://jenkins.mycompany.com:8080/job/Mobile-Platform-test/40/\"}
    }"

    Réponse :

    {
        "result": {
            "change_control": true
        }
    }

    DevOps - PUT /devops/orchestration/changeInfo/{changeInfo}

    Met à jour les champs dans une demande de changement spécifiée.

    Format d'URL

    URL versionnée : /api/sn_devops/{api_version}/devops/orchestration/changeInfo/{changeInfo}

    URL par défaut : /api/sn_devops/devops/orchestration/changeInfo/{changeInfo}

    Remarque :
    Les versions disponibles sont spécifiées dans l’explorateur d’API REST. Pour les API REST scriptées, des informations supplémentaires sur la version se trouvent dans le formulaire Service REST scripté.

    Paramètres de demande pris en charge

    Tableau 97. Paramètres de chemin d'accès
    Nom Description
    api_version Facultatif. Version du point de terminaison auquel accéder. Par exemple, v1 ou v2. Spécifiez uniquement cette valeur pour utiliser une version de point de terminaison autre que la plus récente.

    Type de données : chaîne

    Tableau 98. Paramètres de requête
    Nom Description
    changeRequestNumber Requis. Numéro de la demande de changement associée à la tâche d’orchestration à mettre à jour.

    Type de données : chaîne

    Table : Demande de changement [change_request]

    Tableau 99. Paramètres du corps de la demande
    Nom Description
    données Requis. Paires nom-valeur pour le ou les champs à mettre à jour dans la demande de changement associée.
    Par exemple, pour mettre à jour le fichier de description brève, entrez une paire nom-valeur similaire à la suivante :
     "{\"short_description\": \"my short desc\" }"
    Pour le state paramètre, seules les transitions suivantes sont prises en charge :
    • Annuler :
      • L’état de la demande de changement doit être implémenté pour passer l’état à annuler.
      • Le reason paramètre est une entrée obligatoire pour mettre à jour l’état sur Annulé.
    • fermé :
      • L’état de la demande de changement doit être Implémenter ou Post Implémenter pour passer l’état à Fermé.
      • close_code et close_notes sont des entrées obligatoires pour mettre à jour l’état sur Fermé.
        Valeurs possibles :
        • 4 : Annuler (valeur définie dans la propriété sn_devops.change_request.cancel_state.)
        • 3 : fermé (valeur définie dans la propriété sn_devops.change_request.closed_state.)

    Type de données : chaîne

    En-têtes

    Les en-têtes de demande et de réponse suivants s’appliquent uniquement à cette action HTTP ou s’appliquent à cette action d’une manière distincte. Pour obtenir la liste des en-têtes généraux utilisés dans l’API REST, consultez En-têtes d’API REST pris en charge.

    Tableau 100. En-têtes de demandes
    En-tête Description
    Accepter Format de données du corps de la réponse. Prend uniquement en charge application/json.
    Autorisation
    À partir de la version v2, cette API prend en charge l’authentification basée sur les jetons. Les jetons peuvent être acquis en cliquant sur le bouton Copier le jeton sur l’enregistrement de l’outil, situé dans la table Outil [sn_devops_tool]. Le jeton peut ensuite être utilisé dans un en-tête d’autorisation au format Autorisation : sn_devops. DevOpsToken <tool_sys_id> :<tool_token>.
    Remarque :
    Si les détails de l’authentification de base (nom d’utilisateur et mot de passe) sont fournis en plus d’un en-tête d’autorisation avec jeton, l’authentification de base a priorité.

    Si l’utilisateur devops.system n’est pas disponible dans votre instance, utilisez la propriété Basculer vers cet utilisateur une fois l’authentification basée sur le jeton réussie . Cette propriété permet de définir n’importe quel utilisateur disposant du rôle sn_devops.integration, qui est nécessaire pour terminer l’authentification par jeton. (pour en savoir plus, consultez DevOps Change Velocity properties) ;

    Type de contenu Format des données du corps de la demande. Prend uniquement en charge application/json.
    Tableau 101. En-têtes de réponses
    En-tête Description
    Néant

    Codes d'état

    Les codes d’état suivants s’appliquent à cette action HTTP. Pour obtenir la liste des codes d’état possibles utilisés dans l’API REST, consultez Codes de réponse HTTP de l’API REST.

    Tableau 102. Codes d'état
    Code d'état Description
    200 Réussi. La demande a été traitée avec succès.
    400 Demande incorrecte. Un type de demande incorrecte ou mal formé a été détecté.
    404 Introuvable. L’élément demandé est introuvable.

    Paramètres du corps de réponse

    Nom Description
    message Description des résultats de la mise à jour.

    Type de données : chaîne

    statut État de la demande.
    Valeurs possibles :
    • Réussite : la demande de changement a été trouvée et les détails du changement ont été mis à jour avec succès.
    • Erreur : la demande de changement est introuvable et les détails du changement n’ont pas été mis à jour.

    Type de données : chaîne

    updateStatus État de la mise à jour.
    Valeurs possibles :
    • Fermer
    • Erreur

    Type de données : chaîne

    Demande cURL

    L’exemple de code suivant montre comment mettre à jour différents champs dans la demande de changement de CHG0030023.

    curl -X PUT"
    https://instance.servicenow.com/api/sn_devops/v1/devops/orchestration/changeInfo?changeRequestNumber=CHG0030023
    
    -H "accept: application/json"\
    -u "username":"password" 
    - D
    {
      "short_description": "Test description",
      "priority": "1",
      "start_date": "2021-02-05 08:00:00",
      "end_date": "2022-04-05 08:00:00",
      "justification": "test justification",
      "description": "test description",
      "cab_required": true,
      "comments": "This update for work notes is from jenkins file",
      "work_notes": "test work notes",
      "assignment_group": "a715cd759f2002002920bde8132e7018"
    }

    Réponse :

    {
      "result": {
        "updateStatus": "Done",
        "status": "Success",
        "message": "change request update successful"
      }
    }