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

Kako povezati GitLab in Pantheon ter optimizirati delovne procese Drupal in WordPress
Naš gost, ustvarjalec orodij za razvijalce iz Pantheon, govori o tem, kako avtomatizirati implementacije WordPress-a z uporabo GitLab CI/CD.

V Pantheon Ukvarjam se s povezovanjem z razvijalci, zato vedno iščem nove načine, kako pomagati razvijalcem WordPress in Drupal pri reševanju težav z avtomatizacijo v njihovih delovnih postopkih. Z veseljem preizkušam nova orodja in jih kombiniram, da dosežem učinkovito delo.

Pogosto vidim, kako se razvijalci mučijo z enim posredniškim strežnikom.

Nič kaj prijetnega - čakati na svojo vrsto, da uporabite posredniški strežnik ali strankam posredovati URL z oznako: "Tukaj poglejte, tukaj pa ne gledajte še."

Zmogljivosti multidev — ena izmed super orodij Pantheon — rešujejo to težavo, saj lahko na zahtevo ustvarite okolja za Git veje. Vsako multidev okolje ima svoj URL in bazo podatkov, kar pomeni, da lahko razvijalci mirno delajo, preverjajo kakovost in pridobijo odobriti, ne da bi si stopili na prste.

Pantheon nima orodij za nadzor različic ali neprekinjeno integracijo in implementacijo (CI/CD). Kljub temu je to prilagodljiva platforma, s katero lahko integrirate vsa orodja.

Opazil sem tudi, da ekipe za razvoj uporabljajo druga orodja za razvoj in druga za implementacijo.

Na primer, imajo različna orodja za nadzor različic in CI/CD. Treba je delati z več orodji in se preklapljati med njimi, da bi urejali kodo in diagnosticirali težave.

Na GitLab Na voljo je popoln nabor orodij za razvoj: za nadzor različic, naloge, mergenje zahtevkov, vrhunski CI/CD pipeline, register kontejnerjev in vse podobno. Še nisem naletel na aplikacije, ki bi imele toliko pripravljene za upravljanje delovnega postopka razvoja.

Obožujem avtomatizacijo, zato sem raziskal, kako povezati Pantheon z GitLab, tako da se zaveze v glavno vejo na GitLab-u implementirajo v glavno razvojno okolje v Pantheon. Tudi merge requesti v GitLab-u lahko ustvarijo in implementirajo kodo v multidev okolja v Pantheon.

V tem priročniku bom opisal, kako nastaviti povezavo med GitLab-om in Pantheon ter optimizirati delovni postopek WordPress-a in Drupal-a.

Seveda lahko odzrcalimo repozitorij GitLab, toda vse bomo delali ročno, da bi raziskali GitLab CI in v prihodnosti uporabili to orodje ne samo za implementacijo.

Uvod

Za to objavo je treba razumeti, da Pantheon razdeli vsako spletno stran na tri elemente: koda, baza podatkov in datoteke.

V kodo spadajo datoteke CMS, kot so jedro, vtičniki in teme WordPress. Te datoteke se upravljajo v Git repozitoriju, ki ga gosti Pantheon, kar pomeni, da lahko razvijamo kodo iz GitLaba v Pantheon preko Git-a.
Datoteke v Pantheonu so medijske datoteke, torej slike za spletno stran. Običajno jih nalagajo uporabniki, Git pa jih ignorira.

Ustvarite brezplačen račun, izvedite več o delovnem procesu Pantheon ili prijavite se na demo na pantheon.io.

Predpostavke

Moj projekt na Pantheonu in GitLabu se imenuje pantheon-gitlab-blog-demo. Ime projekta mora biti edinstveno. Tukaj bomo delali s spletno stranjo WordPress. Lahko uporabite tudi Drupal, vendar bo treba nekaj spremeniti.

Uporabljal bom ukazno vrstico Git, vi pa lahko delate v grafičnem vmesniku, če želite.

Ustvarite projekt

Najprej ustvarite projekt GitLab (k temu se bomo še vrnili).

Sedaj ustvarimo spletno stran WordPress na Pantheonu. Nato namestimo WordPress za nadzorno ploščo strani.

