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.

Vytvořte si bezplatný účet, dozvědět se víc o Pracovní postup Pantheonu nebo přihlásit se k demoverzi na pantheon.io.

Předpoklady

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.

použiji Příkazový řádek Gita můžete pracovat GUI, Pokud chceš.

Vytvořte projekt

Pro začátek tvoříme Projekt GitLab (k tomu se vrátíme později).

Nyní vytvoření webu WordPress na Pantheonu. Poté nainstalujte WordPress pro řídicí panel webu.

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.

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

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.

Aby to bylo jednodušší a bezpečnější, přidat SSH klíč do Pantheonu a nebudeme zadávat heslo pokaždé, když klonujeme úložiště Pantheon Git. Zároveň již přidat SSH klíč do GitLabu.

Za tímto účelem lokálně naklonujeme web Pantheon zkopírováním příkazu z pole Klonovat pomocí Git na řídicím panelu webu.

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu
Pokud potřebujete pomoc, přečtěte si dokumentaci Začínáme s Git pro Pantheon.

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.

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

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.

GitLab má skvělou dokumentaci. Uvidíme část o klíčích SSH při použití spouštěcího programu Docker v dokumentu o používání klíčů SSH s GitLab CI/CD.

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:

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"

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

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

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áze deploy и úkol deploy: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:

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

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.

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

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

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

Po vytvoření žádosti o sloučení se podíváme na to, jak se provádí úloha CI / CD deploy:multidev.

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

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

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

Pojďme se podívat do sekce Git Branches.

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

V důsledku toho naše pobočka mr-1 se dostal do Pantheonu. Vytvořte prostředí z větve mr-1.

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

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.

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

Čá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:

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

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:

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

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.

Jak propojit GitLab a Pantheon a optimalizovat pracovní postupy Drupalu a WordPressu

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:

Napište, co si myslíte o GitLabu, Pantheonu a automatizaci.

PS Věděli jste, že Terminus, nástroj příkazového řádku Pantheonu, lze rozšířit pomocí pluginů?

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.

Zdroj: www.habr.com

Přidat komentář