Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

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

В panteon Radim u odnosima s programerima, tako da uvijek tražim nove načine da pomognem WordPress i Drupal programerima da riješe probleme automatizacije u svojim radnim procesima. Da bih to uradio, volim da eksperimentišem sa novim alatima i kombinujem ih jedni s drugima da bi efikasno radili.

Često vidim programere koji se bore sa jednim serverom za postavljanje.

Pravo je zadovoljstvo čekati da dođete na red da koristite posredni server ili klijentima pošaljete URL sa napomenom: „Pogledajte ovde, ali ne gledajte još ovde“.

Multidev okruženja - jedan od cool Pantheon alata - rješava ovaj problem, jer pomoću njih možete kreirati okruženja za Git grane na zahtjev. Svako multidev okruženje ima svoj URL i bazu podataka, tako da programeri mogu raditi tiho, provjeravati kvalitet i dobiti odobrenje bez da jedni drugima gaze na prste.

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

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 okolo i prelaziti između alata da biste uredili kod i dijagnosticirali probleme.

U GitLab postoji čitav skup razvojnih alata: za kontrolu verzija, tikete, zahtjeve za spajanje, najbolji u klasi CI/CD cevovod, registar kontejnera i sve slično. Još nisam naišao na aplikaciju koja nudi toliko toga za upravljanje vašim razvojnim procesom.

Volim automatizaciju, pa sam naučio kako da povežem Pantheon sa GitLabom tako da se obaveze prema glavnoj grani na GitLabu rasporede u glavno razvojno okruženje u Pantheonu. A zahtjevi za spajanjem na GitLab-u mogu kreirati i implementirati kod u multidev okruženja u Pantheonu.

U ovom tutorijalu, provest ću vas kroz kako postaviti vezu između GitLab-a i Pantheona i optimizirati vaš WordPress i Drupal radni tok.

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

Uvod

Za ovu objavu, morate razumjeti da Pantheon svaku stranicu raščlanjuje na tri elementa: kod, bazu podataka i datoteke.

Kod uključuje CMS datoteke kao što su WordPress jezgro, dodaci i teme. Ovim fajlovima se upravlja u Git spremišta, koji hostuje Pantheon, što znači da možemo implementirati kod sa GitLaba u Pantheon pomoću Gita.
Fajlovi u Pantheonu su medijski fajlovi, odnosno slike za sajt. Obično ih postavljaju korisnici, a Git ih ignorira.

Kreirajte besplatan nalog, saznajte više o Pantheon workflow ili prijavite se za demo na pantheon.io.

Pretpostavke

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

Ja ću koristiti Git komandna linijai možeš raditi grafički interfejs, ako želiš.

Kreirajte projekat

Prvo, krenimo GitLab projekat (na ovo ćemo se vratiti kasnije).

Sada kreiranje WordPress web stranice na Pantheonu. Zatim instaliramo WordPress za kontrolnu tablu stranice.

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

Nakon što instaliramo WordPress, vratite se na kontrolnu tablu Pantheon web stranice i promijenite način razvoja u Git.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

Početno urezivanje na GitLabu

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

Da bude lakše i sigurnije, dodajte SSH ključ u Pantheon i nećemo morati da unosimo lozinku svaki put kada kloniramo Pantheon Git repozitorijum. U isto vreme već dodajte SSH ključ u GitLab.

Da biste to učinili, klonirajte web lokaciju Pantheon lokalno kopiranjem naredbe iz polja Clone with Git na kontrolnoj tabli web stranice.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove
Ako vam je potrebna pomoć, pročitajte dokumentaciju početak rada sa Gitom za Pantheon.

Sada se promijenimo git remote originda pokažu na GitLab umjesto na Pantheon. To se može uraditi командой git remote.

Idemo na GitLab projekat i kopiramo URL spremišta iz padajućeg menija Clone na stranici sa detaljima projekta. Odaberimo opciju Clone with SSH, jer smo SSH ključ već konfigurirali.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

