
Vår gjest, utviklerverktøyskaperen Pantheon, snakker om hvordan man automatiserer distribusjoner. WordPress ved bruk av GitLab CI/CD.
В Jeg jobber med utviklerrelasjoner, så jeg er alltid på utkikk etter nye måter å hjelpe utviklere på. WordPress и Drupal Løs automatiseringsproblemer i arbeidsflyter. For å gjøre dette elsker jeg å eksperimentere med nye verktøy og kombinere dem for å oppnå større effektivitet.
Jeg ser ofte utviklere som sliter med en enkelt staging-server.
Det er en glede å vente på din tur til å bruke en mellomserver eller sende klienter en URL med meldingen: "Se her, men ikke se her ennå."
- et av de kule Pantheon-verktøyene - løser dette problemet, for med dem kan du lage miljøer for Git-grener etter behov. Hvert multidev-miljø har sin egen URL og database, slik at utviklere kan jobbe stille, sjekke kvalitet og få godkjenning uten å tråkke hverandre på tærne.
Men Pantheon har ikke verktøy for versjonskontroll eller kontinuerlig integrasjon og distribusjon (CI/CD). Men det er en fleksibel plattform som du kan integrere alle verktøy med.
Jeg la også merke til at team bruker visse verktøy for utvikling, og forskjellige for montering og distribusjon.
For eksempel har de ulike verktøy for versjonskontroll og CI/CD. Du må fikle rundt og bytte mellom verktøy for å redigere kode og diagnostisere problemer.
På det er et komplett sett med utviklingsverktøy: for versjonskontroll, billetter, sammenslåingsforespørsler, en klassens beste CI/CD-pipeline, et containerregister og alt sånt. Jeg har ennå ikke kommet over en applikasjon som tilbyr så mye for å administrere utviklingsarbeidsflyten din.
Jeg elsker automatisering, så jeg lærte hvordan jeg kobler Pantheon til GitLab slik at forpliktelser til hovedgrenen på GitLab blir distribuert til hovedutviklingsmiljøet i Pantheon. Og sammenslåingsforespørsler på GitLab kan opprette og distribuere kode til multidev-miljøer i Pantheon.
I denne veiledningen skal jeg vise deg hvordan du setter opp en forbindelse mellom GitLab og Pantheon og optimaliserer arbeidsflyten din. WordPress и Drupal.
Selvfølgelig er det mulig, , men vi vil gjøre alt med hendene våre for å fordype oss og i fremtiden bruke dette verktøyet ikke bare for distribusjon.
Innledning
For dette innlegget må du forstå at Pantheon deler hvert nettsted ned i tre elementer: kode, database og filer.
Koden inneholder CMS-filer som kjernen, plugins og temaer. WordPressDisse filene administreres i , hostet av Pantheon, noe som betyr at vi kan distribuere kode fra GitLab til Pantheon med Git.
Filer i Pantheon er mediefiler, det vil si bilder for nettstedet. Vanligvis blir de lastet opp av brukere og Git ignorerer dem.
, finn ut mer om eller på pantheon.io.
Antagelser
Prosjektet mitt om Pantheon og GitLab heter pantheon-gitlab-blog-demoProsjektnavnet må være unikt. Vi skal jobbe med et nettsted her. WordPressDu kan også ta den Drupal, men noen ting må endres.
jeg vil bruke og du kan jobbe i , hvis du vil.
Lag et prosjekt
Først, la oss lage (vi kommer tilbake til dette senere).
Nå Så installerer vi det. WordPress for nettstedets dashbord.
Hvis hendene dine klør etter å endre noe, for eksempel fjerne eller legge til plugins, vær tålmodig. Siden er ennå ikke koblet til GitLab, og vi ønsker at alle kodeendringer skal gå gjennom GitLab.
Når skal vi installere det? WordPress, gå tilbake til Pantheon-nettstedets dashbord og endre utviklingsmodus til Git.
Innledende commit på GitLab
Nå må du overføre den opprinnelige koden WordPress Fra Pantheon-nettstedet til GitLab. For å gjøre dette kloner vi koden fra Pantheon-nettstedets Git-repository lokalt og sender den deretter til GitLab-repositoriet.
For å gjøre det enklere og tryggere, og vi trenger ikke å skrive inn et passord hver gang vi kloner et Pantheon Git-lager. Samtidig allerede .
For å gjøre dette, klone Pantheon-nettstedet lokalt ved å kopiere kommandoen fra Clone with Git-feltet på nettsidens dashbord.
Hvis du trenger hjelp, les dokumentasjonen .
La oss nå endre git remote originå peke på GitLab i stedet for Pantheon. Det kan gjøres .
La oss gå til GitLab-prosjektet og kopiere depot-URLen fra Clone-rullegardinmenyen på siden med prosjektdetaljer. La oss velge alternativet Klone med SSH, fordi vi allerede har konfigurert SSH-nøkkelen.
Som standard git remote for en lokal kopi av kodelageret - origin. Dette kan endres c git remote set-url origin [URL репозитория GitLab], hvor vi i stedet for parentes skriver inn den faktiske URL-en.
Til slutt lanserer vi git push origin master --forceå sende koden WordPress fra Pantheon-nettstedet på GitLab.
Alternativet –force er bare nødvendig én gang. Så i lag
git pushdet vil ikke være på GitLab.
Sette opp legitimasjon og variabler
Husker du hvordan vi la til en SSH-nøkkel lokalt for å logge på Pantheon og GitLab? SSH-tokenet kan brukes til å autorisere GitLab og Pantheon.
GitLab har utmerket dokumentasjon. La oss se .
Vi vil nå fullføre de to første trinnene: La oss lage et nytt SSH-nøkkelpar lokalt med ssh-keygen og legge til den private nøkkelen som en variabel i prosjektet.
Da spør vi SSH_PRIVATE_KEY som i prosjektinnstillingene.
I det tredje og fjerde trinnet vil vi lage en fil .gitlab-ci.yml med innhold som dette:
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"La oss ikke forplikte filen ennå .gitlab-ci.yml, så må du legge til noe annet til den.
Nå utfører vi det femte trinnet og legg til den offentlige nøkkelen du opprettet i det første trinnet til tjenestene du trenger tilgang til i byggemiljøet.
I vårt tilfelle ønsker vi tilgang til Pantheon fra GitLab. Vi følger instruksjonene i Pantheon-dokumentet på og utfør dette trinnet.
Husk: privat SSH er i GitLab, åpen SSH er i Pantheon.
La oss sette opp noen flere miljøvariabler. Den første heter PANTHEON_SITE. Verdien er navnet på Pantheon-nettstedet på maskinen din.
Navnet på maskinen er oppført på slutten av kommandoen Clone with Git. Du har allerede klonet området lokalt, så dette vil være navnet på den lokale depotkatalogen.
La oss deretter sette opp miljøvariabelen PANTHEON_GIT_URL. Dette er nettadressen til Git-depotet for Pantheon-nettstedet som vi allerede har brukt.
Skriv inn bare URL-adressen til SSH-depotet, uten
git cloneog navnet på nettstedet på maskinen på slutten.
Puh. Det er gjort, nå kan vi fullføre filen vår .gitlab-ci.yml.
Opprett en distribusjonsoppgave
Det vi i utgangspunktet skal gjøre med GitLab CI er veldig likt det vi har gjort med Git-repositories tidligere. Men denne gangen, la oss legge til Pantheon-depotet som en andre ekstern Git-kilde, og deretter skyve koden fra GitLab til Pantheon.
For å gjøre dette, la oss konfigurere deploy и deploy:dev, fordi vi vil distribuere til utviklingsmiljøet på Pantheon. Den resulterende filen .gitlab-ci.yml Det vil se slik ut:
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 bør se kjent ut – vi satte opp disse miljøvariablene tidligere. Med disse variablene vil vi kunne bruke verdiene i filen .gitlab-ci.yml mange ganger, og de trenger bare å oppdateres på ett sted.
Til slutt legger du til, forplikter og sender filen .gitlab-ci.yml på GitLab.
Kontrollerer utplasseringen
Hvis vi gjorde alt riktig, oppgaven deploy:dev vil kjøre vellykket i GitLab CI/CD og sende inn en commit .gitlab-ci.yml ved Pantheon. La oss ta en titt.
Sender tråder for sammenslåingsforespørsel til Pantheon
Her skal vi bruke min favoritt Pantheon-funksjon − , hvor du kan lage flere Pantheon-miljøer for Git-grener på forespørsel.
, så denne delen kan hoppes over. Men hvis du har tilgang, kan du seriøst øke produktiviteten ved å sette opp automatisk oppretting av multidev-miljøer på Pantheon fra GitLab-sammenslåingsforespørsler.
La oss først lage en ny Git-gren lokalt ved å bruke git checkout -b multidev-support. La oss nå endre noe igjen .gitlab-ci.yml.
Jeg liker å inkludere sammenslåingsforespørselsnummeret i Pantheon-miljønavnet. For eksempel er den første sammenslåingsforespørselen mr-1, sekund - mr-2 etc.
Sammenslåingsforespørselen endres, så vi må dynamisk bestemme Pantheon-grennavnene. Det er enkelt på GitLab - du trenger bare å bruke .
Vi kan ta $CI_MERGE_REQUEST_IIDfor å spesifisere sammenslåingsforespørselsnummeret. La oss bruke alt dette sammen med de globale miljøvariablene vi spesifiserte tidligere og legge til en ny deploy:multidev-oppgave på slutten 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 vil ligne på vår oppgave deploy:dev, bare grenen sendes til Pantheon, ikke til master.
Vi har lagt til og forpliktet den oppdaterte filen .gitlab-ci.yml, og la oss nå skyve en ny gren til GitLab med git push -u origin multidev-support.
La oss nå lage en ny sammenslåingsforespørsel fra grenen multidev-supportved å trykke Opprett sammenslåingsforespørsel.
Etter å ha opprettet en sammenslåingsforespørsel, ser vi på hvordan CI/CD-oppgaven utføres deploy:multidev.
Se, en ny tråd er sendt til Pantheon. Men hvis vi går til multidev-delen på Pantheon-nettstedets dashbord, vil vi ikke se det nye miljøet der
La oss se på Git Branches-delen.
Som et resultat, vår tråd mr-1 kom til Pantheon. La oss skape et miljø fra en gren mr-1.
Vi har laget et multidev-miljø, la oss nå gå tilbake til GitLab og se på delen Drift > Miljøer. Vi vil se oppføringer for dev и mr-1.
Dette er fordi vi har lagt til en oppføring environment Med navn name и url inn i CI/CD-oppgaver. Hvis vi klikker på det åpne miljøikonet, vil vi bli ført til URL-en til multidev-miljøet på Pantheon.
Automatiser opprettelsen av multidev
I prinsippet kan du stoppe her og bare huske å lage et multidev-miljø for hver sammenslåingsforespørsel, men denne prosessen kan automatiseres.
Pantheon har et kommandolinjeverktøy , hvor du kan jobbe med plattformen automatisk. Terminus lar deg lage multidev-miljøer fra kommandolinjen - ideelt for .
Vi trenger en ny sammenslåingsforespørsel for å teste dette. La oss lage en ny gren ved å bruke git checkout -b auto-multidev-creation.
For å bruke Terminus i GitLab CI/CD-oppgaver trenger du et maskintoken for autentisering med Terminus og et containerbilde med Terminus.
, lagre den på et trygt sted og legg den til som en global miljøvariabel i GitLab med navnet PANTHEON_MACHINE_TOKEN.
Hvis du har glemt hvordan du legger til GitLab-miljøvariabler, gå tilbake til der vi definerte
PANTHEON_SITE.
Opprette en dockerfil med Terminus
Hvis du ikke bruker Docker eller ikke liker filer Dockerfile, ta bildet mitt registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest og hoppe over denne delen.
, hvor vi kan bygge og plassere Dockerfilen for prosjektet vårt. La oss lage en Dockerfile med Terminus for å jobbe med Pantheon.
Terminus er et PHP-kommandolinjeverktøy, så la oss starte med PHP-bildet. Jeg installerer Terminus gjennom Composer, så jeg bruker . Vi skaper Dockerfile i den lokale depotkatalogen med følgende innhold:
# 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ølg instruksjonene for å sette sammen og sende bilder fra seksjonen Bygg og push bilder в å samle et bilde fra Dockerfile og skyv den til GitLab.
Åpner seksjonen registret i GitLab-prosjektet. Hvis alt gikk etter planen, vil vårt image være der. Skriv ned en lenke til bildekoden - vi trenger den til filen .gitlab-ci.yml.
Seksjon script i problemet deploy:multidev begynner å vokse, så la oss flytte den til en egen fil. Opprett 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 er i en privat katalog og . Vi har et skript for multidev-logikken vår. La oss nå oppdatere delen deploy:multidev fil .gitlab-ci.ymlslik at det blir slik:
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å sørge for at oppgavene våre utføres i det opprettede tilpassede bildet, så la oss legge til en definisjon image fra register-URL til .gitlab-ci.yml. Som et resultat endte vi opp med en fil som denne .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_requestsLegg til, forplikt og send private/multidev-deploy.sh и .gitlab-ci.yml. Nå går vi tilbake til GitLab og venter på at CI/CD-oppgaven skal fullføres. Vær tålmodig: multidev kan ta flere minutter å lage.
Så går vi og ser på multidev-listen på Pantheon. Å mirakel! Multidev miljø mr-2 allerede her.
Konklusjon
Teamet mitt hadde mye mer moro da vi begynte å åpne sammenslåingsforespørsler og opprette miljøer automatisk.
Med de kraftige verktøyene til GitLab og Pantheon kan du koble GitLab til Pantheon automatisk.
Siden vi bruker GitLab CI/CD, vil arbeidsflyten vår ha plass til å vokse. Her er et par ideer for å komme i gang:
- Legg til et byggetrinn.
- Legg til automatisert testing.
- Legg til en oppgave for å sikre at kodestandarder oppfylles.
- Legge til .
Fortell oss hva du synes om GitLab, Pantheon og automatisering.
PS Visste du at Terminus, Pantheons kommandolinjeverktøy, ?
Vi i Pantheon har gjort en god jobb med versjon 2 av vår med GitLab-støtte. Hvis du ikke vil bry deg med innstillinger for hvert prosjekt, prøv denne plugin-en og hjelp oss med å teste v2-betaen. For Terminus-teamet build:project:create Du trenger bare et Pantheon-token og et GitLab-token. Hun vil distribuere et av eksempelprosjektene med Composer og automatisert testing, lage et nytt prosjekt i GitLab, en ny Pantheon-side, og koble dem sammen ved hjelp av miljøvariabler og SSH-nøkler.
Om forfatteren
Andrew Taylor lager verktøy for utviklere i .
Kilde: www.habr.com
