Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress
Naš gostujoči ustvarjalec orodij za razvijalce pri Pantheonu govori o tem, kako avtomatizirati uvedbe WordPressa z uporabo GitLab CI/CD.

В Pantheon Delam na področju odnosov z razvijalci, zato vedno iščem nove načine za pomoč razvijalcem WordPress in Drupal pri reševanju težav z avtomatizacijo v njihovih delovnih tokovih. Da bi to naredil, rad eksperimentiram z novimi orodji in jih kombiniram med seboj, da delujejo učinkovito.

Pogosto vidim razvijalce, ki se borijo z enim samim uprizoritvenim strežnikom.

Tako veselje je počakati, da prideš na vrsto, da uporabiš vmesni strežnik ali odjemalcem pošlješ URL z opombo: "Poglejte sem, vendar še ne glejte tukaj."

Multidev okolja - eno od kul orodij Pantheon - rešuje to težavo, saj lahko z njimi ustvarite okolja za veje Git na zahtevo. Vsako multidev okolje ima svoj URL in bazo podatkov, tako da lahko razvijalci delajo tiho, preverjajo kakovost in dobijo odobritev, ne da bi drug drugemu stopili na prste.

Toda Pantheon nima orodij za nadzor različic ali stalno integracijo in uvajanje (CI/CD). Je pa prilagodljiva platforma, s katero lahko integrirate poljubna orodja.

Opazil sem tudi, da ekipe uporabljajo določena orodja za razvoj, druga pa za sestavljanje in uvajanje.

Imajo na primer različna orodja za nadzor različic in CI/CD. Za urejanje kode in diagnosticiranje težav se morate poigrati in preklapljati med orodji.

Na GitLab obstaja celoten nabor razvojnih orodij: za nadzor različic, vstopnice, zahteve za spajanje, najboljši cevovod CI/CD v svojem razredu, register vsebnikov in vse podobno. Nisem še naletel na aplikacijo, ki bi ponujala toliko za upravljanje vašega razvojnega poteka dela.

Obožujem avtomatizacijo, zato sem se naučil, kako povezati Pantheon z GitLabom, tako da se zaveze v glavno vejo na GitLabu razporedijo v glavno razvojno okolje v Pantheonu. Zahteve za spajanje v GitLabu pa lahko ustvarijo in uvedejo kodo v večrazvojna okolja v Pantheonu.

V tej vadnici vam bom predstavil, kako vzpostaviti povezavo med GitLabom in Pantheonom ter optimizirati potek dela WordPress in Drupal.

Seveda je možno, ogledalo GitLab repozitorij, a bomo vse naredili z rokami, da se poglobimo v GitLab CI in v prihodnje uporabljajte to orodje ne le za uvajanje.

Predstavitev

Za to objavo morate razumeti, da Pantheon vsako spletno mesto razdeli na tri elemente: kodo, bazo podatkov in datoteke.

Koda vključuje datoteke CMS, kot so jedro WordPressa, vtičniki in teme. Te datoteke se upravljajo v Git repozitoriji, ki ga gosti Pantheon, kar pomeni, da lahko uvedemo kodo iz GitLaba v Pantheon z Gitom.
Datoteke v Pantheonu so medijske datoteke, torej slike za spletno mesto. Običajno jih naložijo uporabniki, Git pa jih ignorira.

Ustvarite brezplačen račun, izvedeti več o Potek dela Pantheon ali prijavite se za demo na pantheon.io.

Predpostavke

Moj projekt v Pantheonu in GitLabu se imenuje pantheon-gitlab-blog-demo. Ime projekta mora biti edinstveno. Tukaj bomo delali s spletnim mestom WordPress. Lahko vzamete Drupal, vendar boste morali spremeniti nekatere stvari.

bom uporabil Git ukazna vrsticain lahko delaš v grafični vmesnik, če želiš.

Ustvarite projekt

Najprej ustvarjajmo Projekt GitLab (k temu se bomo vrnili pozneje).

Zdaj ustvarjanje WordPress spletnega mesta na Pantheonu. Nato namestimo WordPress za nadzorno ploščo spletnega mesta.

