Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress
Náš tvorca nástrojov pre vývojárov pre hostí v Pantheone hovorí o tom, ako automatizovať nasadenia WordPress pomocou GitLab CI/CD.

В Panteón Pracujem vo vzťahoch s vývojármi, takže stále hľadám nové spôsoby, ako pomôcť vývojárom WordPress a Drupal vyriešiť problémy s automatizáciou v ich pracovných postupoch. K tomu rád experimentujem s novými nástrojmi a navzájom ich kombinujem, aby fungovali efektívne.

Často vidím vývojárov, ktorí zápasia s jedným stagingovým serverom.

Je to také potešenie čakať, kým na vás príde rad, aby ste použili sprostredkovateľský server alebo poslali klientom URL s poznámkou: „Pozrite sa sem, ale zatiaľ sa nepozerajte tu.“

Multidev prostredia - jeden zo skvelých nástrojov Pantheon - tento problém rieši, pretože s nimi môžete na požiadanie vytvárať prostredia pre pobočky Git. Každé multidev prostredie má svoju vlastnú URL a databázu, takže vývojári môžu pracovať potichu, kontrolovať kvalitu a získať schválenie bez toho, aby si navzájom šliapali na nohy.

Pantheon však nemá nástroje na správu verzií alebo nepretržitú integráciu a nasadenie (CI/CD). Ide však o flexibilnú platformu, s ktorou môžete integrovať akékoľvek nástroje.

Všimol som si tiež, že tímy používajú určité nástroje na vývoj a iné na zostavovanie a nasadzovanie.

Napríklad majú rôzne nástroje na správu verzií a CI/CD. Ak chcete upraviť kód a diagnostikovať problémy, musíte sa pohybovať a prepínať medzi nástrojmi.

Na GitLab existuje celá sada vývojových nástrojov: pre kontrolu verzií, lístky, požiadavky na zlúčenie, najlepší kanál CI/CD vo svojej triede, register kontajnerov a všetko podobné. Ešte som sa nestretol s aplikáciou, ktorá ponúka toľko možností na správu vášho vývojového workflow.

Milujem automatizáciu, a tak som sa naučil, ako prepojiť Pantheon s GitLabom, aby sa príkazy do hlavnej vetvy na GitLab nasadili do hlavného vývojového prostredia v Pantheone. A zlučovacie požiadavky na GitLab môžu vytvárať a nasadzovať kód do multidev prostredí v Pantheone.

V tomto návode vás prevediem, ako nastaviť prepojenie medzi GitLab a Pantheon a optimalizovať váš pracovný postup WordPress a Drupal.

Samozrejme je možné, zrkadlové úložisko GitLab, ale urobíme všetko rukami, aby sme sa do toho ponorili GitLab CI a v budúcnosti využiť tento nástroj nielen na nasadenie.

Úvod

Pre tento príspevok musíte pochopiť, že Pantheon rozdeľuje každú stránku na tri prvky: kód, databázu a súbory.

Kód obsahuje súbory CMS, ako je jadro WordPress, doplnky a témy. Tieto súbory sú spravované v Repozitáre Git, hostiteľom spoločnosti Pantheon, čo znamená, že môžeme nasadiť kód z GitLab do Pantheonu s Git.
Súbory v Pantheone sú mediálne súbory, teda obrázky pre web. Zvyčajne ich nahrávajú používatelia a Git ich ignoruje.

Vytvorte si účet zadarmo, zistite viac o Pracovný postup Pantheonu alebo prihlásiť sa na odber ukážky na pantheon.io.

Predpoklady

Môj projekt na Pantheone a GitLab sa volá pantheon-gitlab-blog-demo. Názov projektu musí byť jedinečný. Tu budeme pracovať s webom WordPress. Môžete si vziať Drupal, ale budete musieť zmeniť niektoré veci.

budem používať Príkazový riadok Gita môžete pracovať grafické rozhranie, Ak chceš.

Vytvorte projekt

Po prvé, poďme vytvoriť Projekt GitLab (k tomu sa ešte vrátime).

teraz vytvorenie webovej stránky WordPress na Pantheone. Potom nainštalujeme WordPress pre dashboard lokality.

Ak vás svrbia ruky niečo zmeniť, napríklad odstrániť alebo pridať pluginy, buďte trpezliví. Stránka ešte nie je prepojená s GitLabom a chceme, aby všetky zmeny kódu prechádzali cez GitLab.

