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