Site icon Blog ARC Optimizer

Automatiser les notes de libération à Confluence avec les pipelines / blogs Bitbucket / Perficient

Automatiser les notes de libération à Confluence avec les pipelines / blogs Bitbucket / Perficient


Dans cet article de blog, je partagerai mon parcours de mise en œuvre d’une solution automatisée pour publier des notes de publication pour les déploiements de services à Confluence à l’aide de pipelines Bitbucket. Cela visait à rationaliser notre processus de publication et à garantir que toutes les informations pertinentes étaient facilement accessibles à notre équipe. En tirant parti d’outils comme Bitbucket et Confluence, nous avons réalisé une intégration transparente qui a amélioré notre flux de travail.

Étape 1: Configuration du pipeline

Nous avons configuré notre pipeline Bitbucket pour inclure une nouvelle étape pour publier des notes de version. Cela impliquait d’écrire un script dans le fichier bitbucket-ppelines.yml pour rassembler les informations nécessaires (SHA, numéro de construction et résumé des mises à jour).

Étape 2: générer des notes de libération

Nous avons retiré le résumé des mises à jour de nos messages de validation et des notes de publication. Pour assurer la qualité des résumés, nous avons souligné l’importance de rédiger des messages de validation détaillés et informatifs.

Étape 3: Publication à Confluence

À l’aide de l’API de Rest Cloud Confluence, nous avons automatisé la création de pages Confluence. Nous avons fait une page parent intitulée «Releases» et configuré le script pour publier une nouvelle page.

Variables de référentiel

Nous avons utilisé plusieurs variables de référentiel pour garder les informations sensibles sécurisées et rendre le script plus maintenable:

  • Repo_token: Le jeton s’authentifie avec l’API Bitbucket.
  • Confluence_Username: le nom d’utilisateur pour l’authentification Confluence.
  • Confluence_Token: Le jeton pour l’authentification de la confluence.
  • Confluence_space_key: la clé de l’espace de confluence où les notes de publication sont publiées.
  • Confluence_ancestor_id: l’ID de la page parent sous laquelle de nouvelles pages de notes de version sont créées.
  • Confluence_API_URL: L’URL du point de terminaison de l’API Confluence.

Détails du script

Voici le script que nous avons utilisé dans notre fichier bitbucket-ppelines.yml, ainsi qu’une explication de chaque pièce:

Étape 1: Définissez l’étape du pipeline

- step: &release-notes
      name: Publish Release Notes
      image: atlassian/default-image:3
  • Nom de l’étape: L’étape est nommée «Publish Release Notes».
  • Image Docker: Utilise l’image Atlassian / Default-Image: 3 Docker pour l’environnement.

Étape 2: Répertoriez les fichiers

script:
  - ls -la /src/main/resources/
  • Liste des fichiers: Le ls -la La commande répertorie les fichiers du répertoire spécifié pour s’assurer que les fichiers nécessaires sont présents.

Étape 3: Extraire le numéro de libération

- RELEASE_NUMBER=$(grep '{application_name}.version' /src/main/resources/application.properties | cut -d'=' -f2)
  • Extraire le numéro de libération: Le grep La commande extrait le numéro de version du fichier application.properties où la propriété {application_name}.version devrait être présent.

Étape 4: Créer un titre de version

- RELEASE_TITLE="Release - $RELEASE_NUMBER Build- $BITBUCKET_BUILD_NUMBER Commit- $BITBUCKET_COMMIT"
  • Créer un titre de version: Construisez le titre de version à l’aide du numéro de version, du numéro de construction BitBucket et de la validation SHA.

Étape 5: Obtenez un message de validation

- COMMIT_MESSAGE=$(git log --format=%B -n 1 ${BITBUCKET_COMMIT})
  • Obtenez un message de validation: La commande GIT LOG récupère le message de validation pour l’engagement actuel.

Étape 6: Vérifiez la demande de traction

