Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje
Us makker fan ark foar gastûntwikkelders by Pantheon praat oer hoe't jo WordPress-ynsetingen kinne automatisearje mei GitLab CI / CD.

В Pantheon Ik wurkje yn ûntwikkeldersrelaasjes, dus ik bin altyd op syk nei nije manieren om WordPress- en Drupal-ûntwikkelders te helpen automatisearringsproblemen yn har workflows op te lossen. Om dit te dwaan, eksperimintearje ik graach mei nije ark en kombinearje se mei elkoar om effektyf te wurkjen.

Ik sjoch faak ûntwikkelders wrakselje mei in inkele staging-tsjinner.

It is sa'n wille om te wachtsjen op jo beurt om in tuskentsjinner te brûken of kliïnten in URL te stjoeren mei de notysje: "Sjoch hjir, mar sjoch hjir noch net."

Multidev omjouwings - ien fan 'e koele Pantheon-ark - lost dit probleem op, om't jo mei har omjouwings kinne meitsje foar Git-tûken op oanfraach. Elke multidev-omjouwing hat in eigen URL en database, sadat ûntwikkelders rêstich kinne wurkje, kwaliteit kontrolearje en goedkarring krije sûnder elkoar op 'e teannen te stappen.

Mar Pantheon hat gjin ark foar ferzjekontrôle of trochgeande yntegraasje en ynset (CI / CD). Mar it is in fleksibel platfoarm wêrmei jo alle ark kinne yntegrearje.

Ik haw ek opmurken dat teams bepaalde ark brûke foar ûntwikkeling, en ferskate foar montage en ynset.

Bygelyks, se hawwe ferskillende ark foar ferzje kontrôle en CI / CD. Jo moatte omgean en wikselje tusken ark om koade te bewurkjen en problemen te diagnostisearjen.

op GitLab d'r is in folsleine set fan ûntwikkelingsynstruminten: foar ferzjekontrôle, kaartsjes, fúzjeoanfragen, in best-in-class CI/CD-pipeline, in kontenerregister, en alles sa. Ik bin noch net in applikaasje tsjinkommen dy't safolle biedt om jo ûntwikkelingsworkflow te behearjen.

Ik hâld fan automatisearring, dus ik learde hoe Pantheon te ferbinen mei GitLab, sadat commits foar de haadtûke op GitLab wurde ynset yn 'e wichtichste ûntwikkelingsomjouwing yn Pantheon. En fusearje oanfragen op GitLab kinne koade oanmeitsje en ynsette nei multidev-omjouwings yn Pantheon.

Yn dizze tutorial sil ik jo trochrinne hoe't jo in ferbining kinne ynstelle tusken GitLab en Pantheon en jo WordPress- en Drupal-workflow optimalisearje.

Fansels is it mooglik, spegel GitLab repository, mar wy sille alles mei ús hannen dwaan om yn te dûken GitLab CI en yn 'e takomst brûke dit ark net allinich foar ynset.

Ynlieding

Foar dizze post moatte jo begripe dat Pantheon elke side yn trije eleminten brekt: koade, databank en bestannen.

De koade omfettet CMS-bestannen lykas WordPress-kearn, plugins en tema's. Dizze bestannen wurde beheard yn Git repositories, hosted by Pantheon, wat betsjut dat wy koade kinne ynsette fan GitLab nei Pantheon mei Git.
Bestannen yn Pantheon binne mediabestannen, dat is ôfbyldings foar de side. Typysk wurde se uploaded troch brûkers en Git negearret se.

Meitsje in fergees akkount, fyn út mear oer Pantheon workflow of oanmelde foar in demo op pantheon.io.

Oannames

Myn projekt oer Pantheon en GitLab hjit pantheon-gitlab-blog-demo. De projektnamme moat unyk wêze. Hjir sille wy wurkje mei in WordPress-side. Jo kinne Drupal nimme, mar jo moatte wat dingen feroarje.

Ik sil brûke Git kommandorigelen do kinst wurkje yn grafyske ynterface, asto wolst.

Meitsje in projekt

Lit ús earst meitsje GitLab projekt (wy komme hjir letter op werom).

No it meitsjen fan in WordPress-webside op Pantheon. Dan ynstallearje wy WordPress foar it sidedashboard.

As jo ​​hannen jeukje om wat te feroarjen, bygelyks plugins fuortsmite of tafoegje, wês geduld. De side is noch net ferbûn mei GitLab, en wy wolle dat alle koadewizigingen fia GitLab geane.

