Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress
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 Pantheon 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.'

Multidev-miljöer — 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Ä GitLab 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, spegelvÀnda GitLab-repositoriet, men vi kommer att göra allt manuellt för att grotta in i GitLab CI 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 Git-repositoriet, 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.

Skapa ett gratis konto, lÀs mer om arbetsflödet i Pantheon eller boka en demo 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 Git-kommandoraden, men du kan arbeta i det grafiska grÀnssnittet, om du vill.

Skapar projekt

Börja med att skapa ett GitLab-projekt (detta kommer vi att Äterkomma till).

Nu skapa en WordPress-webbplats pÄ Pantheon. 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.

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

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, lÀgger vi till en SSH-nyckel i Pantheon och slipper ange lösenordet varje gÄng vi klonar Pantheon Git-repositoriet. Samtidigt lÀgger vi ocksÄ till SSH-nyckeln pÄ GitLab.

För detta klonar vi Pantheon-webbplatsen lokalt genom att kopiera kommandot frÄn fÀltet Clone with Git pÄ webbplatsens instrumentpanel.

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress
Om du behöver hjÀlp, lÀs dokumentationen om att komma igÄng med Git för Pantheon.

Nu Àndrar vi git remote origin, för att peka pÄ GitLab istÀllet för Pantheon. Detta kan göras med kommandot git remote.

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.

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

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 push kommer 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Ä avsnittet om SSH-nycklar nÀr man anvÀnder Docker-executorn i dokumentationen om att anvÀnda SSH-nycklar med GitLab CI/CD.

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 GitLab CI/CD-miljövariabeln 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 att lÀgga till SSH-nyckeln i Pantheon 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.

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

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 clone och 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 steget deploy och uppgiften 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:
    - master

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

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

Skickar brancherna för merge-begÀran till Pantheon

HĂ€r kommer vi att anvĂ€nda min favoritfunktion pĂ„ Pantheon — multidev, dĂ€r man kan skapa ytterligare miljöer pĂ„ Pantheon för Git-brancher pĂ„ begĂ€ran.

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

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_requests

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

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

NÀr vi har skapat merge-förfrÄgan, lÄt oss se hur CI/CD-uppgiften utförs deploy:multidev.

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

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

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

LÄt oss titta pÄ avsnittet Git Branches.

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

Till slut har vÄr gren mr-1 nÄtt Pantheon. LÄt oss skapa en miljö av grenen mr-1.

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

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 Terminus, dÀr vi kan arbeta automatiskt med plattformen. I Terminus kan vi skapa multidev-miljöer frÄn kommandoraden - perfekt för GitLab CI.

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.

Skapa en maskintoken för Pantheon, 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.

I GitLab finns det ett containerregister, 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 den officiella Docker Composer-bilden. 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Ä i dokumentationen för containerregistret, 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.

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

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

Skriptet ligger i en privat katalog och ger ingen webbÄtkomst pÄ Pantheon. 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_requests

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

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

Hur man kopplar GitLab och Pantheon och optimerar arbetsflöden för Drupal och WordPress

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:

Skriv vad du tycker om GitLab, Pantheon och automatisering.

P.S. Visste du att Terminus, Pantheons kommandoradsverktyg, kan utökas via plugins?

Vi pÄ Pantheon har jobbat hÄrt med version 2 av vÄr pluggin för byggverktyg Terminus 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 Pantheon.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster