Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada
Naš gostujući kreator alata za razvojne programere u Pantheonu govori o tome kako automatizirati implementaciju WordPressa koristeći GitLab CI/CD.

В Panteon Radim u odnosima s programerima, tako da uvijek tražim nove načine da pomognem programerima WordPressa i Drupala da riješe probleme automatizacije u svojim radnim procesima. Da bih to učinio, volim eksperimentirati s novim alatima i međusobno ih kombinirati kako bi djelovali učinkovito.

Često vidim programere kako se muče s jednim probnim poslužiteljem.

Pravo je zadovoljstvo čekati da dođete na red za korištenje posredničkog poslužitelja ili slanje klijentima URL-a s napomenom: "Pogledajte ovdje, ali nemojte još gledati ovdje."

Multidev okruženja - jedan od cool Pantheon alata - rješava ovaj problem, jer s njima možete kreirati okruženja za Git grane na zahtjev. Svako multidev okruženje ima vlastiti URL i bazu podataka, tako da programeri mogu tiho raditi, provjeravati kvalitetu i dobiti odobrenje bez da jedni drugima gaze po prstima.

Ali Pantheon nema alate za kontrolu verzija ili kontinuiranu integraciju i implementaciju (CI/CD). Ali to je fleksibilna platforma s kojom možete integrirati bilo koji alat.

Također sam primijetio da timovi koriste određene alate za razvoj, a različite za sklapanje i implementaciju.

Na primjer, imaju različite alate za kontrolu verzija i CI/CD. Morate petljati i mijenjati alate za uređivanje koda i dijagnosticiranje problema.

Na GitLab postoji cijeli set razvojnih alata: za kontrolu verzija, ulaznice, zahtjeve za spajanje, najbolji u klasi CI/CD cjevovod, registar spremnika i sve slično. Još nisam naišao na aplikaciju koja nudi toliko toga za upravljanje razvojnim procesom.

Volim automatizaciju, pa sam naučio kako povezati Pantheon s GitLabom tako da se obveza prema glavnoj grani na GitLabu rasporedi u glavno razvojno okruženje u Pantheonu. A zahtjevi za spajanje na GitLabu mogu stvoriti i implementirati kod u multidev okruženja u Pantheonu.

U ovom tutorialu ću vas provesti kroz kako postaviti vezu između GitLaba i Pantheona i optimizirati vaš tijek rada na WordPressu i Drupalu.

Naravno da je moguće, ogledalo GitLab repozitorija, ali sve ćemo učiniti svojim rukama da se udubimo GitLab CI iu budućnosti koristiti ovaj alat ne samo za implementaciju.

Uvod

Za ovaj post morate razumjeti da Pantheon rastavlja svaku stranicu na tri elementa: kod, bazu podataka i datoteke.

Kod uključuje CMS datoteke kao što su WordPress jezgra, dodaci i teme. Ovim se datotekama upravlja u Git spremišta, koji hostira Pantheon, što znači da možemo implementirati kod iz GitLaba u Pantheon s Gitom.
Datoteke u Pantheonu su medijske datoteke, odnosno slike za stranicu. Obično ih postavljaju korisnici, a Git ih ignorira.

Stvorite besplatan korisnički račun, saznajte više o Pantheon tijek rada ili prijavite se za demo na pantheon.io.

pretpostavke

Moj projekt na Pantheonu i GitLabu zove se pantheon-gitlab-blog-demo. Naziv projekta mora biti jedinstven. Ovdje ćemo raditi s WordPress stranicom. Možete uzeti Drupal, ali ćete morati promijeniti neke stvari.

koristiti ću Git naredbeni redaki možete raditi u grafičko sučelje, ako želiš.

Napravite projekt

Prvo, krenimo GitLab projekt (vratit ćemo se na ovo kasnije).

Sada stvaranje WordPress web stranice na Pantheonu. Zatim instaliramo WordPress za nadzornu ploču stranice.

Ako vas svrbe ruke da nešto promijenite, na primjer, uklonite ili dodate dodatke, budite strpljivi. Stranica još nije povezana s GitLabom i želimo da sve promjene koda prolaze kroz GitLab.