Če vas roke srbijo, da bi nekaj spremenili, na primer, odstranili ali dodali vtičnike, bodite potrpežljivi. Spletno mesto še ni povezano z GitLabom in želimo, da gredo vse spremembe kode prek GitLaba.

Ko namestimo WordPress, se vrnite na nadzorno ploščo spletnega mesta Pantheon in spremenite razvojni način v Git.

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Začetna objava na GitLab

Zdaj morate prenesti začetno WordPress kodo s strani Pantheon v GitLab. Da bi to naredili, lokalno kloniramo kodo iz repozitorija Git na mestu Pantheon in jo nato pošljemo v repozitorij GitLab.

Da bo lažje in varneje, dodajte ključ SSH v Pantheon in ne bo nam treba vnesti gesla vsakič, ko kloniramo repozitorij Pantheon Git. Hkrati že dodajte ključ SSH v GitLab.

Če želite to narediti, lokalno klonirajte mesto Pantheon tako, da kopirate ukaz iz polja Kloniraj z Git na nadzorni plošči mesta.

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress
Če potrebujete pomoč, preberite dokumentacijo začetek uporabe Git for Pantheon.

Zdaj pa se spremenimo git remote originda kaže na GitLab namesto na Pantheon. Lahko se naredi командой git remote.

Pojdimo v projekt GitLab in kopirajmo URL repozitorija iz spustnega menija Klon na strani s podrobnostmi o projektu. Izberimo možnost Clone with SSH, saj smo ključ SSH že konfigurirali.

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Privzeto git remote za lokalno kopijo repozitorija kode - origin. To je mogoče spremeniti c git remote set-url origin [URL репозитория GitLab], kjer namesto oklepajev vnesemo dejanski URL.

Končno zaženemo git push origin master --forceza potiskanje kode WordPress iz Pantheona v GitLab.

Možnost –force je potrebna samo enkrat. Potem v ekipah git push ne bo na GitLabu.

Nastavitev poverilnic in spremenljivk

Se spomnite, kako smo lokalno dodali ključ SSH za prijavo v Pantheon in GitLab? Žeton SSH se lahko uporablja za avtorizacijo GitLaba in Pantheona.

GitLab ima odlično dokumentacijo. Pa poglejmo razdelek o ključih SSH pri uporabi izvajalca Docker v dokumentu o uporabi ključev SSH z GitLab CI/CD.

Zdaj bomo dokončali prva dva koraka: Ustvarimo nov par ključev SSH lokalno s ssh-keygen in dodajmo zasebni ključ kot spremenljivko v projekt.

Potem bomo vprašali SSH_PRIVATE_KEY kot Spremenljivka okolja GitLab CI/CD v nastavitvah projekta.
V tretjem in četrtem koraku bomo ustvarili datoteko .gitlab-ci.yml s takšno vsebino:

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"

Ne izdajajmo še datoteke .gitlab-ci.yml, potem mu boste morali dodati še nekaj.

Zdaj izvedemo peti korak in dodajte javni ključ, ki ste ga ustvarili v prvem koraku, storitvam, do katerih potrebujete dostop v okolju gradnje.

V našem primeru želimo dostopati do Pantheona iz GitLaba. Sledimo navodilom v dokumentu Pantheon o dodajanje ključa SSH v Pantheon in izvedite ta korak.

Ne pozabite: zasebni SSH je v GitLabu, odprti SSH je v Pantheonu.

Nastavimo še nekaj spremenljivk okolja. Prva se imenuje PANTHEON_SITE. Njegova vrednost je ime mesta Pantheon na vašem računalniku.

Ime stroja je navedeno na koncu ukaza Clone with Git. Stran ste že lokalno klonirali, zato bo to ime imenika lokalnega repozitorija.

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Nato nastavimo spremenljivko okolja PANTHEON_GIT_URL. To je URL Git repozitorija za mesto Pantheon, ki smo ga že uporabili.

Vnesite samo URL skladišča SSH, brez git clone in ime mesta na stroju na koncu.

Fuj. To je končano, zdaj lahko dokončamo našo datoteko .gitlab-ci.yml.

Ustvari nalogo uvajanja

Kar bomo na začetku počeli z GitLab CI, je zelo podobno tistemu, kar smo v preteklosti počeli z repozitoriji Git. Toda tokrat dodajmo repozitorij Pantheon kot drugi oddaljeni vir Git in nato potisnimo kodo iz GitLaba v Pantheon.

Če želite to narediti, konfigurirajmo stopnja deploy и opravilo deploy:dev, ker bomo namestili v razvojno okolje na Pantheonu. Nastala datoteka .gitlab-ci.yml bo videti takole:

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

Spremenljivke SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL bi moralo izgledati znano - te spremenljivke okolja smo nastavili prej. S temi spremenljivkami bomo lahko uporabili vrednosti v datoteki .gitlab-ci.yml večkrat in posodobiti jih bo treba samo na enem mestu.

Nazadnje dodajte, potrdite in pošljite datoteko .gitlab-ci.yml na GitLabu.

Preverjanje umestitve

Če smo vse naredili pravilno, naloga deploy:dev se bo uspešno izvajal v GitLab CI/CD in predložil objavo .gitlab-ci.yml pri Panteonu. Gremo pogledat.

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Pošiljanje niti zahtev za združitev v Pantheon

Tukaj bomo uporabili mojo najljubšo funkcijo Pantheon − multidev, kjer lahko na zahtevo ustvarite dodatna okolja Pantheon za veje Git.

Dostop do multidev je omejen, zato lahko ta razdelek preskočite. Toda če imate dostop, lahko resno povečate produktivnost tako, da na Pantheonu nastavite samodejno ustvarjanje večrazvojnih okolij iz zahtev za združevanje GitLab.

Najprej naredimo novo vejo Git lokalno z uporabo git checkout -b multidev-support. Zdaj pa spet nekaj spremenimo .gitlab-ci.yml.

Številko zahteve za združitev rad vključim v ime okolja Pantheon. Na primer, prva zahteva za združitev je mr-1, drugič - mr-2 itd.

Zahteva za združitev se spremeni, zato moramo dinamično določiti imena vej Pantheon. V GitLabu je preprosto - samo uporabljati ga morate vnaprej določene spremenljivke okolja.

Lahko vzamemo $CI_MERGE_REQUEST_IIDda določite številko zahteve za združitev. Uporabimo vse to skupaj z globalnimi spremenljivkami okolja, ki smo jih določili prej, in dodamo novo nalogo deploy:multidev na koncu datoteke .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

To bo podobno naši nalogi deploy:dev, le veja je poslana v Pantheon, ne v master.

Dodali smo in potrdili posodobljeno datoteko .gitlab-ci.yml, zdaj pa potisnimo novo vejo v GitLab z git push -u origin multidev-support.

Zdaj pa ustvarimo novo zahtevo za združitev iz veje multidev-supports pritiskom Ustvari zahtevo za združitev.

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Ko ustvarimo zahtevo za združitev, pogledamo, kako se izvaja naloga CI/CD deploy:multidev.

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Poglejte, nova nit je bila poslana Pantheonu. Toda če gremo v razdelek za več razvijalcev na nadzorni plošči mesta Pantheon, tam ne bomo videli novega okolja

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Poglejmo razdelek Git Branch.

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Kot rezultat, naša nit mr-1 prišel do Panteona. Ustvarimo okolje iz veje mr-1.

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Ustvarili smo multidev okolje, zdaj pa se vrnimo v GitLab in poglejmo razdelek Operacije > Okolja. Videli bomo vnose za dev и mr-1.

To je zato, ker smo dodali vnos environment Z imenom name и url v opravila CI/CD. Če kliknemo ikono odprtega okolja, bomo preusmerjeni na URL multidev okolja na Pantheonu.

Avtomatizirajte ustvarjanje multidev

Načeloma se lahko ustavite tukaj in ne pozabite ustvariti večrazvojnega okolja za vsako zahtevo za spajanje, vendar je ta postopek mogoče avtomatizirati.

Pantheon ima orodje ukazne vrstice Terminus, kjer lahko samodejno delate s platformo. Terminus vam omogoča ustvarjanje večrazvojnih okolij iz ukazne vrstice – idealno za GitLab CI.

Za preizkus tega potrebujemo novo zahtevo za združitev. Ustvarimo novo vejo z uporabo git checkout -b auto-multidev-creation.

