Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer
Ons skepper van gasontwikkelaarnutsgoed by Pantheon praat oor hoe om WordPress-ontplooiings met GitLab CI/CD te outomatiseer.

В Pantheon Ek werk in ontwikkelaarverhoudinge, so ek is altyd op soek na nuwe maniere om WordPress- en Drupal-ontwikkelaars te help om outomatiseringsprobleme in hul werkvloei op te los. Om dit te doen, eksperimenteer ek graag met nuwe gereedskap en kombineer dit met mekaar om effektief te werk.

Ek sien dikwels ontwikkelaars sukkel met 'n enkele bediener.

Dit is so 'n plesier om te wag vir jou beurt om 'n intermediêre bediener te gebruik of vir kliënte 'n URL te stuur met die nota: "Kyk hier, maar moet nog nie hier kyk nie."

Multidev omgewings - een van die cool Pantheon-gereedskap - los hierdie probleem op, want daarmee kan jy omgewings vir Git-takke op aanvraag skep. Elke multidev-omgewing het sy eie URL en databasis, sodat ontwikkelaars rustig kan werk, kwaliteit nagaan en goedkeuring kry sonder om op mekaar se tone te trap.

Maar Pantheon het nie gereedskap vir weergawebeheer of deurlopende integrasie en ontplooiing (CI/CD) nie. Maar dit is 'n buigsame platform waarmee u enige gereedskap kan integreer.

Ek het ook opgemerk dat spanne sekere instrumente vir ontwikkeling gebruik, en verskillendes vir samestelling en ontplooiing.

Hulle het byvoorbeeld verskillende gereedskap vir weergawebeheer en CI/CD. Jy moet rondvroetel en wissel tussen gereedskap om kode te wysig en probleme te diagnoseer.

Op GitLab daar is 'n volledige stel ontwikkelingshulpmiddels: vir weergawebeheer, kaartjies, samesmeltingsversoeke, 'n beste-in-klas CI/CD-pyplyn, 'n houerregister, en alles soos dit. Ek het nog nie 'n toepassing teëgekom wat soveel bied om jou ontwikkelingswerkvloei te bestuur nie.

Ek is mal oor outomatisering, so ek het geleer hoe om Pantheon aan GitLab te koppel sodat commits tot die hooftak op GitLab na die hoofontwikkelingsomgewing in Pantheon ontplooi word. En saamsmeltversoeke op GitLab kan kode skep en ontplooi na multidev-omgewings in Pantheon.

In hierdie tutoriaal sal ek jou deurloop hoe om 'n verbinding tussen GitLab en Pantheon op te stel en jou WordPress- en Drupal-werkvloei te optimaliseer.

Natuurlik is dit moontlik, spieël GitLab-bewaarplek, maar ons sal alles met ons hande doen om in te delf GitLab CI en in die toekoms gebruik hierdie hulpmiddel nie net vir ontplooiing nie.

Inleiding

Vir hierdie pos moet u verstaan ​​dat Pantheon elke webwerf in drie elemente opdeel: kode, databasis en lêers.

Die kode bevat CMS-lêers soos WordPress-kern, inproppe en temas. Hierdie lêers word bestuur in Git-bewaarplekke, aangebied deur Pantheon, wat beteken dat ons kode van GitLab na Pantheon met Git kan ontplooi.
Lêers in Pantheon is medialêers, dit wil sê beelde vir die webwerf. Tipies word dit deur gebruikers opgelaai en Git ignoreer hulle.

Skep 'n gratis rekening, vind meer uit oor Pantheon werkvloei of teken aan vir 'n demo by pantheon.io.

Aannames

My projek oor Pantheon en GitLab word genoem pantheon-gitlab-blog-demo. Die projeknaam moet uniek wees. Hier sal ons met 'n WordPress-werf werk. Jy kan Drupal neem, maar jy sal sekere dinge moet verander.

Ek sal gebruik Git opdragreëlen jy kan inwerk grafiese koppelvlak, as jy wil.

Skep 'n projek

Eerstens, laat ons skep GitLab-projek (ons kom later hierop terug).

nou skep 'n WordPress-webwerf op Pantheon. Dan installeer ons WordPress vir die werfkontroleskerm.

As jou hande jeuk om iets te verander, byvoorbeeld om plugins te verwyder of by te voeg, wees geduldig. Die webwerf is nog nie aan GitLab gekoppel nie, en ons wil hê dat alle kodeveranderings deur GitLab moet gaan.

