Ce produit n'est pas pris en charge par le site Datadog que vous avez sélectionné. ().
Join the Preview!

Les portes de déploiement sont en préversion. Si cette fonctionnalité vous intéresse, remplissez le formulaire pour demander l’accès.

Request Access

Avec les barrières de déploiement préconfigurées, les barrières et les règles sont conservées dans Datadog et référencées par service et par environnement au moment de l’évaluation. Les barrières préconfigurées sont adaptées lorsque vous souhaitez partager des règles entre plusieurs déploiements, gérer la configuration dans Terraform ou permettre à des utilisateurs n’utilisant pas la CI de modifier les règles dans l’interface utilisateur Datadog.

Vous cherchez à définir des règles en ligne dans votre configuration de déploiement ? Consultez Barrières de déploiement Just-In-Time (JIT).

Créer une barrière

En plus d'utiliser l'interface utilisateur des barrières de déploiement, vous pouvez gérer les barrières et les règles par programmation avec l'API des barrières de déploiement ou le fournisseur Terraform Datadog.
  1. Accédez à Software Delivery > Deployment Gates > Configuration.
  2. Cliquez sur Create Gate.
  3. Configurez les paramètres suivants :
    • Service : Le nom du service (exemple : transaction-backend).
    • Environment : L’environnement cible (exemple : dev).
    • Identifier (facultatif, la valeur par défaut est default) : Nom unique pour plusieurs barrières sur le même service/environnement. Utilisez ceci pour :
      • Autoriser différentes stratégies de déploiement (exemple : fast-deploy vs default)
      • Distinguer les phases de déploiement (exemple : pre-deploy vs post-deploy)
      • Définir des phases de Canary (exemple : pre-deploy vs canary-20pct)
    • Evaluation Mode : Activez Dry Run pour tester le comportement de la barrière sans impacter les déploiements. L’évaluation d’une barrière en mode Dry Run répond toujours par un statut de réussite, mais le résultat dans l’application reflète l’évaluation réelle. Ceci est utile lors de l’exécution d’une évaluation initiale du comportement de la barrière sans impacter le pipeline de déploiement.

Ajouter des règles à une barrière

Chaque barrière nécessite une ou plusieurs règles pour être évaluée. Toutes les règles doivent réussir pour que la barrière réussisse. Pour chaque règle, spécifiez :

  1. Name : Une étiquette descriptive qui apparaît sur la page Évaluations des barrières de déploiement (par exemple, Check all P0 monitors).
  2. Type : Sélectionnez Monitor ou Faulty Deployment Detection.
  3. Paramètres supplémentaires basés sur le type de règle sélectionné. Consultez Types de règles pour connaître les options disponibles.
  4. Evaluation Mode: Lorsqu’une règle est définie comme Dry Run, son résultat n’est pas pris en compte lors du calcul du résultat global de la porte.

Types de règles

Pour le schéma complet et toutes les options disponibles, consultez la référence de l’API des portes de déploiement.

La règle Monitor évalue l’état d’un ensemble de monitors sur une période configurable. Sélectionnez des monitors à l’aide d’une requête de recherche ou d’une liste explicite de monitors. Ces méthodes de sélection sont mutuellement exclusives. La règle peut échouer si, à tout moment pendant la période d’évaluation :

  • Aucun groupe de monitors ne correspond à la sélection configurée.
  • Un ID de monitor explicite n’existe pas ou n’est pas disponible pour votre organisation.
  • Plus de 300 monitors correspondent à la sélection configurée.
  • Tout groupe de monitors correspondant est dans l’état ALERT ou NO_DATA.
Paramètres de configuration
  • Monitors matching query : Saisissez une requête basée sur la syntaxe de recherche de monitor. Filtrer sur les tags de monitor :
    • Tags statiques de monitor : service:transaction-backend
    • Tags dans la requête du monitor : scope:"service:transaction-backend"
    • Tags dans un regroupement de monitors : group:"service:transaction-backend"
  • Specific monitors : Sélectionnez des monitors individuels et, éventuellement, les groupes exacts à évaluer pour chaque monitor. Lorsqu’aucun groupe n’est sélectionné, tous les groupes de ce monitor sont évalués.
  • Duration : La période de temps (en secondes) pendant laquelle les monitors sélectionnés sont évalués. La valeur par défaut est 0 (les monitors sont évalués instantanément). Le maximum est de 7200 secondes (2 heures).