Nakon što instaliramo WordPress, vratimo se na nadzornu ploču web stranice Pantheon i promijenimo način razvoja u Git.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Početni commit na GitLabu

Sada morate prenijeti početni WordPress kod s Pantheon stranice na GitLab. Da bismo to učinili, lokalno kloniramo kod iz Git repozitorija stranice Pantheon, a zatim ga šaljemo u GitLab repozitorij.

Da bi bilo lakše i sigurnije, dodajte SSH ključ u Pantheon i nećemo morati unositi lozinku svaki put kada kloniramo Pantheon Git repozitorij. Već u isto vrijeme dodajte SSH ključ u GitLab.

Da biste to učinili, lokalno klonirajte mjesto Pantheon kopiranjem naredbe iz polja Kloniraj s Gitom na nadzornoj ploči mjesta.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada
Ako trebate pomoć, pročitajte dokumentaciju početak rada s Gitom za Pantheon.

Sada se presvucimo git remote originda ukazuje na GitLab umjesto na Pantheon. Može se командой git remote.

Idemo na GitLab projekt i kopirajmo URL spremišta iz padajućeg izbornika Klon na stranici s detaljima projekta. Odaberimo opciju Clone with SSH, jer smo već konfigurirali SSH ključ.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Po defaultu git remote za lokalnu kopiju repozitorija koda - origin. Ovo se može promijeniti c git remote set-url origin [URL репозитория GitLab], gdje umjesto zagrada upisujemo stvarni URL.

Konačno, pokrećemo git push origin master --forceprenijeti WordPress kod iz Pantheona u GitLab.

Opcija –force potrebna je samo jednom. Zatim u timovima git push neće biti na GitLabu.

Postavljanje vjerodajnica i varijabli

Sjećate se kako smo lokalno dodali SSH ključ za prijavu na Pantheon i GitLab? SSH token se može koristiti za autorizaciju GitLaba i Pantheona.

GitLab ima izvrsnu dokumentaciju. Da vidimo odjeljak o SSH ključevima pri korištenju Docker egzekutora u dokumentu o korištenju SSH ključeva s GitLab CI/CD.

Sada ćemo dovršiti prva dva koraka: Stvorimo novi par SSH ključeva lokalno s ssh-keygenom i dodamo privatni ključ kao varijablu projektu.

Onda ćemo pitati SSH_PRIVATE_KEY kao GitLab CI/CD varijabla okruženja u postavkama projekta.
U trećem i četvrtom koraku izradit ćemo datoteku .gitlab-ci.yml sa ovakvim sadržajem:

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"

Nemojmo još predavati datoteku .gitlab-ci.yml, tada ćete mu morati dodati još nešto.

Sada izvodimo peti korak i dodajte javni ključ koji ste izradili u prvom koraku uslugama kojima trebate pristupiti u okruženju izgradnje.

U našem slučaju, želimo pristupiti Pantheonu iz GitLaba. Slijedimo upute u Pantheon dokumentu o dodavanjem SSH ključa u Pantheon i izvršite ovaj korak.

Zapamtite: privatni SSH je u GitLabu, otvoreni SSH je u Pantheonu.

Postavimo još nekoliko varijabli okruženja. Prvi se zove PANTHEON_SITE. Njegova vrijednost je naziv Pantheon stranice na vašem računalu.

Ime na stroju navedeno je na kraju naredbe Clone with Git. Već ste lokalno klonirali stranicu, tako da će ovo biti naziv direktorija lokalnog repozitorija.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Zatim, postavimo varijablu okoline PANTHEON_GIT_URL. Ovo je URL Git repozitorija za Pantheon stranicu koju smo već koristili.

Unesite samo URL SSH repozitorija, bez git clone i naziv stranice na stroju na kraju.

Fuj. To je gotovo, sada možemo završiti našu datoteku .gitlab-ci.yml.

Stvorite zadatak implementacije

