ProHoster > Blog > podávání > Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu
Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu
Náš hostující tvůrce vývojářských nástrojů v Pantheonu hovoří o tom, jak automatizovat nasazení WordPress pomocí GitLab CI/CD.
В Panteon Pracuji ve vztazích s vývojáři, takže stále hledám nové způsoby, jak pomoci vývojářům WordPress a Drupal řešit problémy s automatizací v jejich pracovních postupech. K tomu rád experimentuji s novými nástroji a vzájemně je kombinuji, aby fungovaly efektivně.
Často vidím, jak se vývojáři potýkají s jediným stagingovým serverem.
Tak zábavné – čekání, až na vás přijde řada, s použitím zprostředkujícího serveru nebo odesláním adresy URL klientům s označením: „Podívejte se sem, ale ještě se sem nedívejte.“
multidev prostředí - jeden ze skvělých nástrojů Pantheon - vyřešte tento problém, protože s nimi můžete vytvářet prostředí pro větve Git na vyžádání. Každé multidev prostředí má svou vlastní URL a databázi, takže vývojáři mohou pracovat, kontrolovat kvalitu a získávat schválení, aniž by si navzájem šlapali na paty.
Pantheon ale nemá nástroje pro správu verzí nebo průběžnou integraci a nasazení (CI/CD). Jde ale o flexibilní platformu, se kterou můžete integrovat jakékoli nástroje.
Také jsem si všiml, že týmy používají určité nástroje pro vývoj a jiné pro sestavení a nasazení.
Například mají různé nástroje pro správu verzí a CI/CD. Chcete-li upravit kód a diagnostikovat problémy, musíte se pohybovat a přepínat mezi nástroji.
Na GitLab existuje kompletní sada vývojových nástrojů: kontrola verzí, lístky, požadavky na sloučení, nejlepší kanál CI/CD ve své třídě, registr kontejnerů a podobně. Ještě jsem nenarazil na aplikaci, která by toho měla tolik ke správě pracovního postupu vývoje.
Miluji automatizaci, a tak jsem se naučil, jak propojit Pantheon s GitLab, aby se commity do hlavní větve na GitLabu nasadily do hlavního vývojového prostředí v Pantheonu. Žádosti o sloučení GitLab mohou také vytvářet a nasazovat kód do multidev prostředí v Pantheonu.
V této příručce vám ukážu, jak nastavit propojení mezi GitLabem a Pantheonem a optimalizovat pracovní postup WordPressu a Drupalu.
Samozřejmě je možné, zrcadlit úložiště GitLab, ale uděláme vše s pery, abychom se do toho ponořili GitLab CI a v budoucnu tento nástroj využívat nejen k nasazení.
úvod
Pro tento příspěvek musíte pochopit, že Pantheon rozděluje každý web na tři prvky: kód, databázi a soubory.
Kód obsahuje soubory CMS, jako je jádro, pluginy a témata WordPress. Tyto soubory spravuje Repozitáře Git, hostovaný Pantheonem, což znamená, že můžeme nasadit kód z GitLab do Pantheonu s Git.
Soubory v Pantheonu jsou mediální soubory, tedy obrázky pro daný web. Obvykle je nahrávají uživatelé a Git je ignoruje.
Můj projekt na Pantheonu a GitLabu se jmenuje pantheon-gitlab-blog-demo. Název projektu musí být jedinečný. Zde budeme pracovat s webem WordPress. Můžete si vzít Drupal, ale budete muset něco změnit.
Pokud vás svrbí ruce něco změnit, například odebrat a přidat pluginy, buďte trpěliví. Stránka ještě není připojena ke GitLabu a chceme, aby všechny změny kódu procházely přes GitLab.
Jakmile je WordPress nainstalován, vraťte se na panel Pantheon a změňte režim vývoje na Git.
Počáteční potvrzení na GitLabu
Nyní musíte přenést počáteční kód WordPress z webu Pantheon do GitLabu. Za tímto účelem lokálně naklonujeme kód z úložiště Git na webu Pantheon a poté jej odešleme do úložiště GitLab.
Nyní se pojďme změnit git remote originukazovat na GitLab místo na Pantheon. Dá se to udělat командой git remote.
Pojďme do projektu GitLab a zkopírujte adresu URL úložiště z rozevíracího seznamu Klonovat na stránce s podrobnostmi o projektu. Zvolme možnost Klonovat pomocí SSH, protože klíč SSH jsme již nakonfigurovali.
Ve výchozím nastavení git remote pro místní kopii úložiště kódu − origin. Toto lze změnit z git remote set-url origin [URL репозитория GitLab], kde místo hranatých závorek zadáme skutečnou URL.
Nakonec spustíme git push origin master --forcek odeslání kódu WordPress z webu Pantheon do GitLabu.
Volba --force je potřeba pouze jednou. Pak v týmech git push nebude to na GitLabu.
Nastavte přihlašovací údaje a proměnné
Pamatujete si, jak jsme lokálně přidali klíč SSH pro přihlášení do Pantheonu a GitLabu? SSH token lze použít k autorizaci GitLab a Pantheon.
Nyní dokončíme první dva kroky: Vytvořme nový pár klíčů SSH lokálně pomocí ssh-keygen a přidejte soukromý klíč jako proměnnou do projektu.
Poté nastavíme SSH_PRIVATE_KEY как Proměnná prostředí GitLab CI/CD v nastavení projektu.
Ve třetím a čtvrtém kroku vytvoříme soubor .gitlab-ci.yml s obsahem jako je tento:
Dokud soubor nepotvrdíme .gitlab-ci.yml, pak k němu budete muset přidat něco jiného.
Nyní proveďte pátý krok a přidejte veřejný klíč, který jste vytvořili v prvním kroku, ke službám, ke kterým potřebujete přístup v prostředí sestavení.
V našem případě chceme přistupovat k Pantheonu z GitLabu. Postupujte podle pokynů v dokumentu Pantheon na přidání klíče SSH do Pantheonu a udělejte tento krok.
Pamatujte: uzavřené SSH je v GitLabu, otevřené je v Pantheonu.
Pojďme nastavit několik dalších proměnných prostředí. První se jmenuje PANTHEON_SITE. Jeho hodnota je název webu Pantheon na vašem počítači.
Název na počítači je uveden na konci příkazu Klonovat pomocí Git. Místo jste již lokálně naklonovali, takže toto bude název adresáře místního úložiště.
Dále nastavte proměnnou prostředí PANTHEON_GIT_URL. Toto je adresa URL úložiště Git pro web Pantheon, kterou jsme již použili.
Zadáváme pouze URL SSH úložiště, bez git clone a název webu na stroji na konci.
Fuj. To je hotovo, teď můžeme dokončit náš soubor .gitlab-ci.yml.
Vytvořte úlohu nasazení
To, co budeme zpočátku dělat s GitLab CI, je velmi podobné tomu, co jsme dělali s repozitáři Git v minulosti. Tentokrát však přidáme úložiště Pantheon jako druhý vzdálený zdroj Git a poté pošleme kód z GitLab do Pantheonu.
Chcete-li to provést, nastavte fázedeploy и úkoldeploy:dev, protože nasadíme do vývojového prostředí na Pantheonu. V důsledku toho soubor .gitlab-ci.yml Bude to vypadat takto:
Proměnné SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL by měl vypadat povědomě – tyto proměnné prostředí jsme nastavili již dříve. S těmito proměnnými budeme moci použít hodnoty v souboru .gitlab-ci.yml mnohokrát a stačí je aktualizovat na jednom místě.
Nakonec přidejte, odevzdejte a odešlete soubor .gitlab-ci.yml na Gitlabu.
Kontrola nasazení
Pokud jsme udělali všechno správně, úkol deploy:dev se úspěšně spustí v GitLab CI/CD a pošle potvrzení .gitlab-ci.yml v Pantheonu. Pojďme se podívat.
Odeslání větví žádosti o sloučení do Pantheonu
Zde použijeme moji oblíbenou funkci Pantheonu − multidevkde můžete na vyžádání vytvořit další prostředí Pantheonu pro větve Git.
Přístup k multidev je omezený, takže tuto sekci lze přeskočit. Ale pokud máte přístup, můžete vážně zvýšit produktivitu nastavením automatického vytváření multidev prostředí na Pantheonu z požadavků na sloučení GitLab.
Nejprve vytvořte novou větev Git lokálně pomocí git checkout -b multidev-support. Teď pojďme něco změnit .gitlab-ci.yml.
Rád bych zahrnul číslo požadavku na sloučení do názvu prostředí Pantheon. Například první požadavek na sloučení je mr-1, druhý - mr-2 atd.
Požadavek na sloučení se mění, takže musíme dynamicky určit názvy větví Pantheonu. Na GitLabu je to snadné – musíte používat předdefinované proměnné prostředí.
Můžeme vzít $CI_MERGE_REQUEST_IIDzadejte číslo žádosti o sloučení. Aplikujme to vše spolu s globálními proměnnými prostředí, které jsme zadali dříve, a na konec souboru přidejte novou úlohu deploy:multidev .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
Bude to podobné našemu úkolu deploy:dev, jen pobočka jde do Pantheonu, ne do master.
Aktualizovaný soubor jsme přidali a potvrdili .gitlab-ci.yml, a nyní posuňte novou větev do GitLabu pomocí git push -u origin multidev-support.
Nyní vytvoříme nový požadavek na sloučení z pobočky multidev-supportKliknutím Vytvořit žádost o sloučení.
Po vytvoření žádosti o sloučení se podíváme na to, jak se provádí úloha CI / CD deploy:multidev.
Podívejte se – do Pantheonu byla odeslána nová větev. Ale pokud přejdeme do sekce multidev na hlavním panelu webu Pantheon, nové prostředí tam neuvidíme
Pojďme se podívat do sekce Git Branches.
V důsledku toho naše pobočka mr-1 se dostal do Pantheonu. Vytvořte prostředí z větve mr-1.
Vytvořili jsme multidev prostředí, nyní se vraťme do GitLabu a podívejme se do sekce Operace > Prostředí. Uvidíme záznamy pro dev и mr-1.
Je to proto, že jsme přidali záznam environment Se jménem name и url do úloh CI/CD. Pokud klikneme na ikonu otevřeného prostředí, přejdeme na URL multidev prostředí na Pantheonu.
Automatizujte vytváření multidev
V zásadě se zde můžete zastavit a nezapomeňte vytvořit multidev prostředí pro každý požadavek na sloučení, ale tento proces lze automatizovat.
Pantheon má nástroj příkazového řádku Konečná stanice, kde můžete s platformou pracovat automaticky. Terminus umožňuje vytvářet multidev prostředí z příkazového řádku – ideální pro GitLab CI.
Abychom to otestovali, potřebujeme nový požadavek na sloučení. Vytvořte novou větev pomocí git checkout -b auto-multidev-creation.
Chcete-li používat Terminus v úlohách GitLab CI/CD, potřebujete strojový token pro ověřování pomocí Terminus a image kontejneru s Terminusem.
Vytvoření žetonu stroje Pantheon, uložte ji na bezpečné místo a přidejte ji jako globální proměnnou prostředí v GitLabu s názvem PANTHEON_MACHINE_TOKEN.
Pokud jste zapomněli, jak přidat proměnné prostředí GitLab, vraťte se tam, kde jsme definovali PANTHEON_SITE.
Vytvořte Dockerfile pomocí Terminus
Pokud nepoužíváte Docker nebo nemáte rádi soubory Dockerfilevezmi si můj obrázek registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest a přeskočte tuto sekci.
GitLab má registr kontejnerů, kde můžeme sestavit a umístit Dockerfile pro náš projekt. Pojďme vytvořit Dockerfile s Terminusem pro práci s Pantheonem.
Terminus je nástroj příkazového řádku PHP, takže začněme obrázkem PHP. Instaluji Terminus přes Composer, takže použiji oficiální obrázek Docker Composer. tvoříme Dockerfile v adresáři místního úložiště s následujícím obsahem:
# 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"
Postupujte podle pokynů pro vytváření a odesílání obrázků ze sekce Vytvářejte a posouvejte obrázky в dokumentace registru kontejnerůsestavit obrázek Dockerfile a odeslat jej do GitLabu.
Otevření sekce registr v projektu GitLab. Pokud vše půjde podle plánu, bude tam naše image. Zapište si odkaz na značku obrázku – potřebujeme ho pro soubor .gitlab-ci.yml.
Část script v úkolu deploy:multidev začíná růst, tak jej přesuneme do samostatného souboru. Vytvořte nový soubor 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
Skript je v soukromém adresáři a neumožňuje webový přístup k Pantheonu. Máme skript pro naši multidev logiku. Nyní aktualizujeme sekci deploy:multidev soubor .gitlab-ci.ymlaby to vypadalo takto:
Musíme se ujistit, že se naše úkoly provádějí ve vytvořeném vlastním obrazu, takže přidáme definici image s adresou URL registru .gitlab-ci.yml. V důsledku toho máme takový soubor .gitlab-ci.yml:
Přidat, odevzdat a odeslat private/multidev-deploy.sh и .gitlab-ci.yml. Nyní se vrátíme do GitLabu a čekáme na dokončení úlohy CI / CD. Buďte trpěliví: vytvoření multidev může trvat několik minut.
Pak se jdeme podívat na seznam multidev na Pantheonu. Ó zázrak! Multidev prostředí mr-2 už tady.
Závěr
Můj tým si užil mnohem více zábavy, když jsme začali automaticky otevírat žádosti o sloučení a vytvářet prostředí.
Pomocí výkonných nástrojů GitLab a Pantheon můžete GitLab k Pantheonu připojit automaticky.
Vzhledem k tomu, že používáme GitLab CI/CD, bude mít náš workflow prostor pro růst. Zde je několik nápadů, jak začít:
My v Pantheonu jsme odvedli dobrou práci na naší verzi 2 plugin pro nástroje sestavení Terminus s podporou GitLab. Pokud se nechcete trápit s nastavením pro každý projekt, vyzkoušejte tento plugin a pomozte nám otestovat beta verzi v2. Za tým Terminus build:project:create Potřebujete pouze token Pantheon a token GitLab. Nasadí jeden ze vzorových projektů s Composerem a automatizovaným testováním, vytvoří nový projekt v GitLab, novém webu Pantheon, a propojí je pomocí proměnných prostředí a klíčů SSH.
O autorovi
Andrew Taylor vytváří nástroje pro vývojáře v Panteon.