Exemples de requêtes
  • env:prod service:transaction-backend
  • env:prod (service:transaction-backend OR group:"service:transaction-backend" OR scope:"service:transaction-backend")
  • tag:"use_deployment_gates" team:payment
  • tag:"use_deployment_gates" AND (NOT group:("team:frontend"))
Exemple d’API pour des monitors spécifiques
"options": {
  "monitor_ids": [
    {"id": "12345678", "groups": []},
    {"id": "87654321", "groups": ["service:api", "env:prod"]}
  ],
  "duration": 300
}

Chaque id est un ID de monitor décimal. Les valeurs de groupe sont des noms de groupe exacts. N’envoyez pas query avec monitor_ids.

Remarques :

  • group les filtres de requête et monitor_ids[].groups évaluent uniquement les groupes correspondants.
  • Un ID de monitor explicite qui n’existe pas ou qui n’est pas disponible pour votre organisation entraîne l’échec de la règle. Si le monitor existe mais est exclu car mis en sourdine ou si ses groupes sélectionnés ne contiennent aucune donnée, la règle applique le comportement en l’absence de groupes correspondants.
  • Les monitors mis en sourdine sont automatiquement exclus des deux modes de sélection.

Ce type de règle utilise l’analyse Détection de déploiement défectueux APM de Watchdog pour comparer la version déployée aux versions précédentes du même service. L’analyse détecte :

  • De nouveaux types d’erreurs.
  • Des augmentations significatives des taux d’erreur par rapport aux versions précédentes.

L’analyse est effectuée automatiquement pour tous les services instrumentés par APM, et aucune configuration préalable n’est requise.

Paramètres de configuration
  • Operation Name: Rempli automatiquement à partir des paramètres de l’opération principale APM du service.
  • Duration: La période de temps (en secondes) pendant laquelle l’analyse s’exécute. Pour une confiance optimale dans l’analyse, cette valeur doit être d’au moins 900 secondes (15 minutes) après le début d’un déploiement. Le maximum est de 7200 secondes (2 heures).
  • Allowed Resources (facultatif) : Une liste séparée par des virgules de ressources APM à inclure dans l’analyse. Lorsqu’elles sont spécifiées, seules les ressources listées sont analysées. Mutuellement exclusif avec Excluded Resources.
  • Excluded Resources (facultatif) : Une liste séparée par des virgules de ressources APM à ignorer (telles que les endpoints à faible volume ou à faible priorité). Mutuellement exclusif avec Allowed Resources.

Remarques :

  • La règle est évaluée pour chaque valeur de tag principal supplémentaire ainsi que pour une analyse globale. Pour ne prendre en compte qu’un seul tag principal, spécifiez-le lors de la demande d’évaluation de la porte.
  • De nouvelles erreurs et des augmentations du taux d’erreur sont détectées au niveau de la ressource.
  • Ce type de règle ne prend pas en charge les services marqués comme database ou inferred service.

Évaluez une porte depuis votre pipeline

Une fois la porte configurée, demandez une évaluation lors du déploiement du service associé et décidez de bloquer ou de poursuivre le déploiement en fonction du résultat.

La commande datadog-ci deployment gate exécute l’évaluation en une seule commande :

datadog-ci deployment gate --service transaction-backend --env staging --identifier default

Si la porte de déploiement contient des règles de détection de déploiement défectueux APM, spécifiez également la version (par exemple, --version 1.0.1).

La commande :

  • Envoie une requête pour démarrer l’évaluation de la porte et bloque jusqu’à ce que l’évaluation soit terminée.
  • Fournit un délai d’expiration configurable pour la durée d’attente d’une évaluation.
  • Dispose de tentatives automatiques intégrées en cas d’erreurs.
  • Accepte --fail-on-error pour personnaliser le comportement en cas d’erreurs Datadog inattendues.

La commande deployment gate est disponible dans les versions v3.17.0 et ultérieures de datadog-ci.

