Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress
Naš gost, kreator alata za programere iz Pantheona, priča kako automatizirati WordPress deploye koristeći GitLab CI/CD.

U Pantheon 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š.”

Multidev okruženja — 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 GitLab 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, možemo mirrorati GitLab repozitorij, ali sve ćemo raditi ručno, kako bismo proučili GitLab CI 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 Git repozitoriju, 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.

Kreirajte besplatni račun, saznajte više o radnom toku Pantheona ili prijavite se za demo 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 Git naredbeni redak, a vi možete raditi u grafičkom sučelju, ako želite.

Kreiramo projekt

Za početak kreiramo GitLab projekt (o tome ćemo se još posvetiti).

Sada stvaramo WordPress stranicu na Pantheonu. 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.

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

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, dodajemo SSH ključ u Pantheon i nećemo svaki put unositi lozinku kada kloniramo Pantheon Git repozitorij. Usput već dodajemo SSH ključ na GitLab.

Za to kloniramo web stranicu Pantheon lokalno, kopirajući naredbu iz polja Clone with Git na nadzornoj ploči stranice.

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress
Ako vam treba pomoć, pročitajte dokumentaciju o radu s Git-om za Pantheon.

Sada ćemo promijeniti git remote origin, kako bismo ukazali na GitLab umjesto Pantheona. To možemo učiniti naredbom git remote.

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č.

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

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 push na 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 odjeljak o SSH ključevima kada koristite Docker executor u dokumentu o korištenju SSH ključeva s GitLab CI/CD.

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 GitLab CI/CD varijablu okruženja 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 dodavanju SSH ključa u Pantheon 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.

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

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 clone i 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 fazni deploy i zadataka 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:
    - master

Varijable 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.

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

Šaljemo grane zahtjeva za spoj na Pantheon

Ovdje ćemo koristiti svoju omiljenu funkciju Pantheon — multidev, gdje možemo po zahtjevu stvoriti dodatna okruženja Pantheon za grane Git.

Pristup multidev je ograničen, 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 predodređene varijable okoline.

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_requests

Bit ć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.

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

Nakon što smo stvorili merge request, pogledajmo kako se izvršava CI/CD zadatak deploy:multidev.

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

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

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

Pogledajmo odjeljak Git Branches.

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

Kao rezultat, naša grana mr-1 je stigla do Pantheona. Stvorimo okolinu iz grane mr-1.

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

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 Terminus, gdje možemo raditi s platformom automatski. U Terminusu možemo stvarati multidev okoline iz naredbenog retka — savršeno za GitLab CI.

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.

Stvaramo Pantheonov token za stroj, 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.

U GitLabu postoji registar kontejnera, 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 službenu Docker Composer sliku. 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 dokumentacije registra kontejnera, 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.

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

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..."
fi

Skripta se nalazi u privatnom direktoriju i ne omogućava web pristup na Pantheon. 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_requests

Moramo 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_requests

Dodajemo, 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.

Kako povezati GitLab i Pantheon i optimizirati radne procese za Drupal i WordPress

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:

Napišite šta mislite o GitLab-u, Pantheon-u i automatizaciji.

P.S. Da li ste znali da se Terminus, alat komandne linije Pantheon, može proširiti putem dodataka?

Mi u Pantheon-u smo se dobro potrudili na verziji 2 našeg dodatka za alate za izgradnju Terminus 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 Pantheon.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster