Încercăm să implementăm o conductă de integrare continuă în mediul nostru. Avem o mulțime de servicii diferite, fiecare cu propriul său depozit Git.Implementarea se face prin Puppet, folosind un clasificator de noduri extern care determină ce clase să fie implementate pentru fiecare tip de gazdă. Și fișierele Puppet se află în propriul lor depozit Git, așa cum este prezentat aici:
Numai că nu sunt doar 3 servicii, este mai degrabă 100. Deci, proiectul Puppet este acest monolit monstruos de manifeste multiple și, desigur, este în propriul său depozit Git independent.
Acum, vine micuțul meu, însărcinat cu configurarea unui model pentru CI, astfel încât atunci când cineva solicită să fuzioneze o ramură de la, de exemplu, Serviciul A, în master, ar trebui să putem lansa o construcție CI care va creați un mediu virtual, implementați Serviciul A pe unele VM și asigurați-vă că noua ramură trece toate testele automate. Desigur, problema este că, pentru a implementa o nouă versiune a Serviciului A, nu numai că trebuie să o construiesc, dar trebuie și să actualizez manifestul Puppet pentru a face referire la noua versiune de construcție... și fișierele Puppet se află în un repo complet independent, nu pe filiala mea. Așa că nu am nicio modalitate ușoară de a-i spune Puppet Master-ului asta pentru acest ramură, trebuie să folosim versiunea CI, nu versiunea master.
Nu pot fi prima persoană care vrea să configureze CI pentru un mediu ca acesta, dar am căutat soluții pe web și am găsit gol. Poate că folosesc termeni de căutare greșiți.
Poate cineva să sugereze un model de design adecvat care să-mi permită să implementez CI pentru toate depozitele mele de servicii?