Variables d’environnement requises :

Pour obtenir des options de configuration complètes et des exemples d’utilisation, consultez la deployment gate documentation de la commande.

Appelez les Deployment Gates depuis une ressource Kubernetes Argo Rollouts en créant un AnalysisTemplate ou un ClusterAnalysisTemplate. Le modèle exécute la commande de porte de déploiement datadog-ci pour interagir avec l’API Deployment Gates.

Utilisez le modèle ci-dessous comme point de départ :

  • Remplacez <YOUR_DD_SITE> par votre nom de site Datadog (par exemple, ).
  • Définissez la clé d’API et la clé d’application en tant que variables d’environnement. L’exemple utilise un Secret Kubernetes nommé datadog avec deux valeurs de données : api-key et app-key. Vous pouvez également transmettre les valeurs en texte brut avec value au lieu de valueFrom.
apiVersion: argoproj.io/v1alpha1
kind: ClusterAnalysisTemplate
metadata:
  name: datadog-job-analysis
spec:
  args:
    - name: service
    - name: env
  metrics:
    - name: datadog-job
      provider:
        job:
          spec:
            ttlSecondsAfterFinished: 300
            backoffLimit: 0
            template:
              spec:
                restartPolicy: Never
                containers:
                  - name: datadog-check
                    image: datadog/ci:v3.17.0
                    env:
                      - name: DD_BETA_COMMANDS_ENABLED
                        value: "1"
                      - name: DD_SITE
                        value: "<YOUR_DD_SITE>"
                      - name: DD_API_KEY
                        valueFrom:
                          secretKeyRef:
                            name: datadog
                            key: api-key
                      - name: DD_APP_KEY
                        valueFrom:
                          secretKeyRef:
                            name: datadog
                            key: app-key
                    command: ["/bin/sh", "-c"]
                    args:
                      - datadog-ci deployment gate --service {{ args.service }} --env {{ args.env }} --identifier default
  • Le modèle d’analyse peut recevoir des arguments de la ressource Rollout (tels que service, env et version). Pour plus d’informations, consultez la documentation officielle d’Argo Rollouts.
  • ttlSecondsAfterFinished supprime les jobs terminés après 5 minutes.
  • backoffLimit est défini sur 0 car le job ne doit pas être relancé si l’évaluation de la porte échoue.

Après avoir créé le modèle d’analyse, référencez-le depuis la stratégie Argo Rollouts :

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: rollouts-demo
  labels:
    tags.datadoghq.com/service: transaction-backend
    tags.datadoghq.com/env: dev
spec:
  replicas: 5
  strategy:
    canary:
      steps:
        ...
        - analysis:
            templates:
              - templateName: datadog-job-analysis
                clusterScope: true # Only needed for cluster analysis
            args:
              - name: env
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.labels['tags.datadoghq.com/env']
              - name: service
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.labels['tags.datadoghq.com/service']
              - name: version #Required for APM Faulty Deployment Detection rules
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.labels['tags.datadoghq.com/version']
        - ...

L’action GitHub Datadog Deployment Gate exécute l’évaluation dans le cadre d’un workflow.

Ajoutez une étape DataDog/deployment-gate-github-action à votre workflow de déploiement existant :

name: Deploy with Datadog Deployment Gate
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy Canary
        run: |
          echo "Deploying canary release for service:'my-service' in 'production'. Version 1.0.1"
          # Your deployment commands here

      - name: Evaluate Deployment Gate
        uses: DataDog/deployment-gate-github-action@v2.1.0
        env:
          DD_API_KEY: ${{ secrets.DD_API_KEY }}
          DD_APP_KEY: ${{ secrets.DD_APP_KEY }}
        with:
          service: my-service
          env: production
          identifier: default

      - name: Deploy
        run: |
          echo "Deployment Gate passed, proceeding with deployment"
          # Your deployment commands here

Si la porte de déploiement contient des règles de détection de déploiement défectueux APM, spécifiez également la version (par exemple, version: 1.0.1).