Če ste kdaj željni kaj spremeniti, na primer odstraniti ali dodati vtičnike, počakajte. Spletna stran še ni povezana z GitLabom, mi pa želimo, da vse spremembe kode potekajo preko GitLaba.

Ko namestimo WordPress, se vrnemo na nadzorno ploščo Pantheon in spremenimo način razvoja v Git.

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

Začetni commit na GitLabu

Zdaj je treba prenesti začetno kodo WordPressa s spletne strani Pantheon na GitLab. Zato lokalno kloniramo kodo iz Git repozitorija spletne strani Pantheon, nato pa jo pošljemo v repozitorij GitLab.

Da bi bilo lažje in varneje, dodamo SSH ključ v Pantheon in ne bomo vsakič vnašali gesla, ko kloniramo repozitorij Pantheon Git. Hkrati bomo dodali SSH ključ na GitLab.

Za to lokalno kloniramo spletno stran Pantheon, tako da skopiramo ukaz iz polja Kloniraj z Git na nadzorni plošči strani.

Kako povezati GitLab in Pantheon ter optimizirati delovne procese Drupal in WordPress
Če potrebujete pomoč, preberite dokumentacijo za začetek dela z Gitom za Pantheon.

Zdaj spremenimo git remote origin, da kaže na GitLab namesto Pantheon. To lahko storite z ukazom git remote.

Pojdimo v projekt GitLab in skopirajmo URL repozitorija iz spustnega seznama Kloniraj na strani podrobnosti projekta. Izberemo možnost Kloniraj z SSH, saj smo že nastavili SSH ključ.

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

Privzeto git remote za lokalno kopijo repozitorija kode— origin. To lahko spremenimo s git remote set-url origin [URL repozitorija GitLab], kjer namesto okvirov vnesemo dejanski URL.

Nazadnje, izvedemo git push origin master --force, da pošljemo kodo WordPress s spletne strani Pantheon na GitLab.

Parameter –force is required only once. Then in the commands git push it will not be present on GitLab.

Setting up credentials and variables

Remember how we locally added the SSH key to authenticate with Pantheon and GitLab? The SSH token can be used for authentication with GitLab and Pantheon.

GitLab has excellent documentation. Let's take a look at the section on SSH keys when using the Docker executor in the documentation on using SSH keys with GitLab CI/CD.

Now we will perform the first two steps: we will create a new pair of SSH keys locally with ssh-keygen and add the private key as a variable in the project.

Then we will set SSH_PRIVATE_KEY kako environment variable for GitLab CI/CD in the project settings.
In the third and fourth steps, we will create the file .gitlab-ci.yml с таким содержимым:

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"

For now, let's not commit the file .gitlab-ci.yml, later we will need to add something else to it.

Now we perform the fifth step and add the public key we created in the first step to the services you need access to in the build environment.

In our case, we want to access Pantheon from GitLab. We follow the instructions in the Pantheon document on adding an SSH key in Pantheon and complete this step.

Remember: the private SSH key goes in GitLab, the public one in Pantheon.

We will set up a few more environment variables. The first one is called PANTHEON_SITE. Its value is the name of the Pantheon site on your machine.

The name on the machine is listed at the end of the Clone with Git command. You have already cloned the site locally, so this will be the name of the local repository directory.

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

Next, we will set the environment variable PANTHEON_GIT_URL. This is the Git repository URL for the Pantheon site that we have already used.

We enter only the SSH repository URL, without git clone and the site name at the end on the machine.

Phew. We've done that, now we can finish our file .gitlab-ci.yml.

Creating the deployment task

What we will initially do with GitLab CI is very similar to what we did with Git repositories before. But this time we will add the Pantheon repository as a second remote Git source and then push the code from GitLab to Pantheon.

To do this, we will set up stage deploy in task deploy:dev, since we will be deploying to the development environment on Pantheon. As a result, the file .gitlab-ci.yml will look like this:

etape:
- desploeu

antes_script:
  # Vezi 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"

desploeu:dev:
  etapa: desploeu
  mediu:
    nume: dev
    url: https://dev-$PANTHEON_SITE.pantheonsite.io/
  script:
    - git remote add pantheon $PANTHEON_GIT_URL
    - git push pantheon master --force
  doar:
    - master