- |
  if [[ $COMMIT_MESSAGE =~ pull\ request\ #([0-9]+) ]]; then
    PR_NUMBER=$(echo "$COMMIT_MESSAGE" | grep -o -E 'pull\ request\ \#([0-9]+)' | sed 's/[^0-9]*//g')
  • Vérifiez la demande de traction: Le script vérifie si le message de validation contient un numéro de demande de traction.
  • Extraire Numéro de relations publiques: Si un numéro de demande de traction est trouvé, il est extrait en utilisant Grep et SED.

Étape 7: Description de la demande d’attraction de récupération

RAW_RESPONSE=$(wget --no-hsts -qO- --header="Authorization: Bearer $REPO_TOKEN" "https://api.bitbucket.org/2.0/repositories/$BITBUCKET_WORKSPACE/$BITBUCKET_REPO_SLUG/pullrequests/${PR_NUMBER}")
PR_DESCRIPTION=$(echo "$RAW_RESPONSE" | jq -r '.description')
echo "$PR_DESCRIPTION" > description.txt
  • Recherche de PR Description: Utilise WGET pour récupérer la description de la demande de traction de l’API Bitbucket.
  • Description de l’analyse: Analyse la description en utilisant JQ et l’enregistre sur description.txt.

Étape 8: Préparez les données JSON

 AUTH_HEADER=$(echo -n "$CONFLUENCE_USERNAME:$CONFLUENCE_TOKEN" | base64 | tr -d '\n')
 JSON_DATA=$(jq -n --arg title "$RELEASE_TITLE" \
                    --arg type "page" \
                    --arg space_key "$CONFLUENCE_SPACE_KEY" \
                    --arg ancestor_id "$CONFLUENCE_ANCESTOR_ID" \
                    --rawfile pr_description description.txt \
                    '{
                      title: $title,
                      type: $type,
                      space: {
                        key: $space_key
                      },
                      ancestors: [{
                        id: ($ancestor_id | tonumber)
                      }],
                      body: {
                        storage: {
                          value: $pr_description,
                          representation: "storage"
                        }
                      }
                    }')
  echo "$JSON_DATA" > json_data.txt
  • Préparez l’en-tête Auth: Encode le nom d’utilisateur et le jeton Confluence pour l’authentification.
  • Construire la charge utile JSON: Utilise JQ pour construire la charge utile JSON pour la demande API Confluence.
  • Enregistrer les données JSON: Enregistre la charge utile JSON sur json_data.txt.

Étape 9: Publier à Confluence

  wget --no-hsts --method=POST --header="Content-Type: application/json" \
      --header="Authorization: Basic $AUTH_HEADER" \
      --body-file="json_data.txt" \
      "$CONFLUENCE_API_URL" -q -O -
  if [[ $? -ne 0 ]]; then
    echo "HTTP request failed"
    exit 1
  fi
  • Envoyer la demande de poste: Cette méthode utilise WGET pour envoyer une demande postale à l’API Confluence pour créer ou mettre à jour la page des notes de version.
  • Gestion des erreurs: Vérifie si la demande HTTP a échoué et sort avec un message d’erreur si c’est le cas.

Scénario

# Service for publishing release notes
- step: &release-notes
      name: Publish Release Notes
      image: atlassian/default-image:3
      script:
        - ls -la /src/main/resources/
        - RELEASE_NUMBER=$(grep '{application_name}.version' /src/main/resources/application.properties | cut -d'=' -f2)
        - RELEASE_TITLE="Release - $RELEASE_NUMBER Build- $BITBUCKET_BUILD_NUMBER Commit- $BITBUCKET_COMMIT"
        - COMMIT_MESSAGE=$(git log --format=%B -n 1 ${BITBUCKET_COMMIT})
        - |
          if [[ $COMMIT_MESSAGE =~ pull\ request\ #([0-9]+) ]]; then
            PR_NUMBER=$(echo "$COMMIT_MESSAGE" | grep -o -E 'pull\ request\ \#([0-9]+)' | sed 's/[^0-9]*//g')
            RAW_RESPONSE=$(wget --no-hsts -qO- --header="Authorization: Bearer $REPO_TOKEN" "https://api.bitbucket.org/2.0/repositories/$BITBUCKET_WORKSPACE/$BITBUCKET_REPO_SLUG/pullrequests/${PR_NUMBER}")
            PR_DESCRIPTION=$(echo "$RAW_RESPONSE" | jq -r '.description')
            echo "$PR_DESCRIPTION" > description.txt
            AUTH_HEADER=$(echo -n "$CONFLUENCE_USERNAME:$CONFLUENCE_TOKEN" | base64 | tr -d '\n')
            JSON_DATA=$(jq -n --arg title "$RELEASE_TITLE" \
                              --arg type "page" \
                              --arg space_key "$CONFLUENCE_SPACE_KEY" \
                              --arg ancestor_id "$CONFLUENCE_ANCESTOR_ID" \
                              --rawfile pr_description description.txt \
                              '{
                                title: $title,
                                type: $type,
                                space: {
                                  key: $space_key
                                },
                                ancestors: [{
                                  id: ($ancestor_id | tonumber)
                                }],
                                body: {
                                  storage: {
                                    value: $pr_description,
                                    representation: "storage"
                                  }
                                }
                              }')
            echo "$JSON_DATA" > json_data.txt
            wget --no-hsts --method=POST --header="Content-Type: application/json" \
              --header="Authorization: Basic $AUTH_HEADER" \
              --body-file="json_data.txt" \
              "$CONFLUENCE_API_URL" -q -O -
            if [[ $? -ne 0 ]]; then
              echo "HTTP request failed"
              exit 1
            fi
          fi


Résultats et avantages

  • L’automatisation a considérablement réduit l’effort manuel requis pour publier des notes de publication.
  • Le projet a amélioré l’efficacité globale du processus de version et la qualité de la documentation.

Conclusion

L’automatisation de la publication de notes de publication à Confluence à l’aide de pipelines Bitbucket a changé la donne pour notre équipe. Il a rationalisé notre processus de publication et assuré que toutes les informations pertinentes sont facilement disponibles. J’espère que ce billet de blog fournit des informations et une inspiration aux autres qui cherchent à mettre en œuvre des solutions similaires.






Source link
Quitter la version mobile