L’action :

  • Envoie une requête pour démarrer l’évaluation de la porte et bloque jusqu’à ce que l’évaluation soit terminée.
  • Fournit un délai d’expiration configurable pour la durée d’attente d’une évaluation.
  • Dispose de tentatives automatiques intégrées en cas d’erreurs.
  • Accepte fail-on-error pour personnaliser le comportement en cas d’erreurs Datadog inattendues.

Variables d’environnement requises :

Pour des options de configuration complètes et des exemples d’utilisation, consultez le DataDog/deployment-gate-github-action dépôt.

Utilisez ce script comme point de départ. Il évalue une porte préconfigurée sans règles en ligne.

Remplacez ce qui suit :

#!/bin/sh

# Configuration
MAX_RETRIES=3
DELAY_SECONDS=5
POLL_INTERVAL_SECONDS=15
MAX_POLL_TIME_SECONDS=10800 # 3 hours
API_URL="https://api.<YOUR_DD_SITE>/api/v2/deployments/gates/evaluation"
API_KEY="<YOUR_API_KEY>"
APP_KEY="<YOUR_APP_KEY>"

PAYLOAD=$(cat <<EOF
{
  "data": {
    "type": "deployment_gates_evaluation_request",
    "attributes": {
      "service": "$1",
      "env": "$2",
      "version": "$3"
    }
  }
}
EOF
)

# Step 1: Request evaluation
echo "Requesting evaluation..."
current_attempt=0
while [ $current_attempt -lt $MAX_RETRIES ]; do
   current_attempt=$((current_attempt + 1))
   RESPONSE=$(curl -s -w "%{http_code}" -o response.txt -X POST "$API_URL" \
       -H "Content-Type: application/json" \
       -H "DD-API-KEY: $API_KEY" \
       -H "DD-APPLICATION-KEY: $APP_KEY" \
       -d "$PAYLOAD")

   HTTP_CODE=$(echo "$RESPONSE" | tail -c 4)
   RESPONSE_BODY=$(cat response.txt)

   if [ ${HTTP_CODE} -ge 500 ]  &&  [ ${HTTP_CODE} -le 599 ]; then
       echo "Attempt $current_attempt: 5xx Error ($HTTP_CODE). Retrying in $DELAY_SECONDS seconds..."
       sleep $DELAY_SECONDS
       continue
   elif [ ${HTTP_CODE} -ge 400 ] && [ ${HTTP_CODE} -le 499 ]; then
       echo "Client error ($HTTP_CODE): $RESPONSE_BODY"
       exit 1
   fi

   EVALUATION_ID=$(echo "$RESPONSE_BODY" | jq -r '.data.attributes.evaluation_id')
   if [ "$EVALUATION_ID" = "null" ] || [ -z "$EVALUATION_ID" ]; then
       echo "Failed to extract evaluation_id from response: $RESPONSE_BODY"
       exit 1
   fi

   echo "Evaluation started with ID: $EVALUATION_ID"
   break
done

if [ $current_attempt -eq $MAX_RETRIES ]; then
   echo "All retries exhausted for evaluation request, but treating 5xx errors as success."
   exit 0
fi

# Step 2: Poll for results
echo "Polling for results..."
start_time=$(date +%s)
poll_count=0

