Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden
Vår skapare av verktyg för gästutvecklare på Pantheon berättar om hur man automatiserar WordPress-distributioner med GitLab CI/CD.

В Pantheon Jag arbetar med utvecklarrelationer, så jag letar alltid efter nya sätt att hjälpa WordPress- och Drupal-utvecklare att lösa automationsproblem i sina arbetsflöden. För att göra detta gillar jag att experimentera med nya verktyg och kombinera dem med varandra för att fungera effektivt.

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

Multidev-miljöer - 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.

GitLab 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 handledningen går jag igenom hur du konfigurerar en anslutning mellan GitLab och Pantheon och optimerar ditt WordPress- och Drupal-arbetsflöde.

Visst är det möjligt, spegel GitLab-förrådet, men vi kommer att göra allt med våra händer för att fördjupa oss i GitLab CI 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 WordPress-kärna, plugins och teman. Dessa filer hanteras i Git repositories, 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.

Skapa ett gratis konto, ta reda på mer om Pantheon arbetsflöde eller registrera dig för en demo på pantheon.io.

Antaganden

Mitt projekt om Pantheon och GitLab heter pantheon-gitlab-blog-demo. Projektnamnet måste vara unikt. Här kommer vi att arbeta med en WordPress-sajt. Du kan ta Drupal, men du kommer att behöva ändra några saker.

jag kommer använda Git kommandoradoch du kan jobba i grafiskt gränssnitt, om du vill.

Skapa ett projekt

Låt oss först skapa GitLab-projekt (vi återkommer till detta senare).

Nu skapa en WordPress-webbplats på Pantheon. Sedan installerar vi WordPress för sidans 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 vi har installerat WordPress, gå tillbaka till Pantheon-webbplatsens instrumentpanel och ändra utvecklingsläget till Git.

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

Initial commit på GitLab

Nu måste du överföra den ursprungliga WordPress-koden från Pantheon-webbplatsen till GitLab. För att göra detta klonar vi koden från Git-förvaret på Pantheon-platsen lokalt och skickar den sedan till GitLab-förvaret.

För att göra det enklare och säkrare, lägg till en SSH-nyckel till Pantheon och vi behöver inte ange ett lösenord varje gång vi klona ett Pantheon Git-förråd. Redan samtidigt lägg till en SSH-nyckel till GitLab.

För att göra detta, klona Pantheon-webbplatsen lokalt genom att kopiera kommandot från fältet Clone with Git på webbplatsens instrumentpanel.

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden
Om du behöver hjälp, läs dokumentationen komma igång med Git för Pantheon.

Nu ska vi ändra oss git remote originatt peka på GitLab istället för Pantheon. Det kan göras командой git remote.

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.

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

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 --forceför att skicka WordPress-kod från Pantheon till GitLab.

Alternativet –force behövs bara en gång. Sedan i lag git push det 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 avsnitt om SSH-nycklar när du använder Docker-exekutorn i dokumentet om användning av SSH-nycklar med GitLab CI/CD.

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 как GitLab CI/CD miljövariabel 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å lägga till en SSH-nyckel till Pantheon 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.

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

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 clone och 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 stadium deploy и uppgift 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:
    - master

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

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

Skickar sammanslagningsförfråganstrådar till Pantheon

Här kommer vi att använda min favorit Pantheon-funktion − multidev, där du kan skapa ytterligare Pantheon-miljöer för Git-grenar på begäran.

Tillgången till multidev är begränsad, 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 fördefinierade miljövariabler.

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_requests

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

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

Efter att ha skapat en sammanslagningsförfrågan tittar vi på hur CI/CD-uppgiften exekveras deploy:multidev.

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

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

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

Låt oss titta på Git Branches-sektionen.

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

Som ett resultat, vår tråd mr-1 kom till Pantheon. Låt oss skapa en miljö från en gren mr-1.

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

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 Terminus, där du kan arbeta med plattformen automatiskt. Terminus låter dig skapa multidev-miljöer från kommandoraden - perfekt för GitLab CI.

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.

Skapa en Pantheon Machine Token, 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.

GitLab har ett containerregister, 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 officiell Docker Composer-bild. 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 в containerregisterdokumentationatt 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.

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

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

Skriptet finns i en privat katalog och tillåter inte webbåtkomst till Pantheon. 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_requests

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

Lä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.

Hur man ansluter GitLab och Pantheon och optimerar Drupal- och WordPress-arbetsflöden

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åt oss veta vad du tycker om GitLab, Pantheon och automation.

PS Visste du att Terminus, Pantheons kommandoradsverktyg, kan utökas via plugins?

Vi på Pantheon har gjort ett bra jobb med version 2 av vår plugin för Terminus byggverktyg 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 Pantheon.

Källa: will.com

Lägg en kommentar