Sadree't wy WordPress ynstallearje, gean werom nei it Pantheon-webside-dashboard en feroarje de ûntwikkelingsmodus nei Git.

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

Inisjele commit op GitLab

No moatte jo de earste WordPress-koade oerdrage fan 'e Pantheon-side nei GitLab. Om dit te dwaan, klonje wy de koade fan it Git-repository fan 'e Pantheon-side lokaal, en stjoere it dan nei it GitLab-repository.

Om it makliker en feiliger te meitsjen, foegje in SSH-kaai ta oan Pantheon en wy hoege net elke kear in wachtwurd yn te fieren as wy in Pantheon Git-repository klone. Tagelyk al foegje in SSH-kaai ta oan GitLab.

Om dit te dwaan, klonje de Pantheon-side lokaal troch it kommando te kopiearjen fan it fjild Clone mei Git op it side-dashboard.

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje
As jo ​​​​help nedich binne, lês dan de dokumintaasje te begjinnen mei Git foar Pantheon.

No litte wy feroarje git remote originom te wizen op GitLab ynstee fan Pantheon. It kin dien wurde командой git remote.

Litte wy nei it GitLab-projekt gean en de URL fan 'e repository kopiearje fan' e Clone dropdown op 'e side fan projektdetails. Litte wy de opsje Clone mei SSH kieze, om't wy de SSH-kaai al ynsteld hawwe.

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

standert git remote foar in lokale kopy fan 'e koade repository - origin. Dit kin feroare wurde c git remote set-url origin [URL репозитория GitLab], wêr't wy ynstee fan heakjes de eigentlike URL ynfiere.

Ta beslút, wy lansearje git push origin master --forceom WordPress-koade fan Pantheon nei GitLab te triuwen.

De opsje -force is mar ien kear nedich. Dan yn teams git push it sil net op GitLab wêze.

It ynstellen fan bewiisbrieven en fariabelen

Unthâld hoe't wy lokaal in SSH-kaai tafoege om oan te melden by Pantheon en GitLab? It SSH-token kin brûkt wurde om GitLab en Pantheon te autorisearjen.

GitLab hat poerbêste dokumintaasje. Litte wy sjen seksje oer SSH-kaaien by it brûken fan de Docker-útfierder yn it dokumint oer it brûken fan SSH-kaaien mei GitLab CI / CD.

Wy sille no de earste twa stappen foltôgje: Litte wy in nij SSH-kaaipear lokaal oanmeitsje mei ssh-keygen en de privee kaai taheakje as in fariabele oan it projekt.

Dan sille wy freegje SSH_PRIVATE_KEY hoe GitLab CI / CD omjouwingsfariabele yn 'e projektynstellingen.
Yn 'e tredde en fjirde stap meitsje wy in bestân .gitlab-ci.yml mei ynhâld lykas dizze:

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"

Litte wy it bestân noch net ynsette .gitlab-ci.yml, dan moatte jo der noch wat oan taheakje.

No wy fiere de fyfde stap en foegje de iepenbiere kaai ta dy't jo yn 'e earste stap makke hawwe oan' e tsjinsten wêr't jo tagong ta moatte yn 'e bouwomjouwing.

Yn ús gefal wolle wy tagong krije ta Pantheon fan GitLab. Wy folgje de ynstruksjes yn it Pantheon dokumint op it tafoegjen fan in SSH-kaai oan Pantheon en fier dizze stap.

Unthâld: privee SSH is yn GitLab, iepen SSH is yn Pantheon.

Litte wy in pear mear omjouwingsfariabelen ynstelle. De earste hjit PANTHEON_SITE. De wearde is de namme fan 'e Pantheon-side op jo masine.

De namme op 'e masine wurdt oanjûn oan' e ein fan 'e Clone mei Git kommando. Jo hawwe de side al lokaal klonen, dus dit sil de namme wêze fan de lokale repository-map.

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

Litte wy dan de omjouwingsfariabele ynstelle PANTHEON_GIT_URL. Dit is de Git-repository-URL foar de Pantheon-side dy't wy al hawwe brûkt.

Fier allinich de SSH-repository-URL yn, sûnder git clone en de namme fan 'e side op' e masine oan 'e ein.

Pff. Dat is dien, no kinne wy ​​ús bestân ôfmeitsje .gitlab-ci.yml.

Meitsje in ynset taak

Wat wy yn earste ynstânsje sille dwaan mei GitLab CI is heul gelyk oan wat wy yn it ferline dien hawwe mei Git-repositories. Mar dizze kear, litte wy it Pantheon-repository tafoegje as in twadde Git-boarne op ôfstân, en druk dan de koade fan GitLab nei Pantheon.

