Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange
Vores gæst, udviklerværktøjsskaber fra Pantheon, forklarer, hvordan man automatiserer WordPress-implementeringer med GitLab CI/CD.

В Pantheon Jeg arbejder i udviklerrelationer, så jeg er altid på udkig efter nye måder at hjælpe WordPress og Drupal udviklere med at løse automatiseringsproblemer i deres arbejdsgange. For at gøre dette kan jeg godt lide at eksperimentere med nye værktøjer og kombinere dem med hinanden for at arbejde effektivt.

Jeg ser ofte udviklere kæmpe med en enkelt staging-server.

Så som så sjovt - at vente på din tur til at bruge en mellemserver eller sende klienter en URL mærket: "Se her, men kig ikke her endnu."

multidev miljøer - et af de seje Pantheon-værktøjer - løs dette problem, for med dem kan du skabe miljøer til Git-grene efter behov. Hvert multidev-miljø har sin egen URL og database, så udviklere kan arbejde, kontrollere kvalitet og få godkendelse uden at træde hinanden i hælene.

Men Pantheon har ikke værktøjer til versionskontrol eller kontinuerlig integration og udrulning (CI/CD). Men det er en fleksibel platform, som du kan integrere alle værktøjer med.

Jeg har også bemærket, at teams bruger nogle værktøjer til udvikling og andre til opbygning og implementering.

For eksempel har de forskellige værktøjer til versionskontrol og CI/CD. Du skal rode rundt og skifte mellem værktøjer for at redigere kode og diagnosticere problemer.

On GitLab der er et komplet sæt udviklingsværktøjer: til versionskontrol, billetter, fletteanmodninger, en klassens bedste CI/CD-pipeline, et containerregister og alt den slags. Jeg er endnu ikke stødt på en applikation, der tilbyder så meget til at styre dit udviklingsworkflow.

Jeg elsker automatisering, så jeg lærte, hvordan man forbinder Pantheon til GitLab, så commits til mastergrenen på GitLab implementeres til masterudviklingsmiljøet i Pantheon. GitLab-fletningsanmodninger kan også oprette og implementere kode til multidev-miljøer i Pantheon.

I denne tutorial vil jeg guide dig igennem, hvordan du opsætter en forbindelse mellem GitLab og Pantheon og optimerer din WordPress og Drupal arbejdsgang.

Selvfølgelig er det muligt, spejl GitLab repository, men vi vil gøre alt med kuglepenne at dykke ned i GitLab CI og i fremtiden bruge dette værktøj ikke kun til implementering.

Indledning

Til dette indlæg skal du forstå, at Pantheon opdeler hvert websted i tre elementer: kode, database og filer.

Koden inkluderer CMS-filer såsom kerne, plugins og WordPress-temaer. Disse filer administreres af Git repositories, hostet af Pantheon, hvilket betyder, at vi kan implementere kode fra GitLab til Pantheon med Git.
Filer i Pantheon kaldes mediefiler, det vil sige billeder til webstedet. De uploades normalt af brugere, og Git ignorerer dem.

Opret en gratis konto, Lær mere om Pantheon arbejdsgang eller tilmeld dig en demo på pantheon.io.

Forudsætninger

Mit Pantheon og GitLab projekt hedder pantheon-gitlab-blog-demo. Projektnavnet skal være unikt. Her vil vi arbejde med en WordPress-side. Du kan tage Drupal, men du bliver nødt til at ændre noget.

jeg vil bruge Git kommandolinjeog du kan arbejde i GUI, hvis du vil.

Opret et projekt

Til at starte med skaber vi GitLab projekt (det vender vi tilbage til senere).

Nu oprettelse af et WordPress-websted på Pantheon. Installer derefter WordPress til dashboardet på webstedet.

Hvis dine hænder klør efter at ændre noget, for eksempel fjerne og tilføje plugins, så vær tålmodig. Siden er endnu ikke forbundet til GitLab, og vi ønsker, at alle kodeændringer skal gå gennem GitLab.