Sodra ons WordPress geïnstalleer het, gaan terug na die Pantheon-webwerf se dashboard en verander die ontwikkelingsmodus na Git.

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

Aanvanklike commit op GitLab

Nou moet u die aanvanklike WordPress-kode van die Pantheon-werf na GitLab oordra. Om dit te doen, kloon ons die kode vanaf die Git-bewaarplek van die Pantheon-werf plaaslik, en stuur dit dan na die GitLab-bewaarplek.

Om dit makliker en veiliger te maak, voeg 'n SSH-sleutel by Pantheon en ons hoef nie 'n wagwoord in te voer elke keer as ons 'n Pantheon Git-bewaarplek kloon nie. Terselfdertyd reeds voeg 'n SSH-sleutel by GitLab.

Om dit te doen, kloon die Pantheon-werf plaaslik deur die opdrag van die Clone with Git-veld op die webwerf-kontroleskerm te kopieer.

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer
As jy hulp nodig het, lees die dokumentasie begin met Git vir Pantheon.

Kom ons verander nou git remote originom na GitLab te wys in plaas van Pantheon. Dit kan gedoen word командой git remote.

Kom ons gaan na die GitLab-projek en kopieer die bewaarplek-URL vanaf die Kloon-aftreklys op die projekbesonderhedebladsy. Kom ons kies die Kloon met SSH opsie, want ons het reeds die SSH sleutel gekonfigureer.

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

By verstek git remote vir 'n plaaslike kopie van die kodebewaarplek - origin. Dit kan verander word c git remote set-url origin [URL репозитория GitLab], waar in plaas van hakies ons die werklike URL invoer.

Uiteindelik begin ons git push origin master --forceom WordPress-kode van Pantheon na GitLab te stoot.

Die –force-opsie is net een keer nodig. Dan in spanne git push dit sal nie op GitLab wees nie.

Die opstel van geloofsbriewe en veranderlikes

Onthou jy hoe ons 'n SSH-sleutel plaaslik bygevoeg het om by Pantheon en GitLab aan te meld? Die SSH-token kan gebruik word om GitLab en Pantheon te magtig.

GitLab het uitstekende dokumentasie. Kom ons kyk afdeling oor SSH-sleutels wanneer die Docker-uitvoerder in die dokument gebruik word oor die gebruik van SSH-sleutels met GitLab CI/CD.

Ons sal nou die eerste twee stappe voltooi: Kom ons skep 'n nuwe SSH-sleutelpaar plaaslik met ssh-keygen en voeg die private sleutel as 'n veranderlike by die projek.

Dan sal ons vra SSH_PRIVATE_KEY hoe GitLab CI/CD omgewingsveranderlike in die projekinstellings.
In die derde en vierde stappe sal ons 'n lêer skep .gitlab-ci.yml met inhoud soos hierdie:

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"

Laat ons nog nie die lêer commit nie .gitlab-ci.yml, dan sal jy iets anders daarby moet voeg.

Nou voer ons die vyfde stap uit en voeg die publieke sleutel wat jy in die eerste stap geskep het by die dienste waartoe jy toegang benodig in die bou-omgewing.

In ons geval wil ons toegang verkry tot Pantheon vanaf GitLab. Ons volg die instruksies in die Pantheon-dokument op voeg 'n SSH-sleutel by Pantheon en voer hierdie stap uit.

Onthou: privaat SSH is in GitLab, oop SSH is in Pantheon.

Kom ons stel nog 'n paar omgewingsveranderlikes op. Die eerste een word PANTHEON_SITE genoem. Die waarde daarvan is die naam van die Pantheon-werf op jou masjien.

Die naam op die masjien word aan die einde van die Clone with Git-opdrag gelys. Jy het reeds die webwerf plaaslik gekloon, so dit sal die naam van die plaaslike bewaarplekgids wees.

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

Kom ons stel dan die omgewingsveranderlike op PANTHEON_GIT_URL. Dit is die Git-bewaarplek-URL vir die Pantheon-werf wat ons reeds gebruik het.

Voer slegs die URL van die SSH-bewaarplek in, sonder git clone en die naam van die webwerf op die masjien aan die einde.

Pff. Dit is klaar, nou kan ons ons lêer voltooi .gitlab-ci.yml.

Skep 'n ontplooiingstaak

