
VÄr gÀst, utvecklarverktygsskaparen Pantheon, pratar om hur man automatiserar implementeringar. WordPress med hjÀlp av GitLab CI/CD.
РJag arbetar med utvecklarrelationer, sÄ jag letar alltid efter nya sÀtt att hjÀlpa utvecklare. WordPress О Drupal Lös automatiseringsproblem i arbetsflöden. För att göra detta Àlskar jag att experimentera med nya verktyg och kombinera dem för att uppnÄ större effektivitet.
Jag ser ofta utvecklare som kÀmpar med en enda mellanlagringsserver.
Det Àr ett nöje att vÀnta pÄ din tur att anvÀnda en mellanliggande server eller skicka en webbadress till klienter med anteckningen: "Titta hÀr, men titta inte hÀr Ànnu."
- ett av de coola Pantheon-verktygen - löser detta problem, för med dem kan du skapa miljöer för Git-grenar pÄ begÀran. Varje multidev-miljö har sin egen URL och databas, sÄ utvecklare kan arbeta tyst, kontrollera kvalitet 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). Men det Àr en flexibel plattform med vilken du kan integrera alla verktyg.
Jag mÀrkte ocksÄ att team anvÀnder vissa verktyg för utveckling och olika för montering och driftsÀttning.
De har till exempel olika verktyg för versionskontroll och CI/CD. Du mÄste fiffla runt och vÀxla mellan verktyg för att redigera kod och diagnostisera problem.
PÄ det finns en komplett uppsÀttning utvecklingsverktyg: för versionskontroll, biljetter, sammanslagningsförfrÄgningar, en klassens bÀsta CI/CD-pipeline, ett containerregister och allt sÄdant. Jag har Ànnu inte stött pÄ en applikation som erbjuder sÄ mycket för att hantera ditt utvecklingsarbetsflöde.
Jag Àlskar automation, sÄ jag lÀrde mig hur man kopplar Pantheon till GitLab sÄ att commits till huvudgrenen pÄ GitLab distribueras till huvudutvecklingsmiljön i Pantheon. Och sammanslagningsförfrÄgningar pÄ GitLab kan skapa och distribuera kod till multidev-miljöer i Pantheon.
I den hÀr guiden visar jag hur du skapar en koppling mellan GitLab och Pantheon och optimerar ditt arbetsflöde. WordPress О Drupal.
Visst Àr det möjligt, , men vi kommer att göra allt med vÄra hÀnder för att fördjupa oss i och i framtiden anvÀnda detta verktyg inte bara för distribution.
Inledning
För det hÀr inlÀgget mÄste du förstÄ att Pantheon delar upp varje webbplats i tre element: kod, databas och filer.
Koden innehÄller CMS-filer som kÀrnan, plugins och teman. WordPressDessa filer hanteras i , vÀrd av Pantheon, vilket betyder att vi kan distribuera kod frÄn GitLab till Pantheon med Git.
Filer i Pantheon Àr mediafiler, det vill sÀga bilder för webbplatsen. Vanligtvis laddas de upp av anvÀndare och Git ignorerar dem.
, ta reda pÄ mer om eller pÄ pantheon.io.
Antaganden
Mitt projekt om Pantheon och GitLab heter pantheon-gitlab-blog-demoProjektnamnet mÄste vara unikt. Vi kommer att arbeta med en webbplats hÀr. WordPressDu kan ta det ocksÄ Drupal, men vissa saker kommer att behöva Àndras.
jag kommer anvÀnda och du kan jobba i , om du vill.
Skapa ett projekt
LÄt oss först skapa (vi Äterkommer till detta senare).
Nu Sedan installerar vi det. WordPress för webbplatsens instrumentpanel.
Om dina hÀnder kliar efter att Àndra nÄgot, till exempel ta bort eller lÀgga till plugins, ha tÄlamod. Sajten Àr Ànnu inte ansluten till GitLab, och vi vill att alla kodÀndringar ska gÄ via GitLab.
NÀr ska vi installera det? WordPress, ÄtergÄ till Pantheons webbplats instrumentpanel och Àndra utvecklingslÀget till Git.
Initial commit pÄ GitLab
Nu behöver du överföra den ursprungliga koden WordPress FrÄn Pantheons webbplats till GitLab. För att göra detta klonar vi koden frÄn Pantheons webbplats Git-repository lokalt och skickar den sedan till GitLab-repositoryt.
För att göra det enklare och sÀkrare, och vi behöver inte ange ett lösenord varje gÄng vi klona ett Pantheon Git-förrÄd. Redan samtidigt .
För att göra detta, klona 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 ska vi Àndra oss git remote originatt peka pÄ GitLab istÀllet för Pantheon. Det kan göras .
LÄt oss gÄ till GitLab-projektet och kopiera arkivets URL frÄn rullgardinsmenyn Clone pÄ sidan med projektdetaljer. LÄt oss vÀlja alternativet Clone with SSH, eftersom vi redan har konfigurerat SSH-nyckeln.
Som standard git remote för en lokal kopia av kodförrĂ„det - origin. Detta kan Ă€ndras c git remote set-url origin [URL ŃĐ”ĐżĐŸĐ·ĐžŃĐŸŃĐžŃ GitLab], dĂ€r vi istĂ€llet för parenteser anger den faktiska URL:en.
Ăntligen lanserar vi git push origin master --forceatt skicka koden WordPress frĂ„n Pantheons webbplats pĂ„ GitLab.
Alternativet âforce behövs bara en gĂ„ng. Sedan i lag
git pushdet kommer inte att finnas pÄ GitLab.
StÀlla in autentiseringsuppgifter och variabler
Kommer du ihÄg hur vi la till en SSH-nyckel lokalt för att logga in pÄ Pantheon och GitLab? SSH-token kan anvÀndas för att auktorisera GitLab och Pantheon.
GitLab har utmÀrkt dokumentation. LÄt oss se .
Vi kommer nu att slutföra de tvÄ första stegen: LÄt oss skapa ett nytt SSH-nyckelpar lokalt med ssh-keygen och lÀgga till den privata nyckeln som en variabel i projektet.
DĂ„ frĂ„gar vi SSH_PRIVATE_KEY ĐșаĐș i projektinstĂ€llningarna.
I det tredje och fjÀrde steget kommer vi att skapa en fil .gitlab-ci.yml med innehÄll som detta:
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"LÄt oss inte begÄ filen Ànnu .gitlab-ci.yml, dÄ mÄste du lÀgga till nÄgot annat till den.
Nu utför vi det femte steget och lÀgg till den publika nyckeln som du 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 komma Ät Pantheon frÄn GitLab. Vi följer instruktionerna i Pantheon-dokumentet pÄ och utför detta steg.
Kom ihÄg: privat SSH finns i GitLab, öppen SSH Àr i Pantheon.
LÄt oss stÀlla in nÄgra fler miljövariabler. Den första heter PANTHEON_SITE. Dess vÀrde Àr namnet pÄ Pantheon-webbplatsen pÄ din maskin.
Namnet pÄ maskinen Àr listat i slutet av kommandot Clone with Git. Du har redan klonat platsen lokalt, sÄ detta kommer att vara namnet pÄ den lokala arkivkatalogen.
LÄt oss sedan stÀlla in miljövariabeln PANTHEON_GIT_URL. Detta Àr Git-repository URL för Pantheon-webbplatsen som vi redan har anvÀnt.
Ange endast SSH-förvarets URL, utan
git cloneoch namnet pÄ platsen pÄ maskinen i slutet.
Puh. Det Àr klart, nu kan vi avsluta vÄr fil .gitlab-ci.yml.
Skapa en distributionsuppgift
Det vi till en början kommer att göra med GitLab CI Àr mycket likt det vi har gjort med Git-repositories tidigare. Men den hÀr gÄngen, lÄt oss lÀgga till Pantheon-förvaret som en andra fjÀrrstyrd Git-kÀlla och sedan skicka koden frÄn GitLab till Pantheon.
För att göra detta, lÄt oss konfigurera deploy О deploy:dev, eftersom vi kommer att distribuera till utvecklingsmiljön pÄ Pantheon. Den resulterande filen .gitlab-ci.yml Det ser ut sÄ hÀr:
stages:
- deploy
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"
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:
- mastervariabler SSH_PRIVATE_KEY, PANTHEON_SITE О PANTHEON_GIT_URL borde se bekant ut - vi har stÀllt in dessa miljövariabler tidigare. Med dessa variabler kommer vi att kunna anvÀnda vÀrdena i filen .gitlab-ci.yml mÄnga gÄnger, och de behöver bara uppdateras pÄ ett stÀlle.
Slutligen, lÀgg till, commit och skicka filen .gitlab-ci.yml pÄ GitLab.
Kontrollerar distributionen
Om vi ââgjorde allt rĂ€tt, uppgiften deploy:dev kommer att köras framgĂ„ngsrikt i GitLab CI/CD och skickar en commit .gitlab-ci.yml vid Pantheon. LĂ„t oss ta en titt.
Skickar sammanslagningsförfrÄganstrÄdar till Pantheon
HĂ€r kommer vi att anvĂ€nda min favorit Pantheon-funktion â , dĂ€r du kan skapa ytterligare Pantheon-miljöer för Git-grenar pĂ„ begĂ€ran.
, sÄ det hÀr avsnittet kan hoppas över. Men om du har tillgÄng kan du pÄ allvar öka produktiviteten genom att stÀlla in automatiskt skapande av multidev-miljöer pÄ Pantheon frÄn GitLab sammanslagningsförfrÄgningar.
LÄt oss först skapa en ny Git-gren lokalt med hjÀlp av git checkout -b multidev-support. Nu ska vi Àndra nÄgot igen .gitlab-ci.yml.
Jag gillar att inkludera numret för sammanslagningsförfrÄgan i Pantheon-miljöns namn. Till exempel Àr den första sammanslagningsbegÀran mr-1, andra - mr-2 etc.
SammanslagningsbegÀran Àndras, sÄ vi mÄste dynamiskt bestÀmma Pantheon-grennamnen. Det Àr enkelt pÄ GitLab - du behöver bara anvÀnda .
Vi kan ta $CI_MERGE_REQUEST_IIDför att ange sammanslagningsbegÀrans nummer. LÄt oss tillÀmpa allt detta tillsammans med de globala miljövariablerna vi angav tidigare och lÀgga till en ny deploy:multidev-uppgift i slutet av filen .gitlab-ci.yml.
deploy:multidev:
stage: deploy
environment:
name: 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
# 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:mr-$CI_MERGE_REQUEST_IID --force
only:
- merge_requestsDet kommer att likna vÄr uppgift deploy:dev, bara grenen skickas till Pantheon, inte till master.
Vi har lagt till och överfört den uppdaterade filen .gitlab-ci.yml, och nu skjuter vi en ny gren till GitLab med git push -u origin multidev-support.
LÄt oss nu skapa en ny sammanfogningsförfrÄgan frÄn grenen multidev-supportgenom att trycka Skapa sammanslagningsförfrÄgan.
Efter att ha skapat en sammanslagningsförfrÄgan tittar vi pÄ hur CI/CD-uppgiften exekveras deploy:multidev.
Titta, en ny trÄd har skickats till Pantheon. Men om vi gÄr till multidev-sektionen pÄ Pantheon-webbplatsens instrumentpanel kommer vi inte att se den nya miljön dÀr
LÄt oss titta pÄ Git Branches-sektionen.
Som ett resultat, vÄr trÄd mr-1 kom till Pantheon. LÄt oss skapa en miljö frÄn en gren mr-1.
Vi har skapat en multidev-miljö, lÄt oss nu gÄ tillbaka till GitLab och titta pÄ avsnittet Verksamhet > Miljöer. Vi kommer att se bidrag för dev О mr-1.
Det beror pĂ„ att vi har lagt till en post environment Med namn name Đž url till CI/CD-uppgifter. Om vi ââklickar pĂ„ ikonen för öppen miljö kommer vi att tas till URL:en för multidev-miljön pĂ„ Pantheon.
Automatisera skapandet av multidev
I princip kan du stanna hÀr och bara komma ihÄg att skapa en multidev-miljö för varje sammanslagningsförfrÄgan, men denna process kan automatiseras.
Pantheon har ett kommandoradsverktyg , dÀr du kan arbeta med plattformen automatiskt. Terminus lÄter dig skapa multidev-miljöer frÄn kommandoraden - perfekt för .
Vi behöver en ny sammanslagningsfö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 du en maskintoken för autentisering med 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 du lÀgger till GitLab-miljövariabler, gÄ tillbaka till dÀr vi definierade
PANTHEON_SITE.
Skapa en Dockerfil 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 det hÀr avsnittet.
, dÀr vi kan bygga och placera Dockerfilen för vÄrt projekt. LÄt oss skapa en Dockerfil med Terminus för att arbeta med Pantheon.
Terminus Àr ett PHP-kommandoradsverktyg, sÄ lÄt oss börja med PHP-bilden. Jag installerar Terminus genom Composer, sÄ jag anvÀnder . Vi skapar Dockerfile i den lokala arkivkatalogen med följande 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 montera och skicka bilder frĂ„n avsnittet Bygg och skjut bilder ĐČ att samla en bild frĂ„n Dockerfile och skjut den till GitLab.
Ăppna avsnittet register i GitLab-projektet. Om allt gick enligt planerna kommer vĂ„r image att finnas dĂ€r. Skriv ner en lĂ€nk till bildtaggen - vi behöver den till filen .gitlab-ci.yml.
Avsnitt script i problemet 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 finns i en privat katalog och . Vi har ett skript för vÄr multidev-logik. LÄt oss nu uppdatera avsnittet deploy:multidev fil .gitlab-ci.ymlsÄ att det blir 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:
# Run the multidev deploy script
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsVi mÄste se till att vÄra uppgifter utförs i den skapade anpassade bilden, sÄ lÄt oss lÀgga till en definition image frÄn registeradressen till .gitlab-ci.yml. Som ett resultat fick vi en sÄdan hÀr fil .gitlab-ci.yml:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
stages:
- deploy
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"
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:
# Run the multidev deploy script
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsLÀgg till, begÄ och skicka private/multidev-deploy.sh О .gitlab-ci.yml. Nu ÄtervÀnder vi till GitLab och vÀntar pÄ att CI/CD-uppgiften ska slutföras. Ha tÄlamod: multidev kan ta flera minuter att skapa.
Sedan gĂ„r vi och tittar pĂ„ multidev-listan pĂ„ Pantheon. Ă
h mirakel! Multidev miljö mr-2 redan hÀr.
Slutsats
Mitt team hade mycket roligare nÀr vi började öppna sammanslagningsförfrÄgningar och skapa miljöer automatiskt.
Med de kraftfulla verktygen frÄn GitLab och Pantheon kan du ansluta GitLab till Pantheon automatiskt.
Eftersom vi anvÀnder GitLab CI/CD kommer vÄrt arbetsflöde att ha utrymme att vÀxa. HÀr Àr ett par idéer för att komma igÄng:
- LĂ€gg till ett byggsteg.
- LĂ€gg till automatisk testning.
- LÀgg till en uppgift för att sÀkerstÀlla att kodstandarder uppfylls.
- lÀgga till .
LÄt oss veta vad du tycker om GitLab, Pantheon och automation.
PS Visste du att Terminus, Pantheons kommandoradsverktyg, ?
Vi pÄ Pantheon har gjort ett bra jobb med version 2 av vÄr med GitLab-stöd. Om du inte vill bry dig om instÀllningar för varje projekt, prova detta plugin och hjÀlp oss att testa v2 beta. För Terminus-teamet build:project:create Du behöver bara en Pantheon-token och en GitLab-token. Hon kommer att distribuera ett av exempelprojekten med Composer och automatiserad testning, skapa ett nytt projekt i GitLab, en ny Pantheon-sajt, och koppla ihop dem med hjÀlp av miljövariabler och SSH-nycklar.
Om författaren
Andrew Taylor skapar verktyg för utvecklare i .
KĂ€lla: will.com