Om dit te dwaan, litte wy konfigurearje faze deploy и taak deploy:dev, om't wy sille ynsette nei de ûntwikkeling omjouwing op Pantheon. De resultearjende triem .gitlab-ci.yml sil der sa útsjen:

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

Fariabelen SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL moat fertroud lykje - wy hawwe dizze omjouwingsfariabelen earder ynsteld. Mei dizze fariabelen sille wy de wearden yn it bestân kinne brûke .gitlab-ci.yml in protte kearen, en se sille allinne moatte wurde fernijd op ien plak.

As lêste, tafoegje, ynsette en stjoer it bestân .gitlab-ci.yml op GitLab.

Kontrolearje de ynset

As wy alles goed diene, de taak deploy:dev sil mei súkses rinne yn GitLab CI / CD en in commit yntsjinje .gitlab-ci.yml by Pantheon. Litte wy ris sjen.

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

It ferstjoeren fan threads foar fúzjefersyk nei Pantheon

Hjir sille wy myn favorite Pantheon-funksje brûke - multidev, wêr't jo ekstra Pantheon-omjouwings kinne oanmeitsje foar Git-tûken op oanfraach.

Tagong ta multidev is beheind, sadat dizze seksje kin wurde oerslein. Mar as jo tagong hawwe, kinne jo de produktiviteit serieus ferheegje troch automatyske oanmeitsjen fan multidev-omjouwings op Pantheon yn te stellen fanút GitLab-fúzjeoanfragen.

Litte wy earst in nije Git-tûke lokaal meitsje mei help fan git checkout -b multidev-support. Lit ús no wer wat feroarje yn .gitlab-ci.yml.

Ik hâld fan it fúzjefersyknûmer op te nimmen yn 'e Pantheon-omjouwingsnamme. Bygelyks, it earste fúzjefersyk is mr-1, twadde - mr-2 ensfh.

It fúzjefersyk feroaret, dus moatte wy de nammen fan 'e Pantheon-tûken dynamysk bepale. It is maklik op GitLab - jo moatte gewoan brûke foarôf definiearre omjouwingsfariabelen.

Wy kinne nimme $CI_MERGE_REQUEST_IIDom it fúzjefersyknûmer oan te jaan. Litte wy dit alles tapasse tegearre mei de globale omjouwingsfariabelen dy't wy earder spesifisearre hawwe en in nije deploy:multidev-taak tafoegje oan 'e ein fan it bestân .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

It sil lykje op ús taak deploy:dev, allinnich de tûke wurdt stjoerd nei Pantheon, net oan master.

Wy hawwe it bywurke bestân tafoege en ynset .gitlab-ci.yml, en litte wy no in nije tûke nei GitLab triuwe mei git push -u origin multidev-support.

Litte wy no in nij fúzjefersyk oanmeitsje fan 'e branch multidev-supporttroch te klikken Meitsje fúzjefersyk.

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

Nei it meitsjen fan in fúzjefersyk, sjogge wy nei hoe't de CI / CD-taak wurdt útfierd deploy:multidev.

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

Sjoch, in nije tried is stjoerd nei Pantheon. Mar as wy nei de multidev-seksje gean op it Pantheon-side-dashboard, sille wy de nije omjouwing dêr net sjen

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

Litte wy nei de seksje Git Branches sjen.

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

As gefolch, ús tried mr-1 kaam nei Pantheon. Litte wy in omjouwing meitsje fan in branch mr-1.

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

Wy hawwe in multidev-omjouwing makke, litte wy no weromgean nei GitLab en sjoch nei de seksje Bedriuwen> Omjouwings. Wy sille sjen ynstjoerings foar dev и mr-1.

Dit komt om't wy in yngong tafoege environment Mei namme name и url yn CI / CD taken. As wy klikke op it ikoan foar iepen omjouwing, wurde wy nommen nei de URL fan 'e multidev-omjouwing op Pantheon.

Automatisearje de skepping fan multidev

Yn prinsipe kinne jo hjir stopje en gewoan ûnthâlde om in multidev-omjouwing te meitsjen foar elke fúzjefersyk, mar dit proses kin automatisearre wurde.

Pantheon hat in kommandorigelark Terminus, wêr kinne jo wurkje mei it platfoarm automatysk. Terminus lit jo multidev-omjouwings meitsje fanút de kommandorigel - ideaal foar GitLab CI.

