Fluxul de lucru automat pentru implementare este un instrument excelent pe care trebuie să-l aibă fiecare echipă de dezvoltare software. Procesul de eliberare, atunci când este rapid, sigur și tolerant la erori, poate economisi timp pentru a dezvolta lucruri mai mari. Și vestea bună că există multe instrumente excelente pentru crearea unui ciclu automat de eliberare.
În acest articol, vă voi prezenta un instrument de implementare numit Deployer. Îmi place să-l folosesc pentru că este scris în PHP, este ușor de configurat și are multe caracteristici la îndemână pentru a integra procesul de implementare în fluxul de lucru al echipei.
Mai întâi, să vedem structura procesului de implementare cu Deployer. Se compune din trei părți principale: a implementați serverul la implementarea init, a server de producție sau staționare pentru a vă găzdui aplicația și a git repository pentru a stoca codul aplicației dvs..
Când inițiați un proces de implementare, executați un script de implementare pe serverul de implementare. După aceasta, serverul Implementați se conectează la serverul de producție cu SSH și face lucrurile de întreținere de pe serverul de producție cum ar fi donarea codul dintr-un depozit git, actualizarea dependențele compozitorului, și alte lucruri care aveți nevoie pentru a avea o eliberare de succes.
Pentru ca toată lumea să aibă încredere în acest lanț, vom crea și instala certificate SSH către servere și depozit.
Trebuie să creați o cheie de autentificare SSH pe un server de producție și să o partajați într-un depozit git. Dacă nu aveți chei de autentificare SSH pe serverul de implementare, executați ssh-keygen
și urmați instrucțiunile. Keygen va crea o cheie publică într-un fișier ~ / .Ssh / id_rsa.pub
.
Acum îl puteți instala în contul depozitului dvs. Dacă nu știți cum să faceți acest lucru, uitați-vă la exemplul lui GitHub din legăturile asociate din partea de jos a articolului sau solicitați ajutor pentru serviciul de găzduire din depozit.
De asemenea, este mai bine să creați o cheie SSH pe serverul dvs. de implementare pentru a obține încredere pe mașina de producție. Utilizați aceste comenzi pentru a realiza o conexiune SSH fără parole între serverele de implementare și producție.
pribeag @ LocalServer: ~ $ ssh-keygen hoinar @ LocalServer: ~ $ ssh-copy-id ~ -I / .ssh / id_rsa.pub www-data@my_project.com
Cu toate certificatele instalate, suntem gata să instalați Deployer.
Instalarea aplicației Deployer este la fel de simplă ca instalarea Compozitorului. Trebuie să descărcați PHP Archive și să o faceți o comandă globală:
ondularea -LO https://deployer.org/deployer.phar mv deployer.phar / usr / local / bin / chmod + x DEP / usr / local / bin / DEP
Să verificăm versiunea Deployer pentru a vedea dacă totul este instalat corect:
vagrant @ localserver: ~ $ dep --version Deployer 6.0.3
Totul arată grozav și suntem gata să creăm primul scenariu de implementare.
Pentru a inițializa Deployer pentru proiectul dvs., rulați Dep
. Acesta va executa un utilitar pentru a genera un script de implementare, care vă va cere un tip de proiect și o legătură de repository și veți crea deploy.php
fișier în directorul curent. Să aruncăm o privire asupra acestui fișier și a principalelor funcții care sunt utilizate într-o rețetă.
Funcțiile a stabilit
și obține
lucrați cu valorile de configurare și o comandă rapidă a unui getter poate fi folosită cu un alerga
comanda:
set ('curent_path', '~ / my_application'); rulați ('rm actual_path / runtime / *');
Fiecare valoare de configurare poate fi înlocuită pentru fiecare gazdă. Putem configura o cale de implementare și un utilizator SSH pentru aplicația noastră în scriptul nostru de implementare:
gazdă ('my_project.com') -> utilizator ('www-data') -> set ('deploy_path', '~ / application');
Pentru a defini sarcinile proprii, utilizați sarcină
funcție și alerga
pentru a rula o comandă pe serverul de producție:
task ('disk_free', funcția () $ df = run ('df -h /'); writeln ($ df););
Și apoi rulați-l DEP
și numele funcției ca param:
pribeag @ LocalServer: / hoinar / Deployer $ DEP disk_free ➤ Executare sarcină disk_free Filesystem Dimensiune folosit Disp Utilizați% Montat pe / dev / md0 7,4 g 4,7g 2.4G 67% / ✔ Ok
Acum puteți examina fișierul implementat și puteți schimba toate paramurile necesare în configurația aplicației.
Am instalat deja Deployer, certificate SSL instalate la Implementați și de producție a serverelor și a făcut script-ul de implementare, astfel încât în cele din urmă este timpul să-l trage toate împreună și să facă prima desfășurare a producției.
Pentru a implementa aplicația, trebuie doar să sunați dep implementa
:
Dacă sa întâmplat ceva în neregulă, puteți reveni la versiunea implementată anterior într-un singur pas:
vagrant @ localserver: ~ $ dep rollback ✔ Executarea răsturnării sarcinii
Se pare ușor, nu-i așa??
Acum să verificăm ce a fost creat pe serverul nostru de producție. Mulțumită Deployer-ului, putem face acest lucru cu comenzi rapide. Încerca dep șsh
pentru a vă conecta la un server utilizând configurația din scriptul de implementare sau pentru a executa de la distanță o comandă prin tunel SSH cu dep run
. De asemenea, această comandă acceptă variabilele pe care le-am setat în script.
Deci, haideți să aruncăm o privire la calea de desfășurare:
vagrant @ localserver: ~ $ dep run "copac deploy_path". ├── curent -> / home / utilizator / my_project / releases / 3 ├── comunicate de │ ├── 1 │ │ ├── composer.json │ │ ├── config.php -> / home / utilizator / my_project / partajat / config.php │ │ ├── README.md │ │ ├── rulare -> / home / utilizator / date / my_project / partajate / execuție │ │ ├── furnizor │ │ └── ... │ │ └── web │ │ │ └── index.php ├── 2 │ │ ... │ │ └── 3 ... └── partajate ├── config.php └── de rulare
Principalul lucru este de presă
, unde Deployer stochează ultimele versiuni ale aplicației noastre. După fiecare lansare sau revizuire reușită, acesta se leagă actual
la eliberarea activată. În cele din urmă, avem a impartit
director, care stochează fișierele și folderele din shared_dirs
și shared_files
pe care le-am setat în fișierul de script.
La prima implementare, Deployer va copia aceste fișiere într-un director partajat și va crea un link de la de presă
dir la impartit
dir. Data viitoare, acesta va adăuga doar un link de la fișierele de lansare la fișierele și folderele din directorul partajat. De asemenea, puteți schimba orice fișier dintr-un director partajat, iar Deployer-ul îl va păstra fără modificări la fiecare implementare - de exemplu, acest lucru este util pentru fișierele de configurare.
În plus, dacă aveți a composer.json
fișier în rădăcina depozitului dvs., Deployer va apela Composer pentru a crea un director furnizor și pentru a actualiza toate dependențele necesare. Dacă nu stocați fișierul Compozitor în directorul rădăcină, puteți crea o sarcină personalizată pentru ao actualiza.
Și acum este timpul să integrăm implementarea aplicației în procesele noastre.
Fiecare echipă are propriile configurații de implementare și procesul de automatizare, astfel încât deployerul dispune de instrumente ușoare pentru a extinde configurația standard și pentru a adăuga sarcini personalizate. De exemplu, găzduirea dvs. poate avea regula de a stoca aplicații și webroot în diferite locuri, fără drepturi de a modifica configurația Apache sau Nginx.
Dar există o modalitate de a trece peste această regulă - folosiți legături simbolice. Deci, vom adăuga o sarcină pentru aceasta:
sarcină ( 'deploy: public_html', function () run ( 'ln -sf deploy_path / curent / web /var/www/my_application.com'););
Apoi, adăugați-l la sarcina principală de implementare ca parte a unui ciclu de lansare:
sarcină ("implementare", [// ... "deploy: public_html", // ...]);
Acum rulați din nou scriptul de implementare și verificați dacă totul este corect cu dep șsh
.
Depozitorul are multe rețete pentru a se integra cu terțe părți care pot extinde funcționalitatea de bază. Putem folosi Compozitor pentru a le instala:
compozitorul cere deployer / rețete --dev
Îmi place să folosesc rețeta de notificare Slack. Pentru ao activa, ar trebui să mergem la pagina rețetă Slack, dă clic pe Adăugați la Slack și selectați canalul pentru a trimite notificări. Apoi, vom primi Socket Webhook și vom adăuga acest cod la implementare.
// cere rețetă slack necesită 'recipe / slack.php'; // set slack webhook set ('slack_webhook', / * slack webhook * /); // informați-vă după eliberarea după succes ("succes", "slab: notificare: succes");
După aceste modificări, Deployerul va trimite un mesaj ca acesta pe canalul de implementare:
Acum puteți adăuga echipa dvs. pe canal, astfel încât toți cei implicați să poată fi anunțați.
În acest tutorial am instalat Deployer și a creat un script deploy care poate fi folosit pentru a implementa aplicația noastră de la un depozit git la un server de producție sau de așteptare într-un singur clic.
De asemenea, poate fi integrat în procesele de echipă - de exemplu, o aplicație poate fi implementată automat după modificările din sucursala principală și poate fi făcută o notificare pe un canal Slack despre desfășurarea cu succes.
Dacă aveți întrebări, nu ezitați să adresați întrebări în comentariile articolului.