de Robin Bobbitt

Cum să implementați aplicația Cloud Foundry cu frică (aproape) zero folosind Travis CI

Cum sa implementati aplicatia Cloud Foundry cu frica aproape zero
Fotografie de William Canady de la Pexels

Implementările aplicației în cloud ar trebui să fie nedureroase. Ar trebui să putem implementa un nou cod în mod continuu, de câte ori dorim, fără teamă. implementare albastru-verde modelul ne permite să facem acest lucru.

Recent m-am alăturat unei noi echipe la locul de muncă care desfășura aplicații node.js Cloud Foundry pe IBM Cloud folosind Travis cu Furnizor de implementare Bluemix CloudFoundry. Acest lucru funcționează excelent pentru configurarea rapidă și ușoară a implementării dvs. cu doar câțiva parametri.

Din păcate, fiecare implementare înseamnă o întrerupere a aplicației dvs., deoarece versiunea existentă se oprește și noua versiune pornește. De asemenea, nu există nicio verificare a faptului că noul cod este bun înainte ca vechiul cod să fie eliminat.

Cu tehnica de implementare albastru-verde, aplicația dvs. curentă (Albastru) continuă să ruleze și să preia trafic de rețea. În timp ce noul dvs. cod de aplicație (verde) este implementat pe o rută temporară. Noua aplicație Green poate fi validată pe ruta temporară. Dacă există probleme, implementarea se oprește. Aplicația Blue continuă să deservească traficul neîntrerupt. Odată ce aplicația verde este verificată, routerul este actualizat pentru a indica aplicația verde. Albastrul poate fi oprit.

În acest mod, există întotdeauna o versiune a aplicației disponibilă pentru a prelua traficul. Orice problemă de implementare sau de execuție a noului cod nu va afecta disponibilitatea aplicației dvs.

Am început imediat să caut în jurul meu o modalitate de a ne implementa aplicațiile în albastru-verde. În interesul de a scrie cât mai puțin cod personalizat, am decis să folosesc pluginul cf-albastru-verde-deploy pentru interfața de linie de comandă (CLI) Cloud Foundry. Voi povesti cum am făcut asta aici.

Voi presupune că dacă ați aterizat aici, probabil că ați trecut de punctul de a pur și simplu „A începe” cu Travis. Nu voi acoperi acele detalii aici.

Dacă nu sunteți interesat să continuați și doriți doar să ajungeți direct la bunuri, puteți clona eșantionul meu de lucru de la GitHub.

Instalarea CF CLI și a pluginului albastru-verde

Deoarece nu folosim Cloud Foundry furnizor de implementare, trebuie să instalăm noi înșine CLI Cloud Foundry, precum și pluginul de implementare albastru-verde. Putem face acest lucru în before_deploy faza de Travis construiește ciclul de viață.

Rețineți că before_deploy faza rulează înainte de fiecare furnizor de implementare. Dacă faceți lucruri suplimentare în faza de implementare, vă recomandăm să mutați acești pași în after_success fază (care se execută o singură dată după o construcție reușită) pentru a evita instalările suplimentare inutile. De asemenea, ați putea muta acești pași în scriptul de implementare în sine, pe care îl vom scrie în continuare.

Indiferent de locul în care l-ați pus, iată scenariul:

- echo "Installing cf cli"- test x$TRAVIS_OS_NAME = "xlinux" && rel="linux64-binary" || rel="macosx64"; wget "https://cli.run.pivotal.io/stable?release=${rel}&source=github" -qO cf.tgz && tar -zxvf cf.tgz && rm cf.tgz- export PATH="$PATH:."- cf --version
- echo "Installing cf blue-green deploy plugin"- cf add-plugin-repo CF-Community https://plugins.cloudfoundry.org- cf install-plugin blue-green-deploy -r CF-Community -f

Comanda pentru instalarea CLI vine direct de la CloudFoundry DPL sursă. Comenzile pentru instalarea pluginului de implementare albastru-verde provin de la plugin CITEȘTE-MĂ.

Invocarea implementării albastru-verde

Pentru a invoca implementarea albastru-verde, vom folosi furnizor de implementare script, care execută o comandă furnizată și verifică starea zero ca indiciu al succesului.

deploy:# on update to master branch we deploy to Cloud Foundry- provider: script  skip_cleanup: true  script:  ./scripts/cf-blue-green-deploy.sh blue-green-cf-travis manifest.yml prod  on:    branch: master

Rețineți că skip_cleanup este setat sa true. Fără aceasta, pluginul CLI și CLI-ul de implementare cf-albastru pe care tocmai l-ați instalat ar fi eliminate înainte de implementarea în desfășurare.