Wy hawwe in nij fúzjefersyk nedich om dit te testen. Litte wy in nije tûke meitsje mei git checkout -b auto-multidev-creation.

Om Terminus te brûken yn GitLab CI / CD-taken, hawwe jo in masine-token nedich foar autentikaasje mei Terminus en in kontenerôfbylding mei Terminus.

It meitsjen fan in Pantheon Machine Token, bewarje it op in feilich plak en foegje it ta as in globale omjouwingsfariabele yn GitLab mei de namme PANTHEON_MACHINE_TOKEN.

As jo ​​​​fergetten binne hoe't jo GitLab-omjouwingsfariabelen tafoegje kinne, gean dan werom nei wêr't wy definieare PANTHEON_SITE.

In Dockerfile oanmeitsje mei Terminus

As jo ​​​​Dockerer net brûke of bestannen net leuk fine Dockerfile, nim myn byld registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest en oerslaan dizze seksje.

GitLab hat in kontenerregister, wêr't wy de Dockerfile kinne bouwe en pleatse foar ús projekt. Litte wy in Dockerfile meitsje mei Terminus om te wurkjen mei Pantheon.

Terminus is in PHP kommando-rigel-ark, dus litte wy begjinne mei de PHP-ôfbylding. Ik ynstallearje Terminus fia Composer, dus ik sil brûke offisjele Docker Composer-ôfbylding. Wy meitsje Dockerfile yn 'e lokale repository-map mei de folgjende ynhâld:

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

Folgje de ynstruksjes foar it gearstallen en ferstjoeren fan ôfbyldings út 'e seksje Bouwe en druk ôfbyldings в container register dokumintaasjeom in byld te sammeljen Dockerfile en triuw it nei GitLab.

Iepenje de seksje Registry yn it GitLab-projekt. As alles neffens plan gie, sil ús imago der wêze. Skriuw in keppeling op nei de ôfbyldingstag - wy hawwe it nedich foar it bestân .gitlab-ci.yml.

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

Seksje script yn it probleem deploy:multidev begjint te groeien, dus litte wy it ferpleatse nei in apart bestân. Meitsje in nije triem 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

It skript is yn in privee map en net tastean web tagong ta Pantheon. Wy hawwe in skript foar ús multidev logika. Litte wy no de seksje bywurkje deploy:multidev map .gitlab-ci.ymlsadat it sa útkomt:

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

Wy moatte derfoar soargje dat ús taken wurde útfierd yn 'e makke oanpaste ôfbylding, dus litte wy in definysje tafoegje image fan registraasje URL nei .gitlab-ci.yml. As gefolch hawwe wy in bestân as dit krigen .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

Foegje, ynsette en stjoere private/multidev-deploy.sh и .gitlab-ci.yml. No geane wy ​​werom nei GitLab en wachtsje oant de CI / CD-taak foltôge is. Wês geduldich: multidev kin ferskate minuten duorje om te meitsjen.

Dan geane wy ​​nei de multidev-list op Pantheon te sjen. O wûnder! Multidev omjouwing mr-2 al hjir.

Hoe kinne jo GitLab en Pantheon ferbine en Drupal- en WordPress-workflows optimalisearje

konklúzje

Myn team hie folle mear wille doe't wy begûn it iepenjen fan fúzje oanfragen en it meitsjen fan omjouwings automatysk.

Mei de krêftige ark fan GitLab en Pantheon kinne jo GitLab automatysk ferbine mei Pantheon.

Sûnt wy GitLab CI / CD brûke, sil ús workflow romte hawwe om te groeien. Hjir binne in pear ideeën om jo te begjinnen:

Lit ús witte wat jo tinke oer GitLab, Pantheon en automatisearring.

PS Wisten jo dat Terminus, Pantheon's kommandorigelark, kin útwreide wurde fia plugins?

Wy by Pantheon hawwe dien in goede baan op ferzje 2 fan ús plugin foar Terminus build-ark mei GitLab-stipe. As jo ​​​​net lestich falle wolle mei ynstellings foar elk projekt, besykje dan dizze plugin en help ús de v2 beta te testen. Foar it Terminus-team build:project:create Jo hawwe allinich in Pantheon-token en in GitLab-token nedich. Se sil ien fan 'e foarbyldprojekten ynsette mei Composer en automatisearre testen, in nij projekt meitsje yn GitLab, in nije Pantheon-side, en se ferbine mei omjouwingsfariabelen en SSH-kaaien.

Oer de skriuwer

Andrew Taylor makket ark foar ûntwikkelders yn Pantheon.

Boarne: www.habr.com

Add a comment