Automatisert arbeidsflyt for distribusjon er et flott verktøy som alle programvareutviklingsgrupper må ha. Utgivelsesprosessen, når den er rask, sikker og feiltolerant, kan spare tid for å utvikle flere flotte ting. Og den gode nyheten at det er mange gode verktøy for å lage en automatisert utgivelses syklus.
I denne artikkelen skal jeg introdusere deg et distribusjonsverktøy kalt Deployer. Jeg liker å bruke den fordi den er skrevet i PHP, er lett å sette opp, og har mange praktiske funksjoner for å integrere distribusjonsprosessen i lagets arbeidsflyt.
Først av alt, la oss se strukturen av distribusjonsprosessen med Deployer. Den består av tre hoveddeler: a distribuere serveren til init distribusjon, a produksjon eller staging server å være vert for søknaden din, og a git repository å lagre koden til søknaden din.
Når du initierer en distribusjonsprosess, kjører du et distribusjonsskript på distribusjonsserveren. Etter dette kobles distribusjonsserveren til produksjonsserveren med SSH og gjør vedlikeholdsdisplayene fra produksjonsserveren som kloning av koden fra et git-lager, oppdatering av komponentens avhengigheter og andre ting du trenger for å få en vellykket utgivelse.
For alle å være klarert i denne kjeden, vil vi opprette og installere SSH-sertifikater til serverne og depotet.
Vi må opprette en SSH-godkjenningsnøkkel på en produksjonsserver og dele den med et git-repository. Hvis du ikke har SSH-godkjenningsnøkler på distribusjonsserveren din, kjør du ssh-keygen
og følg instruksjonene. Keygen vil opprette en offentlig nøkkel i en fil ~ / .Ssh / id_rsa.pub
.
Nå kan du installere det på kontoen til ditt lager. Hvis du ikke vet hvordan du gjør det, kan du se på eksempelet til GitHub fra de relaterte koblingene nederst i artikkelen, eller spørre varslingstjenesten for å få hjelp.
Det er også bedre å lage en SSH-nøkkel på distribusjonsserveren din for å bli klarert på produksjonsmaskinen. Bruk disse kommandoene til å lage en passordløs SSH-forbindelse mellom distribusjons- og produksjonsserverne.
vagrant @ localserver: ~ $ ssh-keygen vagrant @ localserver: ~ $ ssh-copy-id -i ~ / .ssh / id_rsa.pub www-data@my_project.com
Med alle sertifikater installert, er vi klare til å installere Deployer.
Installasjonen av Deployer er like enkelt som installasjonen av Composer. Du må laste ned PHP Arkiv og gjøre det til en global kommando:
curl -LO https://deployer.org/deployer.phar mv deployer.phar / usr / local / bin / dep chmod + x / usr / lokal / bin / dep
La oss se versjonen av Deployer for å se om alt er riktig installert:
vagrant @ localserver: ~ $ dep - versjon Deployer 6.0.3
Alt ser bra ut, og vi er klare til å lage vårt første distribusjonsskript.
For å initialisere Deployer for prosjektet ditt, kjør dep init
. Dette vil utføre et verktøy for å generere et distribusjonsskript, som vil be deg om en prosjekttype og repository-kobling og vil opprette deploy.php
fil i gjeldende katalog. La oss se på denne filen og hovedfunksjonene som brukes i en oppskrift.
Funksjonene sett
og få
arbeid med konfigurasjonsverdiene, og en snarvei til en getter kan brukes med a løpe
kommando:
sett ('current_path', '~ / my_application'); løp ('rm current_path / runtime / *');
Hver konfigurasjonsverdi kan overstyres for hver vert. Vi kan sette opp en distribusjonsbane og SSH-bruker for vårt program i vårt distribusjonsskript:
vert ('my_project.com') -> bruker ('www-data') -> sett ('deploy_path', '~ / application');
For å definere dine egne oppgaver, bruk oppgave
funksjon og løpe
å kjøre en kommando på produksjonsserveren:
oppgave ('disk_free', funksjon () $ df = run ('df -h /'); writeln ($ df););
Og kjør det med dep
og funksjonsnavnet som parameter:
vagrant @ localserver: / vagrant / deployer $ dep disk_free ➤ Utfør oppgave disk_free Filsystemstørrelse Brukt Avail Bruk% Montert på / dev / md0 7.4G 4.7G 2.4G 67% / ✔ Ok
Nå kan du se gjennom distribusjonsfilen og endre alle nødvendige parametre til konfigurasjonen av søknaden din.
Vi har allerede installert Deployer, installert SSL-sertifikater til distribusjons- og produksjonsserverne, og laget distribusjonsskriptet, så endelig er det på tide å trekke alt sammen og gjøre den første distribusjonen til produksjonen.
For å distribuere programmet, ring bare dep distribuere
:
Hvis noe har gått galt, kan du rulle tilbake til den tidligere distribuerte versjonen i ett trinn:
vagrant @ localserver: ~ $ dep rollback ✔ Gjennomføre oppgave tilbakelevering
Ser lett ut, gjør det ikke?
La oss nå sjekke hva som ble opprettet på vår produksjonsserver. Takket være Deployer, kan vi gjøre dette enkelt med snarvekkommandoer. Prøve dep ssh
å koble til en server direkte ved hjelp av konfigurasjonen fra distribusjonsskriptet, eller eksternt utføre en kommando via SSH-tunnel med dep løpe
. Denne kommandoen støtter også variabler som vi har satt i skriptet.
Så la oss se på distribusjonsbanen:
vagrant @ localserver: ~ $ dep run "tre deploy_path". ├── nåværende -> / home / user / my_project / releases / 3 ├─ - utgivelser │ ├── 1 │ │ ├── composer.json │ │ ├── config.php -> / home / user / my_project / delt / config.php │ │ ├── README.md │ │ ├── runtime -> / hjem / bruker / data / my_project / delt / runtime │ │ ├── leverandør │ │ └── ... │ │ └── web │ │ └── index.php │ ├── 2 │ │ ... │ └── 3 │ ... └─ - delt ├── config.php └── runtime
Det viktigste er utgivelser
katalog, hvor Deployer lagrer de siste versjonene av applikasjonen vår. Etter hver vellykket distribusjon eller tilbakeringing, kobler den nåværende
til aktivert utgivelse. Endelig har vi en delt
katalog, som lagrer filer og mapper fra shared_dirs
og shared_files
som vi har satt i skriptfilen.
Ved den første distribusjonen vil Deployer kopiere disse filene til en delt dir og opprette en kobling fra utgivelser
dir til delt
dir. Neste gang vil det bare legge til en lenke fra utgivelsesfilene til filene og mappene i den delte katalogen. Du kan også endre hvilken som helst fil i en delt katalog, og Deployer vil beholde den uten endringer på hver distribusjon, for eksempel, dette er nyttig for konfigurasjonsfiler.
I tillegg, hvis du har en composer.json
fil i roten til depotet ditt, vil Deployer ringe Komponist for å opprette en leverandørkatalog og oppdatere alle nødvendige avhengigheter. Hvis du ikke lagrer Composer-filen i rotkatalogen, kan du opprette en egendefinert oppgave for å oppdatere den.
Og nå er det på tide å integrere applikasjonen som distribueres til våre prosesser.
Hvert lag har sine egne distribusjonskonfigurasjoner og prosesser for å automatisere, så Deployer har enkle verktøy for å utvide standardkonfigurasjonen og legge til tilpassede oppgaver. For eksempel kan verten din ha regelen om å lagre applikasjoner og webroot på forskjellige steder, uten rett til å endre konfigurasjonen av Apache eller Nginx.
Men det er en måte å komme over denne symbolsk linken til regelbruk. Så vi legger til en oppgave for dette:
Oppgave ('deploy: public_html', funksjon () run ('ln -sf deploy_path / current / web /var/www/my_application.com'););
Og legg den til hovedutplasseringsoppgaven som en del av en utgivelsesperiode:
oppgave ('deploy', [// ... 'distribuere: public_html', // ...]);
Kjør nå distribusjonsskriptet igjen og kontroller om alt er riktig med dep ssh
.
Deployer har mange oppskrifter for å integrere med tredjeparter som kan utvide grunnleggende funksjonalitet. Vi kan bruke Komponist til å installere dem:
komponist krever distribusjon / oppskrifter --dev
Jeg liker å bruke Oppsummering oppskrift. For å aktivere det, bør vi gå til siden Slack oppskrift, klikk på Legg til i Slack knappen, og velg kanalen for å sende varsler. Da vil vi få Slack webhook og legge til denne koden til distribusjon.
// krever slakk oppskrift krever 'oppskrift / slack.php'; // sett slack webhook sett ('slack_webhook', / * din slanke webhook * /); // varsle slakk etter vellykket distribusjon etter ('suksess', 'slakk: varsle: suksess');
Etter disse endringene sender Deployer en melding som denne til distribusjonskanalen:
Nå kan du legge til laget ditt i kanalen, slik at alle som er involvert, kan bli varslet.
I denne opplæringen har vi installert Deployer og opprettet et distribusjonsskript som kan brukes til å distribuere applikasjonen fra et git-repository til en produksjons- eller oppstartsserver med bare ett klikk.
Det kan også integreres i teamprosesser. For eksempel kan et program distribueres automatisk etter endringer i master-grenen og varsling kan gjøres på en slakk kanal om vellykket distribusjon.
Hvis du har noen spørsmål, ikke nøl med å stille spørsmål i kommentarene til artikkelen.