
Naš gost, ustvarjalec orodij za razvijalce iz Pantheon, govori o tem, kako avtomatizirati implementacije WordPress-a z uporabo GitLab CI/CD.
V Ukvarjam se s povezovanjem z razvijalci, zato vedno iščem nove načine, kako pomagati razvijalcem WordPress in Drupal pri reševanju težav z avtomatizacijo v njihovih delovnih postopkih. Z veseljem preizkušam nova orodja in jih kombiniram, da dosežem učinkovito delo.
Pogosto vidim, kako se razvijalci mučijo z enim posredniškim strežnikom.
Nič kaj prijetnega - čakati na svojo vrsto, da uporabite posredniški strežnik ali strankam posredovati URL z oznako: "Tukaj poglejte, tukaj pa ne gledajte še."
— ena izmed super orodij Pantheon — rešujejo to težavo, saj lahko na zahtevo ustvarite okolja za Git veje. Vsako multidev okolje ima svoj URL in bazo podatkov, kar pomeni, da lahko razvijalci mirno delajo, preverjajo kakovost in pridobijo odobriti, ne da bi si stopili na prste.
Pantheon nima orodij za nadzor različic ali neprekinjeno integracijo in implementacijo (CI/CD). Kljub temu je to prilagodljiva platforma, s katero lahko integrirate vsa orodja.
Opazil sem tudi, da ekipe za razvoj uporabljajo druga orodja za razvoj in druga za implementacijo.
Na primer, imajo različna orodja za nadzor različic in CI/CD. Treba je delati z več orodji in se preklapljati med njimi, da bi urejali kodo in diagnosticirali težave.
Na Na voljo je popoln nabor orodij za razvoj: za nadzor različic, naloge, mergenje zahtevkov, vrhunski CI/CD pipeline, register kontejnerjev in vse podobno. Še nisem naletel na aplikacije, ki bi imele toliko pripravljene za upravljanje delovnega postopka razvoja.
Obožujem avtomatizacijo, zato sem raziskal, kako povezati Pantheon z GitLab, tako da se zaveze v glavno vejo na GitLab-u implementirajo v glavno razvojno okolje v Pantheon. Tudi merge requesti v GitLab-u lahko ustvarijo in implementirajo kodo v multidev okolja v Pantheon.
V tem priročniku bom opisal, kako nastaviti povezavo med GitLab-om in Pantheon ter optimizirati delovni postopek WordPress-a in Drupal-a.
Seveda lahko , toda vse bomo delali ročno, da bi raziskali in v prihodnosti uporabili to orodje ne samo za implementacijo.
Uvod
Za to objavo je treba razumeti, da Pantheon razdeli vsako spletno stran na tri elemente: koda, baza podatkov in datoteke.
V kodo spadajo datoteke CMS, kot so jedro, vtičniki in teme WordPress. Te datoteke se upravljajo v , ki ga gosti Pantheon, kar pomeni, da lahko razvijamo kodo iz GitLaba v Pantheon preko Git-a.
Datoteke v Pantheonu so medijske datoteke, torej slike za spletno stran. Običajno jih nalagajo uporabniki, Git pa jih ignorira.
, izvedite več o ili na pantheon.io.
Predpostavke
Moj projekt na Pantheonu in GitLabu se imenuje pantheon-gitlab-blog-demo. Ime projekta mora biti edinstveno. Tukaj bomo delali s spletno stranjo WordPress. Lahko uporabite tudi Drupal, vendar bo treba nekaj spremeniti.
Uporabljal bom , vi pa lahko delate v , če želite.
Ustvarite projekt
Najprej ustvarite (k temu se bomo še vrnili).
Sedaj . Nato namestimo WordPress za nadzorno ploščo strani.
Če ste kdaj željni kaj spremeniti, na primer odstraniti ali dodati vtičnike, počakajte. Spletna stran še ni povezana z GitLabom, mi pa želimo, da vse spremembe kode potekajo preko GitLaba.
Ko namestimo WordPress, se vrnemo na nadzorno ploščo Pantheon in spremenimo način razvoja v Git.
Začetni commit na GitLabu
Zdaj je treba prenesti začetno kodo WordPressa s spletne strani Pantheon na GitLab. Zato lokalno kloniramo kodo iz Git repozitorija spletne strani Pantheon, nato pa jo pošljemo v repozitorij GitLab.
Da bi bilo lažje in varneje, in ne bomo vsakič vnašali gesla, ko kloniramo repozitorij Pantheon Git. Hkrati bomo .
Za to lokalno kloniramo spletno stran Pantheon, tako da skopiramo ukaz iz polja Kloniraj z Git na nadzorni plošči strani.
Če potrebujete pomoč, preberite dokumentacijo .
Zdaj spremenimo git remote origin, da kaže na GitLab namesto Pantheon. To lahko storite .
Pojdimo v projekt GitLab in skopirajmo URL repozitorija iz spustnega seznama Kloniraj na strani podrobnosti projekta. Izberemo možnost Kloniraj z SSH, saj smo že nastavili SSH ključ.
Privzeto git remote za lokalno kopijo repozitorija kode— origin. To lahko spremenimo s git remote set-url origin [URL repozitorija GitLab], kjer namesto okvirov vnesemo dejanski URL.
Nazadnje, izvedemo git push origin master --force, da pošljemo kodo WordPress s spletne strani Pantheon na GitLab.
Parameter –force is required only once. Then in the commands
git pushit will not be present on GitLab.
Setting up credentials and variables
Remember how we locally added the SSH key to authenticate with Pantheon and GitLab? The SSH token can be used for authentication with GitLab and Pantheon.
GitLab has excellent documentation. Let's take a look at the .
Now we will perform the first two steps: we will create a new pair of SSH keys locally with ssh-keygen and add the private key as a variable in the project.
Then we will set SSH_PRIVATE_KEY kako in the project settings.
In the third and fourth steps, we will create the file .gitlab-ci.yml с таким содержимым:
before_script:
# See 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"For now, let's not commit the file .gitlab-ci.yml, later we will need to add something else to it.
Now we perform the fifth step and add the public key we created in the first step to the services you need access to in the build environment.
In our case, we want to access Pantheon from GitLab. We follow the instructions in the Pantheon document on and complete this step.
Remember: the private SSH key goes in GitLab, the public one in Pantheon.
We will set up a few more environment variables. The first one is called PANTHEON_SITE. Its value is the name of the Pantheon site on your machine.
The name on the machine is listed at the end of the Clone with Git command. You have already cloned the site locally, so this will be the name of the local repository directory.
Next, we will set the environment variable PANTHEON_GIT_URL. This is the Git repository URL for the Pantheon site that we have already used.
We enter only the SSH repository URL, without
git cloneand the site name at the end on the machine.
Phew. We've done that, now we can finish our file .gitlab-ci.yml.
Creating the deployment task
What we will initially do with GitLab CI is very similar to what we did with Git repositories before. But this time we will add the Pantheon repository as a second remote Git source and then push the code from GitLab to Pantheon.
To do this, we will set up deploy in deploy:dev, since we will be deploying to the development environment on Pantheon. As a result, the file .gitlab-ci.yml will look like this:
etape:
- desploeu
antes_script:
# Vezi 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"
desploeu:dev:
etapa: desploeu
mediu:
nume: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
doar:
- masterSpremenljivke SSH_PRIVATE_KEY, PANTHEON_SITE in PANTHEON_GIT_URL ar trebui să fie familiare — am setat aceste variabile de mediu anterior. Cu aceste variabile putem utiliza valorile în fișier .gitlab-ci.yml de mai multe ori, iar actualizarea lor va trebui să se facă doar într-un singur loc.
În cele din urmă, să adăugăm, să comităm și să trimitem fișierul .gitlab-ci.yml la GitLab.
Verificăm desfășurarea
Dacă am făcut totul corect, sarcina deploy:dev se va finaliza cu succes în GitLab CI/CD și va trimite commit-ul .gitlab-ci.yml în Pantheon. Să vedem.
Trimitem ramurile cererilor de fuziune în Pantheon
Aici vom folosi funcția mea preferată Pantheon — , unde putem crea medii suplimentare Pantheon pentru ramurile Git la cerere.
, așa că această secțiune poate fi sărită. Dar dacă aveți acces, puteți îmbunătăți semnificativ performanța, configurând crearea automată de medii multidev în Pantheon din cererile de fuziune GitLab.
Mai întâi, să facem o nouă ramură Git local cu ajutorul git checkout -b multidev-support. Acum, să mai facem o modificare în .gitlab-ci.yml.
Îmi place să indic numărul cererii de fuziune în numele mediei Pantheon. De exemplu, prima cerere de fuziune — mr-1, a doua — mr-2 itd.
Cererea de fuziune se schimbă, așa că trebuie să determinăm dinamic numele ramurilor Pantheon. În GitLab este simplu — trebuie să folosim .
Putem lua $CI_MERGE_REQUEST_IID, pentru a indica numărul cererii de fuziune. Să aplicăm toate acestea împreună cu variabilele de mediu globale pe care le-am menționat anterior și să adăugăm o nouă sarcină deploy:multidev la sfârșitul fișierului .gitlab-ci.yml.
deploy:multidev:
etapa: desploeu
mediu:
nume: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Checkout the merge request source branch
- git checkout $CI_COMMIT_REF_NAME
# Adaugă repositoarele git Pantheon ca remote suplimentar
- git remote add pantheon $PANTHEON_GIT_URL
# Trimite ramura sursă a cererii de fuziune către Pantheon
- git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
doar:
- cereri_de_fuziuneVa arăta asemănător sarcinii noastre deploy:dev, doar că ramura este trimisă în Pantheon, nu în master.
Am adăugat și am comis fișierul actualizat .gitlab-ci.yml, iar acum vom trimite noua ramură în GitLab cu git push -u origin multidev-support.
Acum să creăm o nouă cerere de fuziune din ramură multidev-support, klikom Kreirajte mješoviti zahtjev.
Nakon što kreiramo mješoviti zahtjev, pregledamo kako se izvršava CI/CD zadatak deploy:multidev.
Pogledajte— nova grana je poslana na Pantheon. Ali ako pređemo u odjeljak multidev na nadzornoj ploči web mjesta na Pantheonu, nećemo vidjeti novu sredinu
Pogledajmo odjeljak Git Branches.
Na kraju, naša grana mr-1 je stigla do Pantheona. Kreiraćemo sredinu iz grane mr-1.
Kreirali smo multidev sredinu, a sada se vraćamo u GitLab i provjeravamo odjeljak Operacije > Okruženja. Vidjet ćemo zapise za dev in mr-1.
To je zato što smo dodali zapis okolje с именем name in url u CI/CD zadatke. Ako dodirnemo ikonu otvorene sredine, preći ćemo na URL multidev sredine na Pantheonu.
Automatizujemo kreiranje multidev
U suštini, ovdje se možemo zaustaviti i samo se sjetiti da kreiramo multidev sredinu za svaki mješoviti zahtjev, ali ovaj proces možemo automatizovati.
Na Pantheonu postoji alat komandne linije , gdje možemo raditi s platformom automatski. U Terminusu možemo kreirati multidev sredine iz komandne linije— idealno za .
Treba nam novi mješoviti zahtjev da bismo to testirali. Kreirajmo novu granu pomoću git checkout -b auto-multidev-creation.
Da bismo koristili Terminus u GitLab CI/CD zadacima, potreban nam je token mašine za autentifikaciju u Terminusu i slika kontejnera s Terminus.
, čuvamo ga na sigurnom mjestu i dodajemo kao globalnu varijablu okruženja u GitLab s imenom PANTHEON_MACHINE_TOKEN.
Ako ste zaboravili kako dodavati varijable okruženja u GitLab, vratite se tamo gdje smo definirali
PANTHEON_SITE.
Kreiramo Dockerfile s Terminus
Ako ne koristite Docker ili ne volite datoteke Dockerfile, uzmite moju sliku registry.gitlab.com/ataylormi/pantheon-gitlab-blog-demo:latest i preskočite ovaj korak.
, gdje možemo izgraditi i postaviti Dockerfile za naš projekt. Hajde da kreiramo Dockerfile s Terminusom kako bismo radili s Pantheon.
Terminus je alat komandne linije na PHP-u, pa ćemo početi s PHP slikom. Instaliram Terminus putem Composer-a, tako da ću se osloniti na . Ustvarimo Dockerfile u katalogu lokalnog repozitorija s ovim 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"Slijedimo upute za izgradnju i slanje slika iz odjeljka Izgradite i pošaljite slike u , kako bismo izgradili sliku iz Dockerfile i poslali je na GitLab.
Otvaramo odjeljak Registar u GitLab projektu. Ako je sve prošlo kako treba, tamo će biti naša slika. Zapišite vezu na oznaku slike— potrebna nam je za datoteku .gitlab-ci.yml.
Oddelek script u zadatku deploy:multidev se začne šířit, takže ho přesuneme do samostatného souboru. Vytvoříme nový soubor 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..."
fiSkript se nachází v soukromém adresáři a . Máme skript pro naši logiku multidev. Nyní aktualizujeme sekci deploy:multidev datoteke .gitlab-ci.yml, aby to vypadalo takto:
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Spusťte skript pro nasazení multidev
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsMusíme se ujistit, že naše úlohy běží ve vytvořeném vlastním obraze, takže přidáme definici image s URL registru do .gitlab-ci.yml. Výsledkem je tento soubor .gitlab-ci.yml:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
stages:
- deploy
before_script:
# Viz 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:
# Spusťte skript pro nasazení multidev
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsPřidáváme, potvrzujeme a posíláme private/multidev-deploy.sh in .gitlab-ci.yml. Nyní se vracíme do GitLabu a čekáme, až se úloha CI/CD dokončí. Chvíli to potrvá: multidev se může vytvářet několik minut.
Pak jdeme zkontrolovat seznam multidev na Pantheon. O zázraku! Prostředí multidev mr-2 už je tady.
Zaključek
Moje týmy pracovaly mnohem efektivněji, když jsme začali otevírat merge requesty a automaticky vytvářet prostředí.
S výkonnými nástroji GitLab a Pantheon můžete automaticky propojit GitLab s Pantheon.
Jelikož používáme GitLab CI/CD, náš pracovní postup se může výrazně rozvíjet. Tady je několik nápadů, jak začít:
- Přidejte krok sestavení.
- Přidejte automatizované testování.
- Přidejte úlohu pro zajištění souladu s kódovými standardy.
- Přidejte .
Napište, co si myslíte o GitLab, Pantheon a automatizaci.
P.S. Věděli jste, že Terminus, nástroj příkazového řádku Pantheon, ?
Na verzi 2 našeho s podporo GitLab. Če se nočete ukvarjati z nastavitvami za vsak projekt, preizkusite to vtičnik in nam pomagajte testirati beta različico v2. Za ekipo Terminus build:project:create potreben je le Pantheon token in GitLab token. To bo razporedilo enega od primerov projekta s Composer in avtomatskim testiranjem, ustvarilo nov projekt v GitLab, novo spletno mesto Pantheon ter ju povezalo z okolijskimi spremenljivkami in SSH ključi.
O avtorju
Andrew Taylor ustvarja orodja za razvijalce v .
Izvor: habr.com