Spremenljivke SSH_PRIVATE_KEY, PANTHEON_SITE in PANTHEON_GIT_URL ar trebui să fie familiare — am setat aceste variabile de mediu anterior. Cu aceste variabile putem utiliza valorile în fișier .gitlab-ci.yml de mai multe ori, iar actualizarea lor va trebui să se facă doar într-un singur loc.

În cele din urmă, să adăugăm, să comităm și să trimitem fișierul .gitlab-ci.yml la GitLab.

Verificăm desfășurarea

Dacă am făcut totul corect, sarcina deploy:dev se va finaliza cu succes în GitLab CI/CD și va trimite commit-ul .gitlab-ci.yml în Pantheon. Să vedem.

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

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

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

Trimitem ramurile cererilor de fuziune în Pantheon

Aici vom folosi funcția mea preferată Pantheon — multidev, unde putem crea medii suplimentare Pantheon pentru ramurile Git la cerere.

Accesul la multidev este restricționat, așa că această secțiune poate fi sărită. Dar dacă aveți acces, puteți îmbunătăți semnificativ performanța, configurând crearea automată de medii multidev în Pantheon din cererile de fuziune GitLab.

Mai întâi, să facem o nouă ramură Git local cu ajutorul git checkout -b multidev-support. Acum, să mai facem o modificare în .gitlab-ci.yml.

Îmi place să indic numărul cererii de fuziune în numele mediei Pantheon. De exemplu, prima cerere de fuziune — mr-1, a doua — mr-2 itd.

Cererea de fuziune se schimbă, așa că trebuie să determinăm dinamic numele ramurilor Pantheon. În GitLab este simplu — trebuie să folosim variabilele de mediu predefinite.

Putem lua $CI_MERGE_REQUEST_IID, pentru a indica numărul cererii de fuziune. Să aplicăm toate acestea împreună cu variabilele de mediu globale pe care le-am menționat anterior și să adăugăm o nouă sarcină deploy:multidev la sfârșitul fișierului .gitlab-ci.yml.

deploy:multidev:
  etapa: desploeu
  mediu:
    nume: 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
    # Adaugă repositoarele git Pantheon ca remote suplimentar
    - git remote add pantheon $PANTHEON_GIT_URL
    # Trimite ramura sursă a cererii de fuziune către Pantheon
    - git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
  doar:
    - cereri_de_fuziune

Va arăta asemănător sarcinii noastre deploy:dev, doar că ramura este trimisă în Pantheon, nu în master.

Am adăugat și am comis fișierul actualizat .gitlab-ci.yml, iar acum vom trimite noua ramură în GitLab cu git push -u origin multidev-support.

Acum să creăm o nouă cerere de fuziune din ramură multidev-support, klikom Kreirajte mješoviti zahtjev.

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

Nakon što kreiramo mješoviti zahtjev, pregledamo kako se izvršava CI/CD zadatak deploy:multidev.

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

Pogledajte— nova grana je poslana na Pantheon. Ali ako pređemo u odjeljak multidev na nadzornoj ploči web mjesta na Pantheonu, nećemo vidjeti novu sredinu

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

Pogledajmo odjeljak Git Branches.

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

Na kraju, naša grana mr-1 je stigla do Pantheona. Kreiraćemo sredinu iz grane mr-1.

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

Kreirali smo multidev sredinu, a sada se vraćamo u GitLab i provjeravamo odjeljak Operacije > Okruženja. Vidjet ćemo zapise za dev in mr-1.

To je zato što smo dodali zapis okolje с именем name in url u CI/CD zadatke. Ako dodirnemo ikonu otvorene sredine, preći ćemo na URL multidev sredine na Pantheonu.

Automatizujemo kreiranje multidev

U suštini, ovdje se možemo zaustaviti i samo se sjetiti da kreiramo multidev sredinu za svaki mješoviti zahtjev, ali ovaj proces možemo automatizovati.

Na Pantheonu postoji alat komandne linije Terminus, gdje možemo raditi s platformom automatski. U Terminusu možemo kreirati multidev sredine iz komandne linije— idealno za GitLab CI.

Treba nam novi mješoviti zahtjev da bismo to testirali. Kreirajmo novu granu pomoću git checkout -b auto-multidev-creation.