Når WordPress er installeret, skal du gå tilbage til Pantheon-dashboardet og ændre udviklingstilstanden til Git.

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Indledende commit på GitLab

Nu skal du overføre den indledende WordPress-kode fra Pantheon-webstedet til GitLab. For at gøre dette, kloner vi koden fra Git-depotet på Pantheon-stedet lokalt og sender den derefter til GitLab-lageret.

For at gøre det nemmere og mere sikkert, tilføje en SSH-nøgle til Pantheon og vi vil ikke indtaste adgangskoden hver gang vi kloner Pantheon Git-depotet. På samme tid allerede tilføj SSH-nøgle til GitLab.

For at gøre dette kloner vi Pantheon-webstedet lokalt ved at kopiere kommandoen fra feltet Clone with Git på webstedets dashboard.

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange
Hvis du har brug for hjælp, så læs dokumentationen komme i gang med Git for Pantheon.

Lad os nu ændre git remote originat pege på GitLab i stedet for Pantheon. Det kan lade sig gøre командой git remote.

Lad os gå til GitLab-projektet og kopiere depot-URL'en fra rullemenuen Klon på siden med projektdetaljer. Lad os vælge indstillingen Klon med SSH, fordi vi allerede har konfigureret SSH-nøglen.

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Som standard git remote for en lokal kopi af kodelageret − origin. Dette kan ændres fra git remote set-url origin [URL репозитория GitLab], hvor vi i stedet for parentes indtaster den faktiske URL.

Til sidst starter vi git push origin master --forceat skubbe WordPress-koden fra Pantheon-webstedet til GitLab.

Valgmuligheden –force er kun nødvendig én gang. Så i hold git push GitLab vil ikke have det.

Konfigurer legitimationsoplysninger og variabler

Kan du huske, hvordan vi tilføjede en SSH-nøgle lokalt for at logge på Pantheon og GitLab? SSH-tokenet kan bruges til at godkende GitLab og Pantheon.

GitLab har fremragende dokumentation. Lad os se Se afsnittet om SSH-nøgler ved brug af Docker executor i dokumentet om brug af SSH-nøgler med GitLab CI/CD.

Vi vil nu fuldføre de to første trin: opret et nyt SSH nøglepar lokalt med ssh-keygen og tilføj den private nøgle som en variabel til projektet.

Så sætter vi SSH_PRIVATE_KEY som GitLab CI/CD miljøvariabel i projektindstillingerne.
I tredje og fjerde trin opretter vi en fil .gitlab-ci.yml med indhold som dette:

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"

Indtil vi begår filen .gitlab-ci.yml, så skal du tilføje noget andet til det.

Gør nu det femte trin og tilføj den offentlige nøgle, du oprettede i det første trin, til de tjenester, du skal have adgang til i byggemiljøet.

I vores tilfælde ønsker vi at få adgang til Pantheon fra GitLab. Følg instruktionerne i Pantheon-dokumentet på tilføjelse af en SSH-nøgle til Pantheon og gør dette trin.

Husk: lukket SSH er i GitLab, åben er i Pantheon.

Lad os opsætte et par flere miljøvariabler. Den første hedder PANTHEON_SITE. Dens værdi er navnet på Pantheon-stedet på din maskine.

Navnet på maskinen er angivet i slutningen af ​​kommandoen Clone with Git. Du har allerede klonet webstedet lokalt, så dette vil være biblioteksnavnet på det lokale lager.

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Indstil derefter miljøvariablen PANTHEON_GIT_URL. Dette er URL'en til Git-lageret til Pantheon-webstedet, som vi allerede har brugt.

Vi indtaster kun URL'en til SSH-lageret, uden git clone og navnet på stedet på maskinen til sidst.

Pyha. Det er gjort, nu kan vi afslutte vores fil .gitlab-ci.yml.

Opret en implementeringsopgave

Det, vi vil gøre med GitLab CI i starten, ligner meget, hvad vi tidligere har gjort med Git-lagre. Men denne gang, lad os tilføje Pantheon-depotet som en anden Git-fjernkilde, og derefter skubbe koden fra GitLab til Pantheon.