scriptul cf-blue-green-deploy.sh se conectează la API-ul Cloud Foundry și invocă pluginul de implementare albastru-verde. În plus față de specificarea unui nume de aplicație și a unui fișier manifest, puteți trece și un script de testare a fumului către pluginul de implementare albastru-verde. Pluginul va apela scriptul de testare a fumului după ce a fost implementat noul cod al aplicației, dar înainte de trecerea traseului aplicației la noua aplicație. Acest lucru vă permite să rulați orice număr de teste împotriva noului cod înainte ca vreun trafic real să îl acceseze.

Scriptul testului de fum este trecut un singur argument. Argumentul este adresa URL temporară a aplicației nou implementate. Dacă scriptul de testare a fumului iese cu succes, implementarea albastru-verde se va finaliza prin comutarea rutei către noua aplicație. Dacă scriptul de testare a fumului iese cu o eroare, traficul continuă să curgă către versiunea veche a aplicației. Noua versiune rămâne disponibilă pentru depanare.

În proiectul meu de exemplu, scriptul de testare a fumului invocă un API / version și verifică dacă revine cu un cod de stare 200.

În proiectele noastre reale de la locul de muncă, rulăm o colecție Postman împotriva aplicației nou implementate. Doriți ca suita dvs. de testare a fumului să fie suficient de mare încât să vă simțiți încrezători în noul dvs. cod, dar nu atât de mare încât să treacă mult timp până la finalizarea unei implementări sau testele fulgiante vă împiedică să finalizați o implementare de succes.

Opțional, puteți rula o suită mai cuprinzătoare de teste de regresie ca after_deploy pas, după ce noul dvs. cod este live.

Efectele secundare ale unei implementări albastru-verzi în IBM Cloud

Există câteva nuanțe ale acestei abordări de care trebuie să știți dacă vă implementați pe IBM Cloud. Deoarece creați o nouă instanță de aplicație CF de fiecare dată când implementați albastru-verde, ghidul aplicației dvs. se va schimba. Dacă utilizați serviciul de monitorizare a disponibilității, testele configurate se vor pierde atunci când ghidul dvs. se schimbă.

Pentru a rezolva acest lucru, ridicați o aplicație falsă permanentă. Scrieți testele pentru aplicația dvs. implementată albastru-verde în configurația acestei aplicații fictive. Puteți specifica orice adresă URL atunci când scrieți testele de monitorizare a disponibilității.

În mod similar, dacă utilizați serviciul Log Analysis, veți vedea că atunci când faceți clic pe linkul „Vizualizați în Kibana” din fila Jurnalele tabloului de bord al aplicației, veți fi lansat într-o căutare Kibana pe șirul de ghidare al aplicației. Orice jurnal de aplicație înainte de cea mai recentă implementare nu va apărea. Pentru a rezolva acest lucru, puteți pur și simplu să filtrați numele aplicației, mai degrabă decât ghidul aplicației.

Un alt serviciu care are aceeași problemă este Auto-Scaling. De fiecare dată când o nouă aplicație este ridicată ca parte a implementării albastru-verde, are nevoie de reconfigurarea politicii sale de scalare automată. Există o interfață de linie de comandă disponibilă, pe care probabil o puteți folosi pentru a crea acest script, dar încă nu am avut nevoie să încerc asta.

Dacă oricare dintre aceste probleme este non-starter pentru dvs., aveți întotdeauna opțiunea de a scrie un script de implementare personalizat albastru-verde care utilizează două aplicații CF permanente, un albastru și un verde. Aceste două aplicații ar fi rând pe rând să fie live și să fie inactive. De exemplu, puteți configura ambele aplicații cu o politică de scalare automată.

Desigur, această abordare înseamnă că nu puteți profita de pluginul de implementare albastru-verde descris în această postare și trebuie să vă mențineți propriul script personalizat.

Înfășurându-se

În acest post, am examinat modul în care putem realiza o implementare cu risc redus, cu timp de nefuncționare zero, folosind Travis și pluginul de implementare cf-albastru-verde.

Într-un proiect real, am avea asigurări și mai mari, deoarece am avea la dispoziție o suită de teste unitare, iar erorile de acolo ar eșua construcția Travis înainte ca implementarea să aibă șansa de a rula. De asemenea, am avea potențial ramuri de dezvoltare și de configurare configurate pentru a fi implementate în propriile spații respective din organizația noastră Cloud Foundry, permițându-ne să validăm și să stabilizăm aplicația după cum este necesar înainte de a promova modificările producției.

Mulțumesc pentru lectură! Aceasta este prima mea poveste Medium și sper că ți s-a părut utilă.