Keď nainštalujeme WordPress, vráťte sa na hlavný panel webovej stránky Pantheon a zmeňte režim vývoja na Git.

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

Počiatočné odovzdanie na GitLab

Teraz musíte preniesť počiatočný kód WordPress zo stránky Pantheon do GitLab. Aby sme to dosiahli, lokálne naklonujeme kód z úložiska Git na lokalite Pantheon a potom ho odošleme do úložiska GitLab.

Aby to bolo jednoduchšie a bezpečnejšie, pridajte kľúč SSH do Pantheonu a nebudeme musieť zadávať heslo pri každom klonovaní repozitára Pantheon Git. Zároveň už pridajte kľúč SSH do GitLabu.

Ak to chcete urobiť, lokálne naklonujte webovú stránku Pantheon skopírovaním príkazu z poľa Klonovať s Git na hlavnom paneli webovej stránky.

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress
Ak potrebujete pomoc, prečítajte si dokumentáciu ako začať s Git pre Pantheon.

Teraz sa poďme zmeniť git remote originukázať na GitLab namiesto Pantheonu. Dá sa to командой git remote.

Poďme do projektu GitLab a skopírujeme adresu URL úložiska z rozbaľovacej ponuky Klonovať na stránke s podrobnosťami o projekte. Vyberme si možnosť Klonovať pomocou SSH, pretože kľúč SSH sme už nakonfigurovali.

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

V predvolenom nastavení git remote pre lokálnu kópiu úložiska kódu - origin. Toto je možné zmeniť c git remote set-url origin [URL репозитория GitLab], kde namiesto hranatých zátvoriek zadáme skutočnú URL.

Nakoniec spúšťame git push origin master --forcena presunutie kódu WordPress z Pantheonu do GitLabu.

Možnosť –force je potrebná iba raz. Potom v tímoch git push nebude to na GitLab.

Nastavenie poverení a premenných

Pamätáte si, ako sme lokálne pridali kľúč SSH na prihlásenie do Pantheonu a GitLab? Token SSH možno použiť na autorizáciu GitLab a Pantheon.

GitLab má vynikajúcu dokumentáciu. Pozrime sa časť o kľúčoch SSH pri použití spúšťača Docker v dokumente o používaní kľúčov SSH s GitLab CI/CD.

Teraz dokončíme prvé dva kroky: Vytvorme nový pár kľúčov SSH lokálne pomocou ssh-keygen a pridáme súkromný kľúč ako premennú do projektu.

Potom sa opýtame SSH_PRIVATE_KEY ako Premenná prostredia GitLab CI/CD v nastaveniach projektu.
V treťom a štvrtom kroku vytvoríme súbor .gitlab-ci.yml s obsahom ako 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"

Súbor ešte nepotvrdzujme .gitlab-ci.yml, potom k nemu budete musieť pridať niečo iné.

Teraz vykonáme piaty krok a pridajte verejný kľúč, ktorý ste vytvorili v prvom kroku, k službám, ku ktorým potrebujete prístup v prostredí zostavy.

V našom prípade chceme pristupovať k Pantheonu z GitLab. Postupujeme podľa pokynov v dokumente Pantheon na pridanie kľúča SSH do Pantheonu a vykonajte tento krok.

Pamätajte: súkromné ​​SSH je v GitLab, otvorené SSH je v Pantheone.

Poďme nastaviť niekoľko ďalších premenných prostredia. Prvá sa volá PANTHEON_SITE. Jeho hodnota je názov stránky Pantheon na vašom počítači.

Názov na počítači je uvedený na konci príkazu Clone with Git. Lokálne ste už stránku naklonovali, takže toto bude názov adresára lokálneho úložiska.

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

Ďalej nastavíme premennú prostredia PANTHEON_GIT_URL. Toto je adresa URL úložiska Git pre stránku Pantheon, ktorú sme už použili.

Zadajte iba adresu URL úložiska SSH bez git clone a názov lokality na stroji na konci.

Fuj. To je hotové, teraz môžeme dokončiť náš súbor .gitlab-ci.yml.

Vytvorte úlohu nasadenia