For at gøre dette skal du indstille stadium deploy и opgave deploy:dev, fordi vi vil implementere til udviklingsmiljøet på Pantheon. Den resulterende fil .gitlab-ci.yml Det vil se sådan ud:

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

Variabler SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL burde se bekendt ud - vi satte disse miljøvariabler op tidligere. Med disse variabler vil vi være i stand til at bruge værdierne i filen .gitlab-ci.yml mange gange, og du behøver kun at opdatere dem ét sted.

Til sidst tilføjer, commit og send filen .gitlab-ci.yml på Gitlab.

Kontrollerer implementeringen

Hvis vi gjorde alt rigtigt, opgaven deploy:dev vil køre med succes i GitLab CI/CD og skubbe commit .gitlab-ci.yml ved Pantheon. Lad os tage et kig.

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Sender tråde til fletteanmodninger til Pantheon

Her vil vi bruge min yndlings Pantheon-funktion − multidev, hvor du kan oprette yderligere Pantheon-miljøer til Git-grene efter behov.

Adgang til multidev er begrænset, så dette afsnit kan springes over. Men hvis du har adgang, kan du for alvor øge produktiviteten ved at opsætte automatisk oprettelse af multidev-miljøer på Pantheon fra GitLab-fletningsanmodninger.

Lad os først lave en ny Git-gren lokalt med git checkout -b multidev-support. Lad os nu ændre noget .gitlab-ci.yml.

Jeg kan godt lide at inkludere fletteanmodningsnummeret i Pantheon-miljønavnet. For eksempel er den første fletningsanmodning mr-1, anden - mr-2 etc.

Sammenfletningsanmodningen ændrer sig, så vi er nødt til dynamisk at bestemme navnene på Pantheon-grenene. På GitLab er det nemt – du skal bruge foruddefinerede miljøvariabler.

Vi kan tage $CI_MERGE_REQUEST_IIDfor at angive nummeret på fletteanmodningen. Lad os anvende alt dette sammen med de globale miljøvariabler, vi specificerede tidligere og tilføje en ny deploy:multidev-opgave i slutningen af ​​filen .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

Det vil ligne vores opgave deploy:dev, kun grenen går til Pantheon, ikke til master.

Vi har tilføjet og forpligtet den opdaterede fil .gitlab-ci.yml, og skub nu en ny gren til GitLab med git push -u origin multidev-support.

Lad os nu oprette en ny fletteanmodning fra grenen multidev-supportved at klikke Opret fletteanmodning.

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Efter at have oprettet en fletteanmodning ser vi på, hvordan CI/CD-opgaven udføres deploy:multidev.

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Se, en ny tråd er blevet sendt til Pantheon. Men hvis vi går til multidev-sektionen på Pantheon-webstedets dashboard, vil vi ikke se det nye miljø der

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Lad os tage et kig på Git Branches-sektionen.

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Som et resultat, vores tråd mr-1 nåede til Pantheon. Skab et miljø fra en filial mr-1.

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Vi har skabt et multidev-miljø, lad os nu gå tilbage til GitLab og tage et kig på sektionen Drift > Miljøer. Vi vil se indlæg for dev и mr-1.

Dette skyldes, at vi har tilføjet en post environment Med navn name и url til CI/CD opgaver. Hvis vi klikker på det åbne miljø-ikon, vil vi blive ført til URL'en til multidev-miljøet på Pantheon.

Automatiser oprettelsen af ​​multidev

I princippet kan du stoppe her og bare huske at oprette et multidev-miljø for hver fletteanmodning, men denne proces kan automatiseres.

Pantheon har et kommandolinjeværktøj Terminus, hvor du kan arbejde med platformen automatisk. Terminus giver dig mulighed for at oprette multidev-miljøer fra kommandolinjen - ideel til GitLab CI.

Vi har brug for en ny fusionsanmodning for at teste dette. Opret en ny filial med git checkout -b auto-multidev-creation.

