
VÄr gÀst, skaparen av utvecklarverktyg frÄn Pantheon, berÀttar hur man automatiserar WordPress-deploys med hjÀlp av GitLab CI/CD.
I Jag arbetar med utvecklarrelationer, sÄ jag letar alltid efter nya sÀtt att hjÀlpa WordPress- och Drupalutvecklare att lösa automationsproblem i sina arbetsflöden. För detta gillar jag att experimentera med nya verktyg och kombinera dem för effektivt arbete.
Jag ser ofta hur utvecklare brottas med en enda mellanserver.
Det Àr inte sÄ roligt att vÀnta pÄ sin tur att anvÀnda mellanservern eller att skicka URL:er till kunder med noteringen: 'HÀr kan du titta, men hÀr kan du vÀnta.'
 â ett av de coola verktygen frĂ„n Pantheon â löser detta problem, eftersom man pĂ„ begĂ€ran kan skapa miljöer för Git-grenar. Varje multidev-miljö har sin egen URL och databas, sĂ„ utvecklarna kan arbeta ostört, kontrollera kvaliteten och fĂ„ godkĂ€nnande utan att trampa varandra pĂ„ tĂ„rna.
Men Pantheon har inga verktyg för versionskontroll eller kontinuerlig integration och distribution (CI/CD). DÀremot Àr det en flexibel plattform som kan integrera alla verktyg.
Jag har ocksÄ mÀrkt att teamen anvÀnder olika verktyg för utveckling och för byggande och distribution.
Till exempel har de olika verktyg för versionskontroll och CI/CD. Man fÄr kÀmpa och vÀxla mellan verktygen för att redigera kod och diagnostisera problem.
PÄ Det finns en heltÀckande uppsÀttning utvecklingsverktyg: för versionskontroll, Àrenden, merge-förfrÄgningar, en bÀsta i klassen CI/CD-pipeline, containerregister och allt sÄdant. Jag har Ànnu inte stött pÄ applikationer som har sÄ mycket för att hantera utvecklingsarbetets flöde.
Jag Àlskar automatisering, sÄ jag har studerat hur man kopplar Pantheon till GitLab, sÄ att commits i huvudgrenen pÄ GitLab deployas till huvudutvecklingsmiljön i Pantheon. Och dessutom kan merge-förfrÄgningar pÄ GitLab skapa och deploya kod till multidev-miljöer i Pantheon.
I den hÀr guiden kommer jag att berÀtta hur man stÀller in en anslutning mellan GitLab och Pantheon och optimerar arbetsflödet för WordPress och Drupal.
Man kan, sjÀlvklart, , men vi kommer att göra allt manuellt för att grotta in i och i framtiden anvÀnda detta verktyg inte bara för deployment.
Introduktion
För detta inlÀgg behöver vi förstÄ att Pantheon delar varje webbplats i tre element: kod, databas och filer.
Koden inkluderar CMS-filer, sÄsom kÀrnan, plugins och teman för WordPress. Dessa filer hanteras i , som Àr placerat pÄ Pantheon, vilket innebÀr att vi kan distribuera kod frÄn GitLab till Pantheon med Git.
Filer i Pantheon avser mediafiler, det vill sÀga bilder för webbplatsen. Vanligtvis laddas de upp av anvÀndare, och Git ignorerar dem.
, lÀs mer om eller pÄ pantheon.io.
Antaganden
Mitt projekt pÄ Pantheon och GitLab heter pantheon-gitlab-blogg-demo. Projektets namn mÄste vara unikt. HÀr kommer vi att arbeta med en WordPress-webbplats. Vi kan Àven anvÀnda Drupal, men dÄ mÄste vissa Àndringar göras.
Jag kommer att anvÀnda , men du kan arbeta i , om du vill.
Skapar projekt
Börja med att skapa ett (detta kommer vi att Äterkomma till).
Nu . Sedan installerar vi WordPress för webbplatsens instrumentpanel.
Om du kÀnner för att göra nÄgra Àndringar, som att ta bort eller lÀgga till plugins, vÀnta lite. Webbplatsen Àr Ànnu inte kopplad till GitLab, och vi vill att alla kodÀndringar ska gÄ genom GitLab.
NÀr vi har installerat WordPress, gÄr vi tillbaka till Pantheons instrumentpanel och Àndrar utvecklingslÀget till Git.
Första commit pÄ GitLab
Nu mÄste vi överföra grundkoden för WordPress frÄn Pantheon-webbplatsen till GitLab. För detta klonar vi koden frÄn Pantheon-webbplatsens Git-repo lokalt och skickar sedan till GitLab-repositoriet.
För att göra det enklare och sÀkrare, och slipper ange lösenordet varje gÄng vi klonar Pantheon Git-repositoriet. Samtidigt lÀgger vi ocksÄ .
För detta klonar vi Pantheon-webbplatsen lokalt genom att kopiera kommandot frÄn fÀltet Clone with Git pÄ webbplatsens instrumentpanel.
Om du behöver hjÀlp, lÀs dokumentationen .
Nu Àndrar vi git remote origin, för att peka pÄ GitLab istÀllet för Pantheon. Detta kan göras .
Vi gÄr till GitLab-projektet och kopierar URL-adressen till repositoriet frÄn rullgardinsmenyn Clone pÄ projektets detaljsida. Vi vÀljer alternativet Clone with SSH, eftersom vi redan har konfigurerat SSH-nyckeln.
Som standard git remote för den lokala kopian av kodens repositorium â origin. Detta kan Ă€ndras med git remote set-url origin [URL till GitLab-repositoriet], dĂ€r vi skriver in den faktiska URL:en istĂ€llet för inom klamrar.
Till sist kör vi git push origin master --force, för att skicka WordPress-koden frÄn Pantheon-webbplatsen till GitLab.
Parametern âforce behövs bara en gĂ„ng. Sedan i kommandona
git pushkommer det inte att finnas pÄ GitLab.
StÀller in autentiseringsuppgifter och variabler
Kommer ni ihÄg hur vi lokalt lade till en SSH-nyckel för att autentisera oss hos Pantheon och GitLab? SSH-token kan anvÀndas för autentisering mot GitLab och Pantheon.
GitLab har utmÀrkt dokumentation. LÄt oss titta pÄ .
Nu ska vi genomföra de första tvÄ stegen: skapa ett nytt par SSH-nycklar lokalt med ssh-keygen och lÀgga till den privata nyckeln som en variabel i projektet.
Sedan stÀller vi in SSH_PRIVATE_KEY som i projektinstÀllningarna.
I det tredje och fjÀrde steget skapar vi filen .gitlab-ci.yml med följande innehÄll:
before_script:
# Se 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"Vi ska inte commit:a filen just nu .gitlab-ci.yml, senare mÄste vi lÀgga till nÄgot mer till den.
Nu genomför vi det femte steget och lÀgger till den offentliga nyckeln som vi skapade i det första steget till de tjÀnster som du behöver Ätkomst till i byggmiljön.
I vÄrt fall vill vi fÄ Ätkomst till Pantheon frÄn GitLab. Följ instruktionerna i Pantheon-dokumentationen om och genomför detta steg.
Kom ihÄg: den privata SSH-nyckeln Àr i GitLab, den offentliga Àr i Pantheon.
LÄt oss konfigurera nÄgra fler miljövariabler. Den första kallas PANTHEON_SITE. Dess vÀrde Àr namnet pÄ Pantheon-webbplatsen pÄ din maskin.
Namnet pÄ maskinen anges i slutet av kommandot Klona med Git. Du har redan klonat webbplatsen lokalt, sÄ detta blir namnet pÄ den lokala repository-katalogen.
Sedan stÀller vi in miljövariabeln PANTHEON_GIT_URL. Detta Àr URL:en till Git-repot för Pantheon-webbplatsen som vi redan har anvÀnt.
Vi anger endast SSH-repo-URL:en, utan
git cloneoch namnet pÄ webbplatsen pÄ maskinen i slutet.
Puh. Det Àr klart, nu kan vi avsluta vÄr fil .gitlab-ci.yml.
Skapar en deploy-uppgift
Det vi först kommer att göra med GitLab CI liknar mycket det vi gjorde med Git-repot tidigare. Men den hÀr gÄngen lÀgger vi till Pantheon-repot som en andra fjÀrrkÀlla för Git och skickar sedan koden frÄn GitLab till Pantheon.
För detta konfigurerar vi deploy och deploy:dev, eftersom vi ska deploya till utvecklingsmiljön pÄ Pantheon. Resultatet blir att filen .gitlab-ci.yml ser ut sÄ hÀr:
steg:
- distribuera
before_script:
# Se 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"
distribuera:dev:
steg: distribuera
miljö:
namn: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
endast:
- masterVariabler SSH_PRIVATE_KEY, PANTHEON_SITE och PANTHEON_GIT_URL bör se bekanta ut â vi har konfigurerat dessa miljövariabler tidigare. Med dessa variabler kan vi anvĂ€nda vĂ€rden i filen .gitlab-ci.yml mĂ„nga gĂ„nger, och uppdatera dem behöver vi bara göra pĂ„ ett stĂ€lle.
Slutligen lÀgger vi till, commitar och skickar filen .gitlab-ci.yml till GitLab.
Kontrollerar distributionen
Om vi har gjort allt rÀtt, kommer uppgiften deploy:dev att genomföras framgÄngsrikt i GitLab CI/CD och skicka commit .gitlab-ci.yml till Pantheon. LÄt oss kolla.
Skickar brancherna för merge-begÀran till Pantheon
HĂ€r kommer vi att anvĂ€nda min favoritfunktion pĂ„ Pantheon â , dĂ€r man kan skapa ytterligare miljöer pĂ„ Pantheon för Git-brancher pĂ„ begĂ€ran.
, sÄ detta avsnitt behöver kanske inte utföras. Men om du har tillgÄng kan du allvarligt öka produktiviteten genom att konfigurera automatisk skapande av multidev-miljöer pÄ Pantheon frÄn merge-begÀrningar i GitLab.
Först gör vi en ny Git-branch lokalt med hjÀlp av git checkout -b multidev-support. Nu Àndrar vi Äterigen nÄgot i .gitlab-ci.yml.
Jag gillar att ange numret pĂ„ merge-begĂ€ran i namnet pĂ„ Pantheon-miljön. Till exempel, den första merge-begĂ€ran â mr-1, den andra â mr-2 och sĂ„ vidare.
Merge-begĂ€ran förĂ€ndras, sĂ„ vi behöver dynamiskt bestĂ€mma namnen pĂ„ Pantheon-brancherna. PĂ„ GitLab Ă€r det enkelt â det gĂ€ller att anvĂ€nda .
Vi kan ta $CI_MERGE_REQUEST_IID, för att ange numret pÄ merge-begÀran. LÄt oss anvÀnda allt detta tillsammans med de globala miljövariabler som vi angav tidigare och lÀgga till en ny uppgift deploy:multidev i slutet av filen .gitlab-ci.yml.
deploy:multidev:
steg: distribuera
miljö:
namn: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Checka ut kÀllbranch för merge-begÀran
- git checkout $CI_COMMIT_REF_NAME
# LĂ€gg till Pantheon git-repositoriet som en extra remote
- git remote add pantheon $PANTHEON_GIT_URL
# Skicka kÀllbranch för merge-begÀran till Pantheon
- git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
endast:
- merge_requestsDet kommer att likna vÄr uppgift deploy:dev, förutom att branchen skickas till Pantheon, inte till master.
Vi har lagt till och committat den uppdaterade filen .gitlab-ci.yml, och nu ska vi skicka den nya branchen till GitLab med git push -u origin multidev-support.
LÄt oss nu skapa en ny merge-förfrÄgan frÄn grenen multidev-support, genom att trycka pÄ Skapa merge-förfrÄgan.
NÀr vi har skapat merge-förfrÄgan, lÄt oss se hur CI/CD-uppgiften utförs deploy:multidev.
Titta - en ny gren har skickats till Pantheon. Men om vi gÄr till avsnittet multidev pÄ Pantheons instrumentbrÀda, ser vi inte den nya miljön dÀr
LÄt oss titta pÄ avsnittet Git Branches.
Till slut har vÄr gren mr-1 nÄtt Pantheon. LÄt oss skapa en miljö av grenen mr-1.
Vi har skapat en multidev-miljö, nu gÄr vi tillbaka till GitLab och kollar in avsnittet Operations > Environments. Vi kommer att se poster för dev och mr-1.
Det beror pÄ att vi har lagt till en post miljö med namnet name och url i CI/CD-uppgifterna. Om vi klickar pÄ ikonen för den öppna miljön, kommer vi att gÄ till URL:en för multidev-miljön pÄ Pantheon.
Vi automatiserar skapandet av multidev
I princip kan vi stanna hÀr och bara komma ihÄg att skapa en multidev-miljö för varje merge-förfrÄgan, men den hÀr processen kan automatiseras.
Pantheon har ett kommandoradsverktyg , dÀr vi kan arbeta automatiskt med plattformen. I Terminus kan vi skapa multidev-miljöer frÄn kommandoraden - perfekt för .
Vi behöver en ny merge-förfrÄgan för att testa detta. LÄt oss skapa en ny gren med hjÀlp av git checkout -b auto-multidev-creation.
För att anvÀnda Terminus i GitLab CI/CD-uppgifter behöver vi en maskintoken för autentisering i Terminus och en containerbild med Terminus.
, spara den pÄ en sÀker plats och lÀgg till den som en global miljövariabel i GitLab med namnet PANTHEON_MACHINE_TOKEN.
Om du har glömt hur man lÀgger till miljövariabler i GitLab, gÄ tillbaka till dÀr vi definierade
PANTHEON_SITE.
Skapa en Dockerfile med Terminus
Om du inte anvÀnder Docker eller inte gillar filer Dockerfile, ta min bild registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest och hoppa över detta avsnitt.
, dÀr vi kan bygga och publicera Dockerfile för vÄrt projekt. LÄt oss skapa en Dockerfile med Terminus för att arbeta med Pantheon.
Terminus Àr ett kommandoradsverktyg skrivet i PHP, sÄ lÄt oss börja med en PHP-bild. Jag installerar Terminus via Composer, sÄ jag tar utgÄngspunkt i . Skapa Dockerfile i katalogen för det lokala repositoriet med detta innehÄll:
# 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"Följ instruktionerna för att bygga och skicka bilder frÄn avsnittet Bygg och skicka bilder pÄ , för att bygga en bild frÄn Dockerfile och skicka den till GitLab.
Ăppna avsnittet Registry i GitLab-projektet. Om allt har gĂ„tt enligt planerna, kommer vĂ„r bild att finnas dĂ€r. Skriv ner lĂ€nken till bildens tagg - den behöver vi för filen .gitlab-ci.yml.
Avsnitt script i uppgiften deploy:multidev börjar vÀxa, sÄ lÄt oss flytta den till en separat fil. Skapa en ny fil 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..."
fiSkriptet ligger i en privat katalog och . Vi har ett skript för vÄr multidev-logik. LÄt oss nu uppdatera avsnittet deploy:multidev filen .gitlab-ci.yml, sÄ att det ser ut sÄ hÀr:
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Kör multidev deploy-skriptet
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsVi mÄste sÀkerstÀlla att vÄra uppgifter körs i den skapade anpassade bilden, sÄ vi lÀgger till definitionen bild med register-URL:en i .gitlab-ci.yml. Resultatet Àr att vi fÄr en sÄdan fil .gitlab-ci.yml:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
stages:
- deploy
before_script:
# Se 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:
# Kör multidev deploy-skriptet
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsLÀgg till, commit och skicka private/multidev-deploy.sh och .gitlab-ci.yml. Nu gÄr vi tillbaka till GitLab och vÀntar pÄ att CI/CD-uppgiften ska köras. Ha tÄlamod: multidev kan skapas under nÄgra minuter.
Sen gĂ„r vi och kollar listan över multidev pĂ„ Pantheon. Ă
h, mirakel! Multidev-miljön mr-2 Àr redan hÀr.
Slutsats
Mitt team började ha mycket roligare nÀr vi började öppna merge-förfrÄgningar och automatiskt skapa miljöer.
Med de kraftfulla verktygen GitLab och Pantheon kan du automatiskt koppla GitLab till Pantheon.
Eftersom vi anvÀnder GitLab CI/CD har vÄr arbetsprocess mycket tillvÀxtpotential. HÀr Àr nÄgra idéer för att komma igÄng:
- LĂ€gg till ett byggsteg.
- LĂ€gg till automatiserade tester.
- LÀgg till en uppgift för att sÀkerstÀlla att kodstandarder följs.
- LĂ€gg till .
Skriv vad du tycker om GitLab, Pantheon och automatisering.
P.S. Visste du att Terminus, Pantheons kommandoradsverktyg, ?
Vi pÄ Pantheon har jobbat hÄrt med version 2 av vÄr med stöd för GitLab. Om du inte vill krÄngla med installationen för varje projekt, prova det hÀr pluginet och hjÀlp oss att testa beta v2. För teamet Terminus build:project:create behövs endast en Pantheon-token och en GitLab-token. Den kommer att distribuera ett av exempelprojekten med Composer och automatisk testning, skapa ett nytt projekt i GitLab, en ny Pantheon-sajt och koppla dem med hjÀlp av miljövariabler och SSH-nycklar.
Om författaren
Andrew Taylor skapar verktyg för utvecklare i .
KĂ€lla: habr.com
