ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 167
Numărul 166 Numărul 165 Numărul 164 Numărul 163 Numărul 162 Numărul 161 Numărul 160 Numărul 159 Numărul 158 Numărul 157 Numărul 156 Numărul 155 Numărul 154 Numărul 153 Numărul 152 Numărul 151 Numărul 150 Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 167
Abonamente

Automatizarea notelor de lansare: o abordare multi-echipă bazată pe MCP, Jira și Confluence

Patricia Georgiana Truța
Senior Software Engineer @ Banca Transilvania



PROGRAMARE

Producerea unor release notes corecte și consecvente într-un mediu de producție modern este surprinzător de dificilă. Echipele de dezvoltatori gestionează în mod obișnuit patru sau mai multe sisteme deconectate: Jira pentru urmărirea sarcinilor, GitHub Enterprise pentru pull requesturi, baze de date Oracle pentru modificări de schemă și Confluence ca destinație canonică de publicare - fără niciun instrument care să le integreze simultan. Rezultatul este un proces manual, predispus la erori, care întârzie lansările, produce documente inconsistente și consumă timp prețios de dezvoltare cu muncă de rutină. Acest articol prezintă Release Notes Automation, un lanț intern de instrumente care elimină complet acest proces, bazat pe o arhitectură pe trei layere: un generator CLI în Java 17, microservicii Spring Boot de tip MCP(Model Context Protocol) și un Wizard de introducere a datelor găzduit pe GitHub Pages.

Context și problemă

În cadrul Direcției Soluții Channels și Retail a Băncii Transilvania, livrarea unei versiuni de produs nu se termină odată cu merge-ul ultimului pull request. Pentru fiecare release trebuie produs un artefact suplimentar, adesea subestimat, dar important pentru lansare, audit și comunicarea cu părțile interesate non-tehnice: pagina de release notes publicată în Confluence. Acest artefact consolidează, într-o formă lizibilă, taskurile Jira închise, pull requesturile incluse, modificările de schemă din baza de date Oracle și metadatele de deployment, devenind sursa unică de adevăr pentru ceea ce a intrat efectiv în versiunea respectivă.

Ecosistemul tehnologic în care această activitate se desfășoară este unul tipic Enterprise: GitHub Enterprise, Jira, Oracle Database și Confluence - toate protejate de politicile corporative de securitate, cu acces prin proxy, tokenuri cu durată de viață limitată și segregare strictă pe echipe. În absența unei integrări dedicate, producerea unei singure pagini de release notes presupune un flux manual: un dezvoltator deschide simultan patru ferestre de browser, filtrează manual tichetele Jira, listează pull requesturile dintre două taguri în GitHub, rulează scripturi ad-hoc peste dicționarul Oracle și copiază manual rezultatele într-un șablon Confluence. Procesul consumă timp, produce inconsistențe între echipe, erori de omisiune și cuplaj între dezvoltator și mediul local.

Arhitectura sistemului

Soluția propusă este organizată pe trei layere care cooperează:

Generator CLI (Command Line Interface) în Java 17 - orchestrează un pipeline de colectare a datelor în șapte pași și redă rezultate structurate prin șabloane Mustache. Acesta reprezintă coloana vertebrală a automatizării, de la descoperirea repository-urilor de proiect sau modificările la nivel de bază de date până la publicarea paginii Confluence.

Microservicii Spring Boot de tip MCP - ridicate pe un server central dedicat, care expun un API unificat pentru GitHub Enterprise, Jira, Confluence și Oracle. Fiecare microserviciu implementează un set de unelte (tools) cu o interfață uniformă: POST /tools/{tool} cu un payload JSON, răspunzând cu un ToolResponse standard.

Wizardul de introducere a datelor bazat pe browser, găzduit pe GitHub Pages, permite oricărui membru al echipei să conducă procesul dintr-o singură interfață, fără a instala nimic local. Wizardul comunică printr-un limbaj standard cu backendul: POST /proxy/{server}/tools/{tool}, prin intermediul bridge-ului Node.js.

Bridge-ul ca punct unic de intrare