po defaultu git remote za lokalnu kopiju spremišta kodova - 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 --forceda gurne WordPress kod iz Pantheona u GitLab.

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

Postavljanje vjerodajnica i varijabli

Sjećate li 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 odličnu dokumentaciju. da vidimo odjeljak o SSH ključevima kada koristite Docker executor u dokumentu o korištenju SSH ključeva sa GitLab CI/CD.

Sada ćemo završiti prva dva koraka: Kreirajmo novi par SSH ključeva lokalno sa ssh-keygen i dodajmo privatni ključ kao varijablu projektu.

Onda ćemo pitati SSH_PRIVATE_KEY kako GitLab CI/CD varijabla okruženja u postavkama projekta.
U trećem i četvrtom koraku kreiraćemo fajl .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"

Hajde da još ne urezujemo fajl .gitlab-ci.yml, onda ćete morati tome dodati nešto drugo.

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

U našem slučaju želimo pristupiti Pantheonu iz GitLaba. Pratimo uputstva u dokumentu Pantheon na dodavanje 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šoj mašini.

Ime na mašini je navedeno na kraju komande Clone with Git. Već ste klonirali lokaciju lokalno, tako da će ovo biti ime direktorija lokalnog spremišta.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

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

Unesite samo URL SSH spremišta, bez git clone i naziv lokacije na mašini na kraju.

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

Kreirajte zadatak implementacije

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

Da bismo to uradili, hajde da konfigurišemo stage deploy и zadatak deploy:dev, jer ćemo se implementirati u razvojno okruženje na Pantheonu. Rezultirajuća 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 - ove varijable okruženja postavili smo ranije. Sa ovim varijablama moći ćemo koristiti vrijednosti u datoteci .gitlab-ci.yml mnogo puta, i samo će ih trebati ažurirati na jednom mjestu.

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

Provjera implementacije

Ako smo sve uradili kako treba, zadatak deploy:dev će se uspješno pokrenuti u GitLab CI/CD i poslati urezivanje .gitlab-ci.yml u Panteonu. Hajde da pogledamo.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

Slanje niti zahtjeva za spajanjem Pantheonu

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

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

Prvo napravimo novu Git granu lokalno koristeći git checkout -b multidev-support. Ajmo sada ponovo nešto da promenimo .gitlab-ci.yml.

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

Zahtjev za spajanje se mijenja, tako da moramo dinamički odrediti nazive grana Pantheona. Lako je na GitLabu - samo trebate koristiti unapred definisane varijable okruženja.

Možemo uzeti $CI_MERGE_REQUEST_IIDda navedete broj zahtjeva za spajanje. Primijenimo sve ovo zajedno sa globalnim varijablama okruženja koje smo ranije naveli i dodajmo novi zadatak deploy:multidev na kraju 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 Panteon, a ne u master.

Dodali smo i predali ažurirani fajl .gitlab-ci.yml, a sada gurnimo novu granu u GitLab sa git push -u origin multidev-support.

Sada kreirajmo novi zahtjev za spajanje iz grane multidev-supportklikom Kreirajte zahtjev za spajanje.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

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

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

Vidite, nova tema je poslana Pantheonu. Ali ako odemo na multidev odjeljak na kontrolnoj tabli Pantheon stranice, tamo nećemo vidjeti novo okruženje

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

Pogledajmo odjeljak Git Grane.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

Kao rezultat, naša nit mr-1 stigao do Panteona. Kreirajmo okruženje iz grane mr-1.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

Napravili smo multidev okruženje, sada se vratimo na GitLab i pogledajmo odjeljak Operacije > Okruženje. 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, bićemo odvedeni na URL multidev okruženja na Pantheonu.

Automatizirajte kreiranje multidev

U principu, možete stati ovdje i samo zapamtiti da kreirate multidev okruženje za svaki zahtjev za spajanje, ali ovaj proces se može automatizirati.