while true; do
  poll_count=$((poll_count + 1))
  current_time=$(date +%s)
  elapsed_time=$((current_time - start_time))

  if [ $elapsed_time -ge $MAX_POLL_TIME_SECONDS ]; then
      echo "Evaluation polling timeout after ${MAX_POLL_TIME_SECONDS} seconds"
      exit 1
  fi

  RESPONSE=$(curl -s -w "%{http_code}" -o response.txt -X GET "$API_URL/$EVALUATION_ID" \
      -H "DD-API-KEY: $API_KEY" \
      -H "DD-APPLICATION-KEY: $APP_KEY")

  HTTP_CODE=$(echo "$RESPONSE" | tail -c 4)
  RESPONSE_BODY=$(cat response.txt)

  if [ ${HTTP_CODE} -eq 404 ]; then
      echo "Evaluation not ready yet (404), retrying in $POLL_INTERVAL_SECONDS seconds... (attempt $poll_count, elapsed: ${elapsed_time}s)"
      sleep $POLL_INTERVAL_SECONDS
      continue
  elif [ ${HTTP_CODE} -ge 500 ]  &&  [ ${HTTP_CODE} -le 599 ]; then
      echo "Server error ($HTTP_CODE) while polling, retrying in $POLL_INTERVAL_SECONDS seconds... (attempt $poll_count, elapsed: ${elapsed_time}s)"
      sleep $POLL_INTERVAL_SECONDS
      continue
  elif [ ${HTTP_CODE} -ge 400 ] && [ ${HTTP_CODE} -le 499 ]; then
      echo "Client error ($HTTP_CODE) while polling: $RESPONSE_BODY"
      exit 1
  fi

  GATE_STATUS=$(echo "$RESPONSE_BODY" | jq -r '.data.attributes.gate_status')

  if [ "$GATE_STATUS" = "pass" ]; then
      echo "Gate evaluation PASSED"
      exit 0
  elif [ "$GATE_STATUS" = "fail" ]; then
      echo "Gate evaluation FAILED"
      exit 1
  else
      echo "Evaluation still in progress (status: $GATE_STATUS), retrying in $POLL_INTERVAL_SECONDS seconds... (attempt $poll_count, elapsed: ${elapsed_time}s)"
      sleep $POLL_INTERVAL_SECONDS
      continue
  fi
done

Le script :

  • Reçoit trois entrées : service, environment et version. version est requis si la porte comporte des règles de détection de déploiement défectueux APM. Vous pouvez également ajouter identifier et primary_tag si nécessaire.
  • Envoie une requête pour démarrer l’évaluation et enregistre le evaluation_id. Gère les codes de réponse HTTP :
    • 5xx : erreur serveur, réessaie avec un délai.
    • 4xx : erreur client, l’évaluation échoue.
    • 2xx : évaluation lancée.
  • Interroge l’endpoint du statut de l’évaluation avec le evaluation_id jusqu’à ce que l’évaluation soit terminée :
    • 5xx : erreur serveur, réessaie avec un délai.
    • 404 : évaluation pas encore lancée, réessaie avec un délai.
    • 4xx (sauf 404) : erreur client, l’évaluation échoue.
    • 2xx : vérifiez gate_status et réessayez avec un délai si ce n’est pas terminé.
  • Interroge toutes les 15 secondes jusqu’à ce que l’évaluation soit terminée ou que le temps d’interrogation maximal (10800 secondes = 3 heures par défaut) soit atteint.
  • Si toutes les tentatives sont épuisées pour la requête initiale (réponses 5xx), le script traite cela comme un succès pour être résilient aux défaillances de l’API.

Adaptez le script à votre cas d’utilisation. Il utilise curl (pour effectuer la requête) et jq (pour traiter le JSON renvoyé). Si ces commandes ne sont pas disponibles, installez-les au début du script (par exemple, avec apk add --no-cache curl jq).

Les évaluations Deployment Gate sont asynchrones. Lorsque vous déclenchez une évaluation, elle est lancée en arrière-plan et l’API renvoie un ID d’évaluation que vous pouvez utiliser pour suivre sa progression :

  • Tout d’abord, demandez une évaluation Deployment Gate, ce qui lance le processus et renvoie un ID d’évaluation.
  • Ensuite, interrogez périodiquement l’endpoint du statut de l’évaluation avec l’ID d’évaluation pour récupérer le résultat une fois l’évaluation terminée. Il est recommandé d’interroger toutes les 10 à 20 secondes.

Remplacez ce qui suit :

Demandez une évaluation pour une porte qui existe déjà dans Datadog :

curl -X POST "https://api.<YOUR_DD_SITE>/api/v2/deployments/gates/evaluation" \
-H "Content-Type: application/json" \
-H "DD-API-KEY: <YOUR_API_KEY>" \
-H "DD-APPLICATION-KEY: <YOUR_APP_KEY>" \
-d @- << EOF
{
  "data": {
    "type": "deployment_gates_evaluation_request",
    "attributes": {
      "service": "transaction-backend",
      "env": "staging",
      "identifier": "my-custom-identifier",
      "version": "v123-456",
      "primary_tag": "region:us-central-1"
    }
  }
}
EOF