Wat ons aanvanklik met GitLab CI gaan doen, is baie soortgelyk aan wat ons in die verlede met Git-bewaarplekke gedoen het. Maar hierdie keer, kom ons voeg die Pantheon-bewaarplek by as 'n tweede afgeleë Git-bron, en druk dan die kode van GitLab na Pantheon.

Om dit te doen, kom ons konfigureer verhoog deploy и taak deploy:dev, want ons sal ontplooi na die ontwikkelingsomgewing op Pantheon. Die resulterende lêer .gitlab-ci.yml sal so lyk:

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

veranderlikes SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL moet bekend lyk - ons het hierdie omgewingsveranderlikes vroeër opgestel. Met hierdie veranderlikes sal ons die waardes in die lêer kan gebruik .gitlab-ci.yml baie keer, en hulle sal net op een plek opgedateer hoef te word.

Laastens, voeg die lêer by, pleeg en stuur die lêer .gitlab-ci.yml op GitLab.

Gaan die ontplooiing na

As ons alles reg gedoen het, die taak deploy:dev sal suksesvol in GitLab CI/CD loop en 'n commit indien .gitlab-ci.yml by Pantheon. Kom ons kyk.

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

Stuur samesmeltingsversoekdrade na Pantheon

Hier sal ons my gunsteling Pantheon-funksie gebruik − multidev, waar jy op aanvraag bykomende Pantheon-omgewings vir Git-takke kan skep.

Toegang tot multidev is beperk, sodat hierdie afdeling oorgeslaan kan word. Maar as u toegang het, kan u produktiwiteit ernstig verhoog deur outomatiese skepping van multidev-omgewings op Pantheon vanaf GitLab-samesmeltingsversoeke op te stel.

Laat ons eers 'n nuwe Git-tak plaaslik maak deur gebruik te maak van git checkout -b multidev-support. Kom ons verander nou weer iets in .gitlab-ci.yml.

Ek hou daarvan om die samesmeltingsversoeknommer in die Pantheon-omgewingsnaam in te sluit. Byvoorbeeld, die eerste samesmeltingsversoek is mr-1, tweede - mr-2 ens.

Die samesmeltingsversoek verander, so ons moet die Pantheon-takname dinamies bepaal. Dit is maklik op GitLab - jy hoef net te gebruik vooraf gedefinieerde omgewingsveranderlikes.

Ons kan vat $CI_MERGE_REQUEST_IIDom die samesmeltingsversoeknommer te spesifiseer. Kom ons pas dit alles toe saam met die globale omgewingsveranderlikes wat ons vroeër gespesifiseer het en voeg 'n nuwe deploy:multidev-taak aan die einde van die lêer by .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

Dit sal soortgelyk wees aan ons taak deploy:dev, net die tak word na Pantheon gestuur, nie om nie master.

Ons het die opgedateerde lêer bygevoeg en toegepas .gitlab-ci.yml, en laat ons nou 'n nuwe tak na GitLab stoot git push -u origin multidev-support.

Kom ons skep nou 'n nuwe samesmeltingsversoek van die tak multidev-supportdeur te klik Skep saamvoegversoek.

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

Nadat ons 'n samesmeltingsversoek geskep het, kyk ons ​​na hoe die CI/CD-taak uitgevoer word deploy:multidev.

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

Kyk, 'n nuwe draad is na Pantheon gestuur. Maar as ons na die multidev-afdeling op die Pantheon-webwerf se dashboard gaan, sal ons nie die nuwe omgewing daar sien nie

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

Kom ons kyk na die Git-takke-afdeling.

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

As gevolg hiervan, ons draad mr-1 by Pantheon gekom. Kom ons skep 'n omgewing uit 'n tak mr-1.

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

Ons het 'n multidev-omgewing geskep, kom ons gaan nou terug na GitLab en kyk na die afdeling Bedryf > Omgewings. Ons sal inskrywings sien vir dev и mr-1.

Dit is omdat ons 'n inskrywing bygevoeg het environment Met naam name и url in CI/CD-take. As ons op die oop omgewing-ikoon klik, sal ons na die URL van die multidev-omgewing op Pantheon geneem word.

Outomatiseer die skepping van multidev

In beginsel kan jy hier stop en net onthou om 'n multidev-omgewing vir elke samesmeltingversoek te skep, maar hierdie proses kan geoutomatiseer word.

Pantheon het 'n opdragreëlinstrument Terminus, waar jy outomaties met die platform kan werk. Terminus laat jou toe om multidev-omgewings vanaf die opdragreël te skep - ideaal vir GitLab CI.