To, čo budeme na začiatku robiť s GitLab CI, je veľmi podobné tomu, čo sme robili s úložiskami Git v minulosti. Tentokrát však pridajte úložisko Pantheon ako druhý vzdialený zdroj Git a potom presuňte kód z GitLab do Pantheonu.

Ak to chcete urobiť, poďme nakonfigurovať fázy deploy и úloha deploy:dev, pretože nasadíme do vývojového prostredia na Pantheone. Výsledný súbor .gitlab-ci.yml To bude vyzerať 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

Premenné SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL by mali vyzerať povedome – tieto premenné prostredia sme nastavili skôr. S týmito premennými budeme môcť použiť hodnoty v súbore .gitlab-ci.yml mnohokrát a bude potrebné ich aktualizovať iba na jednom mieste.

Nakoniec pridajte, potvrďte a odošlite súbor .gitlab-ci.yml na GitLab.

Kontrola nasadenia

Ak sme urobili všetko správne, úloha deploy:dev sa úspešne spustí v GitLab CI/CD a odošle potvrdenie .gitlab-ci.yml v Panteóne. Poďme sa pozrieť.

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

Odosielanie vlákien žiadostí o zlúčenie do Pantheonu

Tu použijeme moju obľúbenú funkciu Pantheon − multidev, kde môžete na požiadanie vytvárať ďalšie prostredia Pantheonu pre pobočky Git.

Prístup k multidev je obmedzený, takže túto časť možno preskočiť. Ale ak máte prístup, môžete vážne zvýšiť produktivitu nastavením automatického vytvárania multidev prostredí na Pantheone z GitLab žiadostí o zlúčenie.

Najprv vytvorte novú vetvu Git lokálne pomocou git checkout -b multidev-support. Teraz poďme opäť niečo zmeniť .gitlab-ci.yml.

Chcel by som zahrnúť číslo žiadosti o zlúčenie do názvu prostredia Pantheon. Napríklad prvá žiadosť o zlúčenie je mr-1, druhý - mr-2 atď.

Požiadavka na zlúčenie sa mení, takže musíme dynamicky určiť názvy pobočiek Pantheonu. Na GitLab je to jednoduché – stačí ho použiť preddefinované premenné prostredia.

Môžeme si vziať $CI_MERGE_REQUEST_IIDšpecifikovať číslo žiadosti o zlúčenie. Aplikujme to všetko spolu s globálnymi premennými prostredia, ktoré sme špecifikovali predtým, a na koniec súboru pridajte novú ú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é ako pri našej úlohe deploy:dev, do Panteonu sa posiela len pobočka, nie do master.

Aktualizovaný súbor sme pridali a odovzdali .gitlab-ci.yml, a teraz poďme do GitLabu vložiť novú vetvu git push -u origin multidev-support.

Teraz vytvoríme novú žiadosť o zlúčenie z pobočky multidev-supportkliknutím Vytvorte žiadosť o zlúčenie.

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

Po vytvorení žiadosti o zlúčenie sa pozrieme na to, ako sa vykonáva úloha CI/CD deploy:multidev.

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

Pozrite, nové vlákno bolo odoslané do Pantheonu. Ak však prejdeme do sekcie pre viac vývojárov na hlavnom paneli stránky Pantheon, nové prostredie tam neuvidíme

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

Pozrime sa na sekciu Git Branches.

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

V dôsledku toho naše vlákno mr-1 dostali do Panteónu. Vytvorme prostredie z brandže mr-1.

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

Vytvorili sme multidev prostredie, teraz sa vráťme do GitLabu a pozrime sa na sekciu Operácie > Prostredia. Uvidíme záznamy pre dev и mr-1.

Je to preto, že sme pridali záznam environment S menom name и url do úloh CI/CD. Ak klikneme na ikonu otvoreného prostredia, dostaneme sa na URL multidev prostredia na Pantheone.

Automatizujte vytváranie multidev

V zásade sa tu môžete zastaviť a nezabudnite vytvoriť multidev prostredie pre každú žiadosť o zlúčenie, ale tento proces sa dá automatizovať.

Pantheon má nástroj príkazového riadku Konečná stanica, kde môžete s platformou pracovať automaticky. Terminus vám umožňuje vytvárať multidev prostredia z príkazového riadku – ideálne pre GitLab CI.