For at bruge Terminus i GitLab CI/CD-opgaver skal du bruge et maskintoken til at godkende med Terminus og et Terminus-containerbillede.

Oprettelse af et Pantheon Machine Token, gem den et sikkert sted og tilføj den som en global miljøvariabel i GitLab med navnet PANTHEON_MACHINE_TOKEN.

Hvis du har glemt, hvordan du tilføjer GitLab-miljøvariabler, skal du gå tilbage til, hvor vi definerede PANTHEON_SITE.

Opret en Dockerfil med Terminus

Hvis du ikke bruger Docker eller ikke kan lide filer Dockerfile, tag mit billede registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest og spring dette afsnit over.

GitLab har et containerregister, hvor vi kan bygge og hoste en Dockerfile til vores projekt. Lad os oprette en Dockerfile med Terminus for at arbejde med Pantheon.

Terminus er et PHP-kommandolinjeværktøj, så lad os starte med PHP-billedet. Jeg installerer Terminus via Composer, så jeg bruger officielle Docker Composer-billede. Vi skaber Dockerfile i den lokale arkivmappe med følgende indhold:

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

Følg instruktionerne for at bygge og sende billeder fra afsnittet Byg og skub billeder в dokumentation for containerregistretat samle et billede fra Dockerfile og indsend det til GitLab.

Åbning af sektionen register i GitLab-projektet. Hvis alt gik efter planen, vil vores image være der. Skriv et link til billedtagget - vi skal bruge det til filen .gitlab-ci.yml.

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Sektion script i opgaven deploy:multidev begynder at vokse, så lad os flytte den til en separat fil. Opret en ny fil 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

Scriptet er i en privat mappe og tillader ikke webadgang til Pantheon. Vi har et script til vores multidev-logik. Lad os nu opdatere afsnittet deploy:multidev fil .gitlab-ci.ymlfor at få det til at se sådan ud:

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

Vi skal sikre os, at vores opgaver udføres i det oprettede brugerdefinerede billede, så lad os tilføje en definition image med registreringsdatabasens URL i .gitlab-ci.yml. Som et resultat har vi sådan en fil .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

Tilføj, begå og send private/multidev-deploy.sh и .gitlab-ci.yml. Nu vender vi tilbage til GitLab og venter på, at CI/CD-opgaven er fuldført. Vær tålmodig: multidev kan tage flere minutter at oprette.

Så går vi for at se på multidev-listen på Pantheon. O mirakel! multidev miljø mr-2 allerede her.

Sådan forbinder du GitLab og Pantheon og optimerer Drupal- og WordPress-arbejdsgange

Konklusion

Mit team havde det meget sjovere, da vi begyndte at åbne fusionsanmodninger og oprette miljøer automatisk.

Med de kraftfulde værktøjer fra GitLab og Pantheon kan du automatisk forbinde GitLab til Pantheon.

Da vi bruger GitLab CI/CD, vil vores arbejdsgang have plads til at vokse. Her er et par ideer til at komme i gang:

Fortæl mig, hvad du synes om GitLab, Pantheon og automatisering.

PS Vidste du, at Terminus, Pantheons kommandolinjeværktøj, kan udvides via plugins?

Vi hos Pantheon har gjort et godt stykke arbejde med version 2 af vores plugin til Terminus byggeværktøjer med GitLab-understøttelse. Hvis du ikke vil bekymre dig om indstillinger for hvert projekt, så prøv dette plugin og hjælp os med at teste v2 beta. For Terminus-teamet build:project:create Du behøver kun et Pantheon-token og et GitLab-token. Hun vil implementere et af eksempelprojekterne med Composer og automatiseret test, oprette et nyt projekt i GitLab, et nyt Pantheon-sted, og forbinde dem ved hjælp af miljøvariabler og SSH-nøgler.

Om forfatteren

Andrew Taylor skaber værktøjer til udviklere i Pantheon.

Kilde: www.habr.com

Tilføj en kommentar