Ono što ćemo u početku raditi s GitLab CI vrlo je slično onome što smo radili s Git repozitorijima u prošlosti. Ali ovaj put, dodajmo Pantheon repozitorij kao drugi udaljeni Git izvor, a zatim gurnimo kod iz GitLaba u Pantheon.

Da bismo to učinili, konfigurirajmo faza deploy и zadatak deploy:dev, jer ćemo implementirati u razvojno okruženje na Pantheonu. Dobivena datoteka .gitlab-ci.yml izgledat će ovako:

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

varijable SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL trebalo bi izgledati poznato - ranije smo postavili ove varijable okruženja. S ovim varijablama moći ćemo koristiti vrijednosti u datoteci .gitlab-ci.yml mnogo puta, a morat će se ažurirati samo na jednom mjestu.

Na kraju, dodajte, izvršite i pošaljite datoteku .gitlab-ci.yml na GitLabu.

Provjera raspoređivanja

Ako smo sve napravili kako treba, zadatak deploy:dev će se uspješno pokrenuti u GitLab CI/CD-u i poslati commit .gitlab-ci.yml u Panteonu. Idemo pogledati.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Slanje niti zahtjeva za spajanje Pantheonu

Ovdje ćemo koristiti moju omiljenu značajku Pantheona − multidev, gdje možete stvoriti dodatna Pantheon okruženja za Git grane na zahtjev.

Pristup multidevu je ograničen, pa se ovaj odjeljak može preskočiti. Ali ako imate pristup, možete ozbiljno povećati produktivnost postavljanjem automatskog stvaranja multidev okruženja na Pantheonu iz GitLab zahtjeva za spajanje.

Prvo napravimo novu Git granu lokalno koristeći git checkout -b multidev-support. Sada opet promijenimo nešto .gitlab-ci.yml.

Volim uključiti broj zahtjeva za spajanje u naziv okruženja Pantheon. Na primjer, prvi zahtjev za spajanje je mr-1, drugi - mr-2 itd.

Zahtjev za spajanje se mijenja, pa moramo dinamički odrediti nazive grana Pantheona. Na GitLabu je jednostavno - samo ga trebate koristiti unaprijed definirane varijable okoline.

Možemo uzeti $CI_MERGE_REQUEST_IIDza navođenje broja zahtjeva za spajanje. Primijenimo sve ovo zajedno s globalnim varijablama okruženja koje smo ranije naveli i dodajmo novi deploy:multidev zadatak na kraj 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 će biti slično našem zadatku deploy:dev, samo se grana šalje u Pantheon, ne u master.

Dodali smo i potvrdili ažuriranu datoteku .gitlab-ci.yml, a sada gurnimo novu granu u GitLab s git push -u origin multidev-support.

Kreirajmo sada novi zahtjev za spajanje iz grane multidev-supportpritiskom Kreirajte zahtjev za spajanje.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Nakon što smo izradili zahtjev za spajanje, gledamo kako se izvršava CI/CD zadatak deploy:multidev.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Pogledajte, nova nit je poslana Pantheonu. Ali ako odemo na multidev odjeljak na nadzornoj ploči stranice Pantheon, tamo nećemo vidjeti novo okruženje

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Pogledajmo odjeljak Git grane.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Kao rezultat toga, naša nit mr-1 došao do Panteona. Stvorimo okruženje od grane mr-1.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Stvorili smo multidev okruženje, sada se vratimo na GitLab i pogledajmo odjeljak Operacije > Okruženja. Vidjet ćemo unose za dev и mr-1.

To je zato što smo dodali unos environment S imenom name и url u CI/CD zadatke. Ako kliknemo na ikonu otvorenog okruženja, bit ćemo prebačeni na URL multidev okruženja na Pantheonu.

Automatizirajte stvaranje multidev

U principu, možete stati ovdje i samo se sjetiti stvoriti multidev okruženje za svaki zahtjev za spajanje, ali ovaj proces može biti automatiziran.

Pantheon ima alat naredbenog retka Svršetak, gdje možete automatski raditi s platformom. Terminus vam omogućuje stvaranje multidev okruženja iz naredbenog retka - idealno za GitLab CI.

Trebamo novi zahtjev za spajanje da ovo testiramo. Kreirajmo novu granu pomoću git checkout -b auto-multidev-creation.

Za korištenje Terminusa u GitLab CI/CD zadacima potreban vam je strojni token za autentifikaciju s Terminusom i slika spremnika s Terminusom.

Stvaranje tokena Pantheon Machine, spremite ga na sigurno mjesto i dodajte ga kao globalnu varijablu okruženja u GitLab s imenom PANTHEON_MACHINE_TOKEN.

Ako ste zaboravili kako dodati GitLab varijable okruženja, vratite se tamo gdje smo definirali PANTHEON_SITE.

Stvaranje Dockerfilea s Terminusom

Ako ne koristite Docker ili ne volite datoteke Dockerfile, uzmi moju sliku registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest i preskočite ovaj odjeljak.

GitLab ima registar spremnika, gdje možemo izgraditi i postaviti Dockerfile za naš projekt. Kreirajmo Dockerfile s Terminusom za rad s Pantheonom.

Terminus je alat PHP naredbenog retka, pa počnimo s PHP slikom. Instaliram Terminus preko Composer-a, pa ću koristiti službena slika Docker Composer. Mi stvaramo Dockerfile u direktoriju lokalnog repozitorija sa sljedećim sadržajem:

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

Slijedite upute za sastavljanje i slanje slika iz odjeljka Izgradite i progurajte slike в dokumentacija registra kontejnerasakupiti sliku Dockerfile i gurnite ga u GitLab.

Otvaranje odjeljka registra u projektu GitLab. Ako je sve išlo po planu, naš imidž će biti tu. Zapišite vezu na oznaku slike - potrebna nam je za datoteku .gitlab-ci.yml.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Odjeljak script u problemu deploy:multidev počinje rasti, pa ga premjestimo u zasebnu datoteku. Napravite novu datoteku 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

Skripta je u privatnom imeniku i ne dopušta web pristup Pantheonu. Imamo skriptu za našu multidev logiku. Hajdemo sada ažurirati odjeljak deploy:multidev datoteka .gitlab-ci.ymltako da ispadne ovako:

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

Moramo biti sigurni da se naši zadaci izvode u stvorenoj prilagođenoj slici, pa dodajmo definiciju image od URL-a registra do .gitlab-ci.yml. Kao rezultat toga, dobili smo ovakvu datoteku .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

Dodati, izvršiti i poslati private/multidev-deploy.sh и .gitlab-ci.yml. Sada se vraćamo u GitLab i čekamo da se CI/CD zadatak završi. Budite strpljivi: stvaranje multideva može potrajati nekoliko minuta.

Zatim idemo pogledati multidev popis na Pantheonu. O čudo! Multidev okruženje mr-2 već ovdje.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress tijek rada

Zaključak

Moj tim se puno više zabavljao kada smo počeli automatski otvarati zahtjeve za spajanje i stvarati okruženja.

S moćnim alatima GitLaba i Pantheona možete automatski povezati GitLab s Pantheonom.

Budući da koristimo GitLab CI/CD, naš tijek rada imat će prostora za rast. Evo nekoliko ideja za početak:

Javite nam što mislite o GitLabu, Pantheonu i automatizaciji.

PS Jeste li znali da Terminus, Pantheonov alat naredbenog retka, može se proširiti putem dodataka?

Mi u Pantheonu napravili smo dobar posao na našoj verziji 2 dodatak za alate za izgradnju Terminusa s podrškom za GitLab. Ako se ne želite gnjaviti s postavkama za svaki projekt, isprobajte ovaj dodatak i pomozite nam testirati v2 beta. Za ekipu Terminusa build:project:create Potreban vam je samo Pantheon token i GitLab token. Ona će implementirati jedan od oglednih projekata s Composerom i automatiziranim testiranjem, izraditi novi projekt u GitLabu, novoj stranici Pantheon, i povezati ih pomoću varijabli okruženja i SSH ključeva.

O autoru

Andrew Taylor stvara alate za programere u Panteon.

Izvor: www.habr.com

Dodajte komentar