Na otestovanie potrebujeme novú žiadosť o zlúčenie. Vytvorme novú vetvu pomocou git checkout -b auto-multidev-creation.

Ak chcete používať Terminus v úlohách GitLab CI/CD, potrebujete strojový token na autentifikáciu s Terminusom a obraz kontajnera s Terminusom.

Vytvorenie tokenu stroja Pantheon, uložte ju na bezpečné miesto a pridajte ju ako globálnu premennú prostredia v GitLab s názvom PANTHEON_MACHINE_TOKEN.

Ak ste zabudli, ako pridať premenné prostredia GitLab, vráťte sa tam, kde sme definovali PANTHEON_SITE.

Vytvorenie súboru Docker pomocou programu Terminus

Ak nepoužívate Docker alebo sa vám nepáčia súbory Dockerfile, vezmi môj obrázok registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest a preskočte túto časť.

GitLab má register kontajnerov, kde môžeme vytvoriť a umiestniť Dockerfile pre náš projekt. Poďme vytvoriť Dockerfile s Terminusom na prácu s Pantheonom.

Terminus je nástroj príkazového riadka PHP, takže začnime s obrázkom PHP. Inštalujem Terminus cez Composer, takže použijem oficiálny obrázok Docker Composer. Tvoríme Dockerfile v adresári lokálneho úložiska s nasledujúcim obsahom:

# 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 podľa pokynov na zostavenie a odoslanie obrázkov zo sekcie Vytvárajte a posúvajte obrázky в dokumentáciu registra kontajnerovzozbierať obrázok Dockerfile a pošlite ho do GitLabu.

Otvorenie sekcie register v projekte GitLab. Ak všetko pôjde podľa plánu, náš imidž tam bude. Zapíšte si odkaz na značku obrázka - potrebujeme ho pre súbor .gitlab-ci.yml.

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

časť script v probléme deploy:multidev začína rásť, tak ho presunieme do samostatného súboru. Vytvorte nový súbor 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 súkromnom adresári a neumožňuje webový prístup k Pantheonu. Máme skript pre našu multidev logiku. Poďme teraz aktualizovať sekciu deploy:multidev súbor .gitlab-ci.ymlaby to dopadlo 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 sa uistiť, že sa naše úlohy vykonávajú vo vytvorenom vlastnom obrázku, takže pridajme definíciu image z adresy URL registra na .gitlab-ci.yml. Výsledkom bolo, že sme skončili s takýmto súborom .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

Pridajte, potvrďte a odošlite private/multidev-deploy.sh и .gitlab-ci.yml. Teraz sa vrátime do GitLabu a čakáme na dokončenie úlohy CI/CD. Buďte trpezliví: vytvorenie multidev môže trvať niekoľko minút.

Potom sa pozrieme na zoznam multidev na Pantheone. Ó zázrak! Multidev prostredie mr-2 už tu.

Ako prepojiť GitLab a Pantheon a optimalizovať pracovné postupy Drupal a WordPress

Záver

Môj tím si užil oveľa viac zábavy, keď sme začali automaticky otvárať žiadosti o zlúčenie a vytvárať prostredia.

Pomocou výkonných nástrojov GitLab a Pantheon môžete GitLab k Pantheonu pripojiť automaticky.

Keďže používame GitLab CI/CD, náš pracovný postup bude mať priestor na rast. Tu je niekoľko nápadov, ako začať:

Dajte nám vedieť, čo si myslíte o GitLab, Pantheon a automatizácii.

PS Vedeli ste, že Terminus, nástroj príkazového riadka Pantheonu, je možné rozšíriť pomocou pluginov?

My v Pantheone sme odviedli dobrú prácu na našej verzii 2 plugin pre nástroje na zostavovanie Terminusu s podporou GitLab. Ak sa nechcete trápiť s nastaveniami pre každý projekt, vyskúšajte tento plugin a pomôžte nám otestovať beta verziu v2. Pre tím Terminus build:project:create Potrebujete iba token Pantheon a token GitLab. Nasadí jeden zo vzorových projektov s Composerom a automatizovaným testovaním, vytvorí nový projekt v GitLab, novej lokalite Pantheon, a prepojí ich pomocou premenných prostredia a kľúčov SSH.

O autorovi

Andrew Taylor vytvára nástroje pre vývojárov v Panteón.

Zdroj: hab.com

Pridať komentár