Attributs facultatifs :

  • identifier: Facultatif, par défaut default.
  • version: Requis pour les règles de détection de déploiement défectueux APM.
  • primary_tag: Optionnel, restreint l’analyse de détection de déploiement défectueux APM au tag principal sélectionné.

Note : Une réponse HTTP 404 peut signifier que la porte n’a pas été trouvée, ou que la porte a été trouvée mais ne contient aucune règle.

Si l’évaluation Deployment Gate a été lancée avec succès, un code d’état HTTP 202 est renvoyé :

{
   "data": {
       "id": "<random_response_uuid>",
        "type": "deployment_gates_evaluation_response",
        "attributes": {
            "evaluation_id": "e9d2f04f-4f4b-494b-86e5-52f03e10c8e9"
        }
    }
}

Le champ data.attributes.evaluation_id contient l’identifiant unique de cette évaluation Deployment Gate.

Récupérez le statut d’une évaluation Deployment Gate en interrogeant l’endpoint de statut avec l’identifiant d’évaluation :

curl -X GET "https://api.<YOUR_DD_SITE>/api/v2/deployments/gates/evaluation/<evaluation_id>" \
-H "DD-API-KEY: <YOUR_API_KEY>" \
-H "DD-APPLICATION-KEY: <YOUR_APP_KEY>"

Remarque : Si vous appelez cet endpoint trop tôt après avoir demandé l’évaluation, une réponse HTTP 404 peut être renvoyée car l’évaluation n’a pas encore commencé. Réessayez quelques secondes plus tard.

Lorsqu’une réponse HTTP 200 est renvoyée, elle présente le format suivant :

{
   "data": {
       "id": "<random_response_uuid>",
       "type": "deployment_gates_evaluation_result_response",
       "attributes": {
           "dry_run": false,
           "evaluation_id": "e9d2f04f-4f4b-494b-86e5-52f03e10c8e9",
           "evaluation_url": "https://app.datadoghq.com/ci/deployment-gates/evaluations?index=cdgates&query=level%3Agate+%40evaluation_id%3Ae9d2f14f-4f4b-494b-86e5-52f03e10c8e9",
           "gate_id": "e140302e-0cba-40d2-978c-6780647f8f1c",
           "gate_status": "pass",
           "rules": [
               {
                   "name": "Check service monitors",
                   "status": "fail",
                   "reason": "One or more monitors in ALERT state: https://app.datadoghq.com/monitors/34330981",
                   "dry_run": true
               }
           ]
       }
   }
}

Le champ data.attributes.gate_status contient le résultat de l’évaluation, avec l’une de ces valeurs :

  • in_progress : L’évaluation Deployment Gate est toujours en cours ; continuez à interroger.
  • pass : L’évaluation Deployment Gate a réussi.
  • fail : L’évaluation Deployment Gate a échoué.

Remarque : Si le champ data.attributes.dry_run est true, le champ data.attributes.gate_status est toujours pass.

Recommandation pour la première intégration

Lors de l’intégration des portes de déploiement dans votre workflow Continuous Delivery, une phase d’évaluation aide à confirmer que le produit fonctionne comme prévu avant qu’il n’impacte les déploiements. Utilisez le mode d’évaluation Dry Run et la page Deployment Gates Evaluations :

  1. Créez une porte pour un service et réglez Evaluation Mode sur Dry Run.
  2. Ajoutez l’évaluation Deployment Gate à votre processus de déploiement. Tant que la porte est en mode Dry Run, l’API renvoie toujours pass et les déploiements ne sont pas affectés par le résultat de la porte.
  3. Après une certaine période (par exemple, 1 à 2 semaines), vérifiez les exécutions de Deployment Gate et des règles sur la page Deployment Gates Evaluations. L’interface utilisateur affiche le statut réel, vous permettant ainsi de voir quand Deployment Gate aurait échoué et pour quelle raison.
  4. Lorsque vous êtes certain que le comportement de la porte est conforme à vos attentes, modifiez la porte et passez le mode d’évaluation de Dry Run à Active. Ensuite, l’API commence à renvoyer le statut réel et les déploiements commencent à être promus ou annulés en fonction du résultat de la Deployment Gate.

Pour aller plus loin