Za uporabo Terminusa v opravilih GitLab CI/CD potrebujete strojni žeton za preverjanje pristnosti s Terminusom in sliko vsebnika s Terminusom.

Ustvarjanje Pantheon Machine Token, shranite na varno mesto in dodajte kot globalno spremenljivko okolja v GitLab z imenom PANTHEON_MACHINE_TOKEN.

Če ste pozabili, kako dodati spremenljivke okolja GitLab, se vrnite tja, kjer smo definirali PANTHEON_SITE.

Ustvarjanje datoteke Docker s Terminusom

Če ne uporabljate Dockerja ali ne marate datotek Dockerfile, vzemi mojo sliko registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest in preskočite ta razdelek.

GitLab ima register vsebnikov, kjer lahko zgradimo in postavimo Dockerfile za naš projekt. Ustvarimo Dockerfile s Terminusom za delo s Pantheonom.

Terminus je orodje ukazne vrstice PHP, zato začnimo s sliko PHP. Terminus nameščam prek Composerja, zato bom uporabil uradna slika Docker Composer. Mi ustvarjamo Dockerfile v imeniku lokalnega repozitorija z naslednjo vsebino:

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

Sledite navodilom za sestavljanje in pošiljanje slik iz razdelka Zgradite in potisnite slike в registrsko dokumentacijo kontejnerjevza zbiranje slike Dockerfile in ga potisnite v GitLab.

Odpiranje razdelka registra v projektu GitLab. Če bo šlo vse po načrtih, bo naša podoba tam. Zapišite povezavo do oznake slike - potrebujemo jo za datoteko .gitlab-ci.yml.

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Oddelek script v problemu deploy:multidev začenja rasti, zato ga premaknimo v ločeno datoteko. Ustvari novo datoteko 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 zasebnem imeniku in ne dovoljuje spletnega dostopa do Pantheona. Imamo skript za našo multidev logiko. Posodobimo razdelek deploy:multidev mapa .gitlab-ci.ymltako da se izkaže takole:

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

Zagotoviti moramo, da se naše naloge izvajajo v ustvarjeni sliki po meri, zato dodamo definicijo image od URL registra do .gitlab-ci.yml. Posledično smo dobili takšno datoteko .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

Dodajte, potrdite in pošljite private/multidev-deploy.sh и .gitlab-ci.yml. Zdaj se vrnemo v GitLab in počakamo, da se naloga CI/CD zaključi. Bodite potrpežljivi: ustvarjanje multidev lahko traja nekaj minut.

Potem gremo pogledat seznam multidev na Pantheonu. Oh čudež! Multidev okolje mr-2 že tukaj.

Kako povezati GitLab in Pantheon ter optimizirati delovne tokove Drupal in WordPress

Zaključek

Moja ekipa se je veliko bolj zabavala, ko smo začeli samodejno odpirati zahteve za spajanje in ustvarjati okolja.

Z zmogljivimi orodji GitLab in Pantheon lahko samodejno povežete GitLab s Pantheonom.

Ker uporabljamo GitLab CI/CD, bo naš potek dela imel prostor za rast. Tukaj je nekaj idej za začetek:

Povejte nam, kaj mislite o GitLabu, Pantheonu in avtomatizaciji.

PS Ali ste vedeli, da Terminus, Pantheonovo orodje ukazne vrstice, se lahko razširi prek vtičnikov?

Pri Pantheonu smo opravili dobro delo na različici 2 našega vtičnik za orodja za gradnjo Terminusa s podporo GitLab. Če se ne želite obremenjevati z nastavitvami za vsak projekt, preizkusite ta vtičnik in nam pomagajte preizkusiti v2 beta. Za ekipo Terminusa build:project:create Potrebujete le žeton Pantheon in žeton GitLab. Razmestila bo enega od vzorčnih projektov s Composerjem in avtomatiziranim testiranjem, ustvarila nov projekt v GitLabu, novem mestu Pantheon, in ju povezala s spremenljivkami okolja in ključi SSH.

O avtorju

Andrew Taylor ustvarja orodja za razvijalce v Pantheon.

Vir: www.habr.com

Dodaj komentar