Ons benodig 'n nuwe samesmeltingsversoek om dit te toets. Kom ons skep 'n nuwe tak met behulp van git checkout -b auto-multidev-creation.

Om Terminus in GitLab CI/CD-take te gebruik, benodig jy 'n masjientoken vir verifikasie met Terminus en 'n houerbeeld met Terminus.

Skep 'n Pantheon Machine Token, stoor dit op 'n veilige plek en voeg dit by as 'n globale omgewingsveranderlike in GitLab met die naam PANTHEON_MACHINE_TOKEN.

As jy vergeet het hoe om GitLab-omgewingsveranderlikes by te voeg, gaan terug na waar ons gedefinieer het PANTHEON_SITE.

Skep 'n Docker-lêer met Terminus

As jy nie Docker gebruik nie of nie van lêers hou nie Dockerfile, neem my beeld registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest en slaan hierdie afdeling oor.

GitLab het 'n houerregister, waar ons die Dockerfile vir ons projek kan bou en plaas. Kom ons skep 'n Dockerfile met Terminus om met Pantheon te werk.

Terminus is 'n PHP-opdragreëlinstrument, so kom ons begin met die PHP-beeld. Ek installeer Terminus deur Composer, so ek sal gebruik amptelike Docker Composer-beeld. Ons skep Dockerfile in die plaaslike bewaarplekgids met die volgende inhoud:

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

Volg die instruksies vir die samestelling en stuur van beelde uit die afdeling Bou en druk beelde в houerregisterdokumentasieom 'n beeld van te versamel Dockerfile en druk dit na GitLab.

Maak die afdeling oop register in die GitLab-projek. As alles volgens plan verloop het, sal ons beeld daar wees. Skryf 'n skakel na die beeldmerker neer - ons het dit nodig vir die lêer .gitlab-ci.yml.

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

artikel script in die probleem deploy:multidev begin groei, so kom ons skuif dit na 'n aparte lêer. Skep 'n nuwe lêer 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

Die skrif is in 'n private gids en laat nie webtoegang tot Pantheon toe nie. Ons het 'n skrif vir ons multidev-logika. Kom ons werk nou die afdeling op deploy:multidev lêer .gitlab-ci.ymlsodat dit so uitkom:

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

Ons moet seker maak dat ons take uitgevoer word in die geskepte pasgemaakte beeld, so kom ons voeg 'n definisie by image van register URL na .gitlab-ci.yml. Gevolglik het ons met 'n lêer soos hierdie beland .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

Voeg by, verbind en stuur private/multidev-deploy.sh и .gitlab-ci.yml. Nou keer ons terug na GitLab en wag vir die CI/CD-taak om te voltooi. Wees geduldig: multidev kan 'n paar minute neem om te skep.

Dan gaan kyk ons ​​na die multidev-lys op Pantheon. O wonderwerk! Multidev omgewing mr-2 reeds hier.

Hoe om GitLab en Pantheon te koppel en Drupal- en WordPress-werkstrome te optimaliseer

Gevolgtrekking

My span het baie meer pret gehad toe ons saamsmeltversoeke begin oopmaak het en omgewings outomaties geskep het.

Met die kragtige instrumente van GitLab en Pantheon, kan jy GitLab outomaties aan Pantheon koppel.

Aangesien ons GitLab CI/CD gebruik, sal ons werkvloei ruimte hê om te groei. Hier is 'n paar idees om jou aan die gang te kry:

Laat weet my wat jy dink oor GitLab, Pantheon en outomatisering.

NS Het jy geweet dat Terminus, Pantheon se opdragreëlinstrument, kan uitgebrei word via plugins?

Ons by Pantheon het goeie werk gedoen met weergawe 2 van ons plugin vir Terminus bou gereedskap met GitLab-ondersteuning. As jy jou nie wil steur aan instellings vir elke projek nie, probeer hierdie inprop en help ons om die v2 beta te toets. Vir die Terminus-span build:project:create Jy benodig net 'n Pantheon-token en 'n GitLab-token. Sy sal een van die voorbeeldprojekte met Composer en outomatiese toetsing ontplooi, 'n nuwe projek in GitLab, 'n nuwe Pantheon-werf, skep en dit verbind met omgewingsveranderlikes en SSH-sleutels.

Oor die skrywer

Andrew Taylor skep gereedskap vir ontwikkelaars in Pantheon.

Bron: will.com

Voeg 'n opmerking