
Naš gost, kreator alata za programere iz Pantheona, priča kako automatizirati WordPress deploye koristeći GitLab CI/CD.
U Bavim se odnosima s programerima, pa uvijek tražim nove načine da pomognem programerima WordPressa i Drupala da riješe probleme s automatizacijom radnih procesa. U tu svrhu volim eksperimentirati s novim alatima i kombinirati ih kako bismo radili učinkovitije.
Često viđam kako se programeri muče s jednim posredničkim serverom.
Nije baš ugodno čekati svoj red za korištenje posredničkog servera ili slati klijentima URL s napomenom: „Ovdje gledajte, a ovdje nemojte još.”
— jedan od sjajnih alata Pantheona — rješava ovaj problem jer je moguće po zahtjevu kreirati okruženja za grane Git-a. Svako multidev okruženje ima svoj URL i bazu podataka, pa programeri mogu nesmetano raditi, provjeravati kvalitetu i dobiti odobrenje, ne gazići jedni drugima po petama.
No u Pantheonu nema alata za kontrolu verzija ili kontinuiranu integraciju i deploy (CI/CD). Međutim, to je fleksibilna platforma s kojom možete integrirati bilo koje alate.
Također sam primijetio da timovi za razvoj koriste različite alate, a za gradnju i deploy — druge.
Na primjer, imaju različite alate za kontrolu verzija i CI/CD. Moraju se mučiti i prelaziti između alata da bi uređivali kod i dijagnosticirali probleme.
Na ima potpun paket alata za razvoj: za kontrolu verzija, tikete, merge requeste, najbolji CI/CD pipeline u klasi, registar kontejnera i sve to. Još nisam naišao na aplikacije koje imaju toliko toga za upravljanje razvojnim procesom.
Obožavam automatizaciju, pa sam proučio kako spojiti Pantheon s GitLabom, tako da se commiti u glavnu granu na GitLabu deployavaju u glavnom razvoju u Pantheonu. Također, merge requesti na GitLabu mogu kreirati i deployati kod u multidev okruženja u Pantheonu.
U ovom vodiču ću opisati kako postaviti vezu između GitLaba i Pantheona i optimizirati radni proces WordPressa i Drupala.
Naravno, , ali sve ćemo raditi ručno, kako bismo proučili i u budućnosti koristili ovaj alat ne samo za deploy.
Uvod
Za ovaj post treba razumjeti da Pantheon razdvaja svaku web stranicu na tri elementa: kod, bazu podataka i datoteke.
Kod uključuje datoteke CMS-a, kao što su jezgra, dodaci i teme WordPressa. Ove datoteke se upravljaju u , koji se nalazi na Pantheonu, što znači da možemo implementirati kod iz GitLaba u Pantheon putem Gita.
Datoteke na Pantheonu nazivamo medijskim datotekama, tj. slikama za stranicu. Obično ih učitavaju korisnici, a Git ih ignorira.
, saznajte više o ili na pantheon.io.
Pretpostavke
Moj projekt na Pantheonu i GitLabu zove se pantheon-gitlab-blog-demo. Ime projekta mora biti jedinstveno. Ovdje ćemo raditi s web stranicom WordPressa. Možemo uzeti i Drupal, ali će trebati malo promjena.
Ja ću koristiti , a vi možete raditi u , ako želite.
Kreiramo projekt
Za početak kreiramo (o tome ćemo se još posvetiti).
Sada . Zatim instaliramo WordPress za nadzornu ploču stranice.
Ako vas to vabi da nešto promijenite, poput uklanjanja ili dodavanja dodataka, izdržite. Stranica još nije povezana s GitLabom, a želimo da sve promjene u kodu prođu kroz GitLab.
Kada instaliramo WordPress, vraćamo se na nadzornu ploču stranice Pantheon i mijenjamo način razvoja na Git.
Početni commit na GitLabu
Sada trebamo prebaciti početni kod WordPressa s web stranice Pantheon na GitLab. Za to kloniramo kod iz Git repozitorija web stranice Pantheon lokalno, a zatim ga šaljemo u GitLab repozitorij.
Da bi sve bilo jednostavnije i sigurnije, i nećemo svaki put unositi lozinku kada kloniramo Pantheon Git repozitorij. Usput već .
Za to kloniramo web stranicu Pantheon lokalno, kopirajući naredbu iz polja Clone with Git na nadzornoj ploči stranice.
Ako vam treba pomoć, pročitajte dokumentaciju .
Sada ćemo promijeniti git remote origin, kako bismo ukazali na GitLab umjesto Pantheona. To možemo učiniti .
Idemo na GitLab projekt i kopiramo URL repozitorija iz padajućeg izbornika Clone na stranici s detaljima projekta. Odabiremo opciju Clone with SSH, jer smo već postavili SSH ključ.
Po defaultu git remote za lokalnu kopiju koda repozitorija - origin. To se može promijeniti s git remote set-url origin [URL repozitorija GitLab], gdje umjesto zagrada unosimo stvarni URL.
Na kraju, pokrećemo git push origin master --force, kako bismo poslali kod WordPressa s web stranice Pantheon na GitLab.
Parametar –force treba koristiti samo jednom. Zatim u komandama
git pushna GitLab-u neće biti.
Postavljamo korisničke podatke i varijable
Sjećate se kako smo lokalno dodali SSH ključ za autorizaciju na Pantheon i GitLab? SSH token se može koristiti za autorizaciju na GitLab-u i Pantheon-u.
GitLab ima odličnu dokumentaciju. Pogledajmo .
Sada ćemo izvršiti prva dva koraka: stvorit ćemo novi par SSH ključeva lokalno s ssh-keygen i dodati privatni ključ kao varijablu u projekt.
Zatim ćemo postaviti SSH_PRIVATE_KEY kao u postavkama projekta.
U trećem i četvrtom koraku stvorit ćemo datoteku .gitlab-ci.yml s takvim sadržajem:
before_script:
# Pogledajte https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"Za sada nećemo komitirati datoteku .gitlab-ci.yml, kasnije ćemo dodati još nečega.
Sada izvršavamo peti korak i dodajemo javni ključ koji smo stvorili u prvom koraku uslugama kojima želite pristup u okruženju izrade.
U našem slučaju želimo da GitLab ima pristup Pantheon-u. Slijedimo upute u dokumentu Pantheon o i izvršavamo ovaj korak.
Sjećamo se: privatni SSH - u GitLab-u, javni - u Pantheon-u.
Postavićemo još nekoliko varijabli okruženja. Prva se zove PANTHEON_SITE. Njena vrijednost je ime Pantheon stranice na vašem računalu.
Ime na računalu navedeno je na kraju komande Clone with Git. Već ste lokalno klonirali stranicu, tako da će to biti ime direktorija lokalnog repozitorija.
Zatim ćemo postaviti varijablu okruženja PANTHEON_GIT_URL. To je URL repozitorija Git za Pantheon stranicu koju smo već koristili.
Unosimo samo URL SSH repozitorija, bez
git clonei imena stranice na računalu na kraju.
Uf. To smo uradili, sada možemo završiti našu datoteku .gitlab-ci.yml.
Stvaramo zadatak za implementaciju
Ono što ćemo isprva raditi s GitLab CI vrlo je slično onome što smo radili s Git repozitorijima ranije. No ovaj put dodajemo Pantheon repozitorij kao drugi udaljeni Git izvor, a zatim šaljemo kod iz GitLab-a u Pantheon.
Za to ćemo postaviti deploy i deploy:dev, jer ćemo implementirati u razvojnu sredinu na Pantheon-u. Kao rezultat, datoteka .gitlab-ci.yml će izgledati ovako:
faze:
- implementacija
prije_script:
# Pogledajte https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
implementacija:dev:
faza: implementacija
okruženje:
ime: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
skripta:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
samo:
- masterVarijable SSH_PRIVATE_KEY, PANTHEON_SITE i PANTHEON_GIT_URL trebali bi izgledati poznato — već smo postavili te varijable okoline. Sa tim varijablama moći ćemo koristiti vrijednosti u datoteci .gitlab-ci.yml više puta, a ažurirati ih trebamo samo na jednom mjestu.
Na kraju, dodajmo, potvrđujemo i pošaljimo datoteku .gitlab-ci.yml na GitLab.
Provjeravamo implementaciju
Ako smo sve napravili ispravno, zadatak deploy:dev uspješno će se izvršiti u GitLab CI/CD i poslati commit .gitlab-ci.yml u Pantheon. Pogledajmo.
Šaljemo grane zahtjeva za spoj na Pantheon
Ovdje ćemo koristiti svoju omiljenu funkciju Pantheon — , gdje možemo po zahtjevu stvoriti dodatna okruženja Pantheon za grane Git.
, tako da ovaj dio možete preskočiti. No, ako imate pristup, možete značajno povećati produktivnost postavljanjem automatskog stvaranja multidev okruženja na Pantheonu iz zahtjeva za spoj GitLab.
Prvo ćemo napraviti novu Git granu lokalno pomoću git checkout -b multidev-support. Sada ćemo opet napraviti neke izmjene u .gitlab-ci.yml.
Sviđa mi se nazivati broj zahtjeva za spoj u imenu okruženja Pantheon. Na primjer, prvi zahtjev za spoj — mr-1, drugi — mr-2 i tako dalje.
Zahtjev za spoj se mijenja, pa moramo dinamički odrediti imena Pantheon grana. Na GitLabu je to lako — potrebno je koristiti .
Možemo uzeti $CI_MERGE_REQUEST_IID, da odredimo broj zahtjeva za spoj. Primijenimo sve to zajedno s globalnim varijablama okoline koje smo ranije definirali i dodajmo novu zadaću deploy:multidev na kraju datoteke .gitlab-ci.yml.
deploy:multidev:
faza: implementacija
okruženje:
ime: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
skripta:
# Provjerite izvornu granu zahtjeva za spoj
- git checkout $CI_COMMIT_REF_NAME
# Dodajte Pantheon git repozitorij kao dodatni remote
- git remote add pantheon $PANTHEON_GIT_URL
# Pushed the merge request source branch to Pantheon
- git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
samo:
- merge_requestsBit će slično našoj zadaći deploy:dev, samo što se grana šalje u Pantheon, a ne u master.
Dodali smo i potvrdili ažuriranu datoteku .gitlab-ci.yml, a sada ćemo poslati novu granu u GitLab s git push -u origin multidev-support.
Sada ćemo stvoriti novi merge request iz grane multidev-support, pritiskom na Stvori merge request.
Nakon što smo stvorili merge request, pogledajmo kako se izvršava CI/CD zadatak deploy:multidev.
Pogledajte — nova grana je poslana na Pantheon. No, ako pređemo u odjeljak multidev na nadzornoj ploči web stranice na Pantheonu, nećemo vidjeti novu okolinu
Pogledajmo odjeljak Git Branches.
Kao rezultat, naša grana mr-1 je stigla do Pantheona. Stvorimo okolinu iz grane mr-1.
Stvorili smo multidev okolinu, a sada se vraćamo u GitLab i zavirujemo u odjeljak Operations > Environments. Vidjet ćemo zapise za dev i mr-1.
To je zato što smo dodali zapis okruženje s nazivom ime i url u CI/CD zadatke. Ako pritisnemo ikonu otvorene okoline, otići ćemo na URL multidev okoline na Pantheonu.
Automatiziramo stvaranje multidev
U načelu, ovdje možemo stati i jednostavno ne zaboraviti stvarati multidev okolinu za svaki merge request, ali ovaj proces možemo automatizirati.
Na Pantheonu postoji alat za naredbeni redak , gdje možemo raditi s platformom automatski. U Terminusu možemo stvarati multidev okoline iz naredbenog retka — savršeno za .
Trebamo novi merge request kako bismo to testirali. Stvorimo novu granu pomoću git checkout -b auto-multidev-creation.
Da bismo koristili Terminus u GitLab CI/CD zadacima, potreban je token za stroj za autentifikaciju u Terminus i slika kontejnera s Terminusom.
, spremamo ga na sigurnom mjestu i dodajemo kao globalnu varijablu okoline u GitLab s imenom PANTHEON_MACHINE_TOKEN.
Ako ste zaboravili kako dodavati varijable okoline u GitLab, vratite se tamo gdje smo definirali
PANTHEON_SITE.
Stvaramo Dockerfile s Terminusom
Ako ne koristite Docker ili ga ne volite, Dockerfile, uzmite moju sliku registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest i preskočite ovaj odjeljak.
, gdje možemo sastaviti i objaviti Dockerfile za naš projekt. Stvarajmo Dockerfile s Terminusom kako bismo radili s Pantheonom.
Terminus je alat na PHP naredbenom retku, tako da počinjemo s PHP slikom. Instaliram Terminus putem Composera, zato ću uzeti . Kreiramo Dockerfile u direktoriju lokalnog repozitorija s takvim sadržajem:
# Use the official Composer image as a parent image
FROM composer:1.8
# Update/upgrade apk
RUN apk update
RUN apk upgrade
# Make the Terminus directory
RUN mkdir -p /usr/local/share/terminus
# Install Terminus 2.x with Composer
RUN /usr/bin/env COMPOSER_BIN_DIR=/usr/local/bin composer -n --working-dir=/usr/local/share/terminus require pantheon-systems/terminus:"^2"Slijedite upute za izgradnju i slanje slika iz odjeljka Build and push images u , kako bismo sastavili sliku iz Dockerfile i poslali je u GitLab.
Otvorimo odjeljak Registry u GitLab projektu. Ako je sve prošlo po planu, tu će biti naša slika. Zapišite vezu na tag slike — potrebna nam je za datoteku .gitlab-ci.yml.
Odjeljak script u zadatku deploy:multidev počelo se širiti, pa hajde da ga prebacimo u odvojenu datoteku. Kreiramo novu datoteku private/multidev-deploy.sh:
#!/bin/bash
# Store the mr- environment name
export PANTHEON_ENV=mr-$CI_MERGE_REQUEST_IID
# Authenticate with Terminus
terminus auth:login --machine-token=$PANTHEON_MACHINE_TOKEN
# Checkout the merge request source branch
git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon Git repository as an additional remote
git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
git push pantheon $CI_COMMIT_REF_NAME:$PANTHEON_ENV --force
# Create a function for determining if a multidev exists
TERMINUS_DOES_MULTIDEV_EXIST()
{
# Stash a list of Pantheon multidev environments
PANTHEON_MULTIDEV_LIST="$(terminus multidev:list ${PANTHEON_SITE} --format=list --field=id)"
while read -r multiDev; do
if [[ "${multiDev}" == "$1" ]]
then
return 0;
fi
done <<< "$PANTHEON_MULTIDEV_LIST"
return 1;
}
# If the mutltidev doesn't exist
if ! TERMINUS_DOES_MULTIDEV_EXIST $PANTHEON_ENV
then
# Create it with Terminus
echo "No multidev for $PANTHEON_ENV found, creating one..."
terminus multidev:create $PANTHEON_SITE.dev $PANTHEON_ENV
else
echo "The multidev $PANTHEON_ENV already exists, skipping creating it..."
fiSkripta se nalazi u privatnom direktoriju i . Imamo skriptu za našu multidev logiku. Sada ćemo ažurirati deo deploy:multidev datoteke .gitlab-ci.yml, da to izgleda ovako:
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Pokreni multidev deploy skriptu
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsMoramo osigurati da se naši zadaci izvršavaju u stvorenom prilagođenom imidžu, pa ćemo dodati definiciju image sa URL-om registra u .gitlab-ci.yml. Na kraju smo dobili ovakav fajl .gitlab-ci.yml:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
stages:
- deploy
before_script:
# Pogledajte https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
deploy:dev:
stage: deploy
environment:
name: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
only:
- master
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Pokreni multidev deploy skriptu
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsDodajemo, komitujemo i šaljemo private/multidev-deploy.sh i .gitlab-ci.yml. Sada se vraćamo u GitLab i čekamo da se izvrši CI/CD zadatak. Imajte strpljenja: multidev može biti kreiran nekoliko minuta.
Zatim idemo da gledamo spisak multidev na Pantheon. O čudo! Multidev okruženje mr-2 već je ovde.
Zaključak
Moj tim je postao mnogo veseliji kada smo počeli otvarati merge requeste i automatski kreirati okruženja.
S moćnim alatima GitLab i Pantheon, možete automatski povezati GitLab s Pantheonom.
Budući da koristimo GitLab CI/CD, našem radnom procesu će biti mesto za rast. Evo nekoliko ideja da započnemo:
- Dodajte korak izgradnje.
- Dodajte automatizovano testiranje.
- Dodajte zadatak za osiguravanje usklađenosti sa standardima koda.
- Dodajte .
Napišite šta mislite o GitLab-u, Pantheon-u i automatizaciji.
P.S. Da li ste znali da se Terminus, alat komandne linije Pantheon, ?
Mi u Pantheon-u smo se dobro potrudili na verziji 2 našeg s podrškom za GitLab. Ako ne želite gubiti vrijeme na postavljanje za svaki projekt, isprobajte ovaj plugin i pomozite nam testirati beta verziju v2. Za tim Terminus build:project:create potreban je samo Pantheon token i GitLab token. On će postaviti jedan od primjera projekta s Composerom i automatskim testiranjem, stvoriti novi projekt u GitLabu, novu stranicu na Pantheonu i spojiti ih pomoću varijabli okruženja i SSH ključeva.
O autoru
Andrew Taylor stvara alate za programere u .
Izvor: habr.com