Bridge-ul Node.js (bridge-server/index.js) este componenta intermediară dintre wizardul din browser și cele patru microservicii MCP. Acesta rulează pe portul 443, prin HTTPS, și îndeplinește trei roluri: terminarea TLS (Transport Layer Security - nginx gestionează certificatele, bridge-ul servește plain HTTP intern pe portul 7100), validarea tokenului intern propagat de la wizard și rutarea cererii către microserviciul corespunzător pe baza headerului X-Team. Niciun microserviciu MCP nu este expus direct în rețea - la nivel de firewall este deschis exclusiv portul 443.

Modelul de acces este centrat pe utilizatori generici per echipă: fiecare echipă dispune de un set de credențiale partajate, stocate ca profil în browser, cu care se conectează direct la microserviciile MCP centralizate pe server intern BT. Acest design elimină necesitatea ca fiecare dezvoltator să ruleze servicii local, asigurând disponibilitate continuă și un singur punct de configurare.

Fluxul de date: de la Jira la Confluence în șapte pași

Fluxul începe când un utilizator accesează Wizardul din browser și se termină când pagina de release notes este publicată în Confluence:

  1. Descoperirea pull requesturilor din repository-urile proiectelor asociate echipei din configurația centrală.

Colectarea pull requesturilor din GitHub Enterprise pentru versiunea respectivă, prin unealta listPullRequests.

  1. Căutarea tichetelor Jira cu fixVersion setat, prin unealta searchIssues.

  2. Detectarea modificărilor de schema în baza de date Oracle, prin unealta listChanges care rulează scripturi SQL.

  3. Descoperirea automată a șablonului prin citirea structurii unei pagini Confluence existente.

  4. Compilarea informațiilor într-o pagină de release notes folosind șabloane Mustache.

  5. Publicarea paginii în Confluence prin unealta createPage.

Decizii tehnice cheie

Alegerile tehnice au fost ghidate de compatibilitatea dintre cerință și unealtă, nu de uniformitate cu orice preț. Spring Boot cu Java 17 a fost ales pentru microserviciile MCP, deoarece acestea realizează operațiunile intensive: interogări Oracle prin JDBC (Java Database Connectivity), parsarea răspunsurilor paginate din GitHub Pull Requests și generarea de XHTML conform schemei Confluence Storage Format. Node.js deservește bridge-ul, al cărui rol este pur orientat spre I/O: terminarea TLS, validarea tokenului și propagarea unui corp de răspuns JSON. Un proces Node.js cu Express ocupă sub 50 MB RAM și pornește în mai puțin de o secundă.

Descoperirea automată a șabloanelor funcționează prin citirea structurii unei pagini Confluence existente și adaptarea dinamică a formularului în funcție de echipă. Învățarea convențiilor din datele istorice reduce treptat necesitatea introducerii manuale a informațiilor; sistemul recunoaște tipare din release-urile anterioare și pre-populează câmpurile relevante în mod inteligent.

Deploymentul containerizat permite rularea în rețea internă fără acces la registre publice, prin transferul offline al imaginilor Docker.

Concluzii

Release Notes Automation demonstrează cum un protocol uniform (MCP), combinat cu arhitectura pe layere și containerizare, poate elimina munca manuală repetitivă într-un ecosistem Enterprise fragmentat. Designul prioritizează siguranța (tokenuri per echipă, fără credențiale locale pe mașina de lucru a dezvoltatorului), modularitate (tools protocol extensibil prin adăugarea de metode publice) și accesibilitate (wizard browser, fără instalare locală). Compromisurile asumate - șabloane prestabilite, lipsa versionării - reprezintă un consens explicit între scopul MVP (Minimal Viable Product) și ușurința de deployment. Soluția este azi operațională pe un server intern BT și deservește două echipe din cadrul Direcției Soluții Channels și Retail a Băncii Transilvania.

Bibliografie

  1. medium.com/@vikalp481/building-mcp-server-with-spring-boot-4e803f4709e2

  2. github.com/stephanj/GitHubMCP

Conferință TSM

NUMĂRUL 166 - AI for Programmers

Sponsori

  • Banca Transilvania
  • Betfair
  • MHP
  • .msg systems
  • P3 group
  • Cognizant Softvision
  • BMW TechWorks Romania

INTERVIURI