Pantheon ima alat za komandnu liniju svršetak, gdje možete automatski raditi sa platformom. Terminus vam omogućava da kreirate multidev okruženja iz komandne linije - idealno za GitLab CI.

Potreban nam je novi zahtjev za spajanje da bismo ovo testirali. Kreirajmo novu granu koristeći git checkout -b auto-multidev-creation.

Da biste koristili Terminus u GitLab CI/CD zadacima, potreban vam je strojni token za autentifikaciju sa Terminusom i slika kontejnera sa Terminusom.

Kreiranje tokena Pantheon Machine, sačuvajte ga na sigurnom mjestu i dodajte ga kao globalnu varijablu okruženja u GitLab sa imenom PANTHEON_MACHINE_TOKEN.

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

Kreiranje Dockerfile-a sa Terminus-om

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

GitLab ima registar kontejnera, gdje možemo izgraditi i postaviti Dockerfile za naš projekat. Kreirajmo Dockerfile sa Terminusom za rad sa Pantheonom.

Terminus je PHP alat za komandnu liniju, pa počnimo sa PHP slikom. Terminus instaliram preko Composer-a, pa ću ga koristiti zvanična slika Docker Composer. Mi stvaramo Dockerfile u direktoriju lokalnog spremišta 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 gurajte slike в dokumentacija registra kontejneraza prikupljanje slike od Dockerfile i gurnite ga u GitLab.

Otvorite odjeljak registar u GitLab projektu. Ako sve bude išlo po planu, naš imidž će biti tu. Zapišite vezu do oznake slike - potrebna nam je za datoteku .gitlab-ci.yml.

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

Odeljak script u problemu deploy:multidev počinje da raste, pa hajde da ga premestimo u zasebnu datoteku. Kreirajte novi fajl 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 direktoriju i ne dozvoljava web pristup Pantheonu. Imamo skriptu za našu multidev logiku. Ažurirajmo sada odjeljak deploy:multidev file .gitlab-ci.ymlpa 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 izvršavaju u kreiranoj prilagođenoj slici, pa dodajmo definiciju image od URL registra do .gitlab-ci.yml. Kao rezultat toga, dobili smo ovakav fajl .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, izvršite i pošaljite private/multidev-deploy.sh и .gitlab-ci.yml. Sada se vraćamo na GitLab i čekamo da se CI/CD zadatak završi. Budite strpljivi: multidev kreiranje može potrajati nekoliko minuta.

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

Kako povezati GitLab i Pantheon i optimizirati Drupal i WordPress radne tokove

zaključak

Moj tim se mnogo više zabavio kada smo počeli automatski otvarati zahtjeve za spajanje i kreirati okruženja.

Uz moćne alate GitLab i Pantheon, možete automatski povezati GitLab sa Pantheonom.

Pošto koristimo GitLab CI/CD, naš tok posla će imati prostora za rast. Evo nekoliko ideja za početak:

Recite nam šta mislite o GitLabu, Pantheonu i automatizaciji.

PS Da li ste znali da Terminus, Pantheonov alat za komandnu liniju, može se proširiti preko dodataka?

Mi u Pantheonu smo uradili dobar posao na našoj verziji 2 dodatak za alate za izgradnju Terminusa uz GitLab podršku. Ako se ne želite zamarati postavkama za svaki projekat, isprobajte ovaj dodatak i pomozite nam da testiramo v2 beta. Za ekipu Terminusa build:project:create Potreban vam je samo Pantheon token i GitLab token. Ona će implementirati jedan od uzoraka projekata sa Composer-om i automatizovanim testiranjem, kreirati novi projekat u GitLabu, novom Pantheon sajtu, i povezati ih pomoću varijabli okruženja i SSH ključeva.

O autoru

Andrew Taylor kreira alate za programere u panteon.

izvor: www.habr.com

Dodajte komentar