Da bismo koristili Terminus u GitLab CI/CD zadacima, potreban nam je token mašine za autentifikaciju u Terminusu i slika kontejnera s Terminus.

Kreiramo token mašine Pantheon, čuvamo ga na sigurnom mjestu i dodajemo kao globalnu varijablu okruženja u GitLab s imenom PANTHEON_MACHINE_TOKEN.

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

Kreiramo Dockerfile s Terminus

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

U GitLabu postoji registar kontejnera, gdje možemo izgraditi i postaviti Dockerfile za naš projekt. Hajde da kreiramo Dockerfile s Terminusom kako bismo radili s Pantheon.

Terminus je alat komandne linije na PHP-u, pa ćemo početi s PHP slikom. Instaliram Terminus putem Composer-a, tako da ću se osloniti na službenu Docker Composer sliku. Ustvarimo Dockerfile u katalogu lokalnog repozitorija s ovim 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"

Slijedimo upute za izgradnju i slanje slika iz odjeljka Izgradite i pošaljite slike u dokumentacije registra kontejnera, kako bismo izgradili sliku iz Dockerfile i poslali je na GitLab.

Otvaramo odjeljak Registar u GitLab projektu. Ako je sve prošlo kako treba, tamo će biti naša slika. Zapišite vezu na oznaku slike— potrebna nam je za datoteku .gitlab-ci.yml.

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

Oddelek script u zadatku deploy:multidev se začne šířit, takže ho přesuneme do samostatného souboru. Vytvoříme nový soubor 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 se nachází v soukromém adresáři a nedává webový přístup na Pantheon. Máme skript pro naši logiku multidev. Nyní aktualizujeme sekci deploy:multidev datoteke .gitlab-ci.yml, aby to vypadalo takto:

deploy:multidev:
  stage: deploy
  environment:
    name: multidev/mr-$CI_MERGE_REQUEST_IID
    url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
  script:
    # Spusťte skript pro nasazení multidev
    - "/bin/bash ./private/multidev-deploy.sh"
  only:
    - merge_requests

Musíme se ujistit, že naše úlohy běží ve vytvořeném vlastním obraze, takže přidáme definici image s URL registru do .gitlab-ci.yml. Výsledkem je tento soubor .gitlab-ci.yml:

image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest

stages:
- deploy

before_script:
  # Viz 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:
    # Spusťte skript pro nasazení multidev
    - "/bin/bash ./private/multidev-deploy.sh"
  only:
    - merge_requests

Přidáváme, potvrzujeme a posíláme private/multidev-deploy.sh in .gitlab-ci.yml. Nyní se vracíme do GitLabu a čekáme, až se úloha CI/CD dokončí. Chvíli to potrvá: multidev se může vytvářet několik minut.

Pak jdeme zkontrolovat seznam multidev na Pantheon. O zázraku! Prostředí multidev mr-2 už je tady.

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

Zaključek

Moje týmy pracovaly mnohem efektivněji, když jsme začali otevírat merge requesty a automaticky vytvářet prostředí.

S výkonnými nástroji GitLab a Pantheon můžete automaticky propojit GitLab s Pantheon.

Jelikož používáme GitLab CI/CD, náš pracovní postup se může výrazně rozvíjet. Tady je několik nápadů, jak začít:

Napište, co si myslíte o GitLab, Pantheon a automatizaci.

P.S. Věděli jste, že Terminus, nástroj příkazového řádku Pantheon, lze rozšiřovat pomocí pluginů?

Na verzi 2 našeho pluginu pro nástroje sestavení Terminus jsme v Pantheon dost pracovali s podporo GitLab. Če se nočete ukvarjati z nastavitvami za vsak projekt, preizkusite to vtičnik in nam pomagajte testirati beta različico v2. Za ekipo Terminus build:project:create potreben je le Pantheon token in GitLab token. To bo razporedilo enega od primerov projekta s Composer in avtomatskim testiranjem, ustvarilo nov projekt v GitLab, novo spletno mesto Pantheon ter ju povezalo z okolijskimi spremenljivkami in SSH ključi.

O avtorju

Andrew Taylor ustvarja orodja za razvijalce v Pantheon.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster