Puncte:2

Cum să implementați integrarea continuă cu Puppet și mai multe servicii

drapel sa

Î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:

Marionetă și Git

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?

Puncte:2
drapel cn

Cel mai simplu (dar nu neapărat cel mai bun) mod pe care îl văd de a face acest lucru este să configurez ceva care să necesite ca CI pentru a construi mediul de testare, necesită potrivirea numelor de ramuri sau ceva de genul. Acest lucru ar forța dezvoltatorii să creeze o ramură în codul Puppet pentru a-și implementa versiunea de compilare.

În mod eficient:

  1. Dave Dezvoltatorul creează o nouă ramură de caracteristici a unui serviciu, pe baza unui bilet: de ex. caracteristică/JIRA-999-o anumită sarcină
  2. Dave își împinge codul
  3. CICD detectează o nouă sucursală sau PR sau orice altceva, începe să ruleze
  4. Etapa conductei caută la fel numele sucursalei în depozitul Puppet
  5. Dacă ramură nu există, pipeline-ul dă erori și îi spune lui Dave să creeze ramura
  6. Dacă există, poate adăugați ceva validare pentru a verifica că a fost schimbat cel puțin?
  7. Testele rulează
  8. Testele trec, toată lumea este fericită

Nu este o problemă ușor de rezolvat, iar această abordare ar trebui să vă asigurați că dezvoltatorii știau unde să actualizeze versiunea (poate într-un fișier de date Hiera?).

Singurul alt mod în care pot vedea acest lucru funcționează este o schimbare mult mai mare către ceva de genul containerizării, permițându-vă să gestionați un strat (infrastructura) cu Puppet și apoi să implementați containere deasupra. Apoi, puteți oferi dezvoltatorilor instrumentele pentru a implementa containerele, păstrând în același timp controlul asupra platformei.

Un ultim gând aleatoriu - ați putea face unele dintre testele în cloud pentru a evita utilizarea codului Puppet pentru orice altceva, cu excepția prod/staging? Sau să folosești într-un fel marioneta bazată pe cloud?

Shaul Behr avatar
drapel sa
Aceasta este o sugestie bună. După cum se dovedește, înclin mai mult spre ideea de a sparge monolitul Puppet și de a pune manifestul Puppet relevant pentru serviciu în interiorul depozitului de servicii. Dar răspunsul tău este demn de recompensă. Mulțumiri!
Puncte:1
drapel us

Provocarea aici este că codul este deconectat de la implementare.

Abordarea mea ar fi să îi transmit lui Puppet Git commit hash, iar apoi Puppet să folosească acel commit hash pentru a ridica codul de implementat. Cu toate acestea, nu știu dacă Puppet acceptă transmiterea unor astfel de argumente la joburi.

În timpul fazei de check-out a depozitului de cod real, hash-ul va fi înregistrat și apoi trecut la Puppet.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.