Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows
Kreyatè zouti devlopè envite nou an nan Pantheon pale sou fason pou otomatize deplwaman WordPress lè l sèvi avèk GitLab CI/CD.

В panteon Mwen travay nan relasyon devlopè, kidonk mwen toujou ap chèche nouvo fason pou ede devlopè WordPress ak Drupal rezoud pwoblèm automatisation nan workflows yo. Pou fè sa, mwen renmen fè eksperyans ak nouvo zouti epi konbine yo youn ak lòt pou travay efektivman.

Mwen souvan wè devlopè yo ap goumen ak yon sèl sèvè sèvè.

Se yon plezi konsa pou ret tann vire ou pou sèvi ak yon sèvè entèmedyè oswa voye kliyan yon URL ak nòt la: "Gade isit la, men pa gade isit la ankò."

Anviwònman Multidev - youn nan zouti yo fre Pantheon - rezoud pwoblèm sa a, paske ak yo ou ka kreye anviwònman pou branch Git sou demann. Chak anviwònman miltidev gen URL pwòp li yo ak baz done, kidonk devlopè yo ka travay trankil, tcheke bon jan kalite, epi jwenn apwobasyon san yo pa mache sou zòtèy lòt.

Men, Pantheon pa gen zouti pou kontwòl vèsyon oswa entegrasyon kontinyèl ak deplwaman (CI/CD). Men, li se yon platfòm fleksib ak ki ou ka entegre nenpòt zouti.

Mwen remake tou ke ekip yo sèvi ak sèten zouti pou devlopman, ak youn diferan pou asanble ak deplwaman.

Pou egzanp, yo gen zouti diferan pou kontwòl vèsyon ak CI/CD. Ou dwe jwe ak chanje ant zouti pou modifye kòd ak dyagnostike pwoblèm.

Sou GitLab gen yon seri zouti devlopman konplè: pou kontwòl vèsyon, tikè, demann fizyon, yon tiyo CI/CD pi bon nan klas, yon rejis veso, ak tout bagay konsa. Mwen poko rive jwenn yon aplikasyon ki ofri anpil pou jere workflow devlopman ou.

Mwen renmen automatisation, se konsa mwen te aprann ki jan yo konekte Pantheon ak GitLab pou ke komèt nan branch prensipal la sou GitLab yo deplwaye nan anviwònman prensipal devlopman nan Pantheon. Epi fizyon demann sou GitLab ka kreye ak deplwaye kòd nan anviwònman miltidev nan Pantheon.

Nan leson patikilye sa a, mwen pral fè ou konnen ki jan yo mete yon koneksyon ant GitLab ak Pantheon epi optimize WordPress ak Drupal workflow.

Natirèlman li posib, glas GitLab depo, men nou pral fè tout bagay ak men nou pou fouye nan GitLab CI ak nan lavni an sèvi ak zouti sa a pa sèlman pou deplwaman.

Entwodiksyon

Pou pòs sa a, ou bezwen konprann ke Pantheon kraze chak sit nan twa eleman: kòd, baz done, ak dosye.

Kòd la gen ladan dosye CMS tankou nwayo WordPress, grefon, ak tèm. Fichye sa yo jere nan Git depo yo, akomode pa Pantheon, sa vle di nou ka deplwaye kòd soti nan GitLab nan Pantheon ak Git.
Fichye nan Pantheon yo se fichye medya, se sa ki, imaj pou sit la. Tipikman yo Uploaded pa itilizatè yo ak Git inyore yo.

Kreye yon kont gratis, jwenn plis enfòmasyon sou Workflow Pantheon oswa enskri pou yon Demo nan pantheon.io.

Sipozisyon

Pwojè mwen an sou Pantheon ak GitLab rele pantheon-gitlab-blog-demo. Non pwojè a dwe inik. Isit la nou pral travay ak yon sit WordPress. Ou ka pran Drupal, men w ap bezwen chanje kèk bagay.

mwen pral itilize Liy lòd Gitepi ou ka travay nan koòdone grafik, Si ou vle.

Kreye yon pwojè

Premyèman, ann kreye Pwojè GitLab (nou pral tounen sou sa pita).

Koulye a, kreye yon sit entènèt WordPress sou Pantheon. Lè sa a, nou enstale WordPress pou tablodbò sit la.

Si men ou ap grate pou chanje yon bagay, pou egzanp, retire oswa ajoute grefon, pran pasyans. Sit la poko konekte ak GitLab, e nou vle tout chanjman kòd yo ale nan GitLab.

Yon fwa nou enstale WordPress, tounen nan tablodbò sit entènèt Pantheon la epi chanje mòd devlopman nan Git.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Premye angajman sou GitLab

Koulye a, ou bezwen transfere premye kòd WordPress soti nan sit la Pantheon nan GitLab. Pou fè sa, nou klonaj kòd ki soti nan depo Git nan sit la Pantheon lokalman, epi answit voye li nan depo GitLab la.

Pou rann li pi fasil ak pi an sekirite, ajoute yon kle SSH nan Pantheon epi nou p ap oblije antre yon modpas chak fwa nou klonaj yon depo Pantheon Git. An menm tan an deja ajoute yon kle SSH nan GitLab.

Pou fè sa, klonaj sit Panteon an lokalman lè w kopye lòd ki soti nan jaden Klonaj ak Git sou tablodbò sit la.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows
Si w bezwen èd, li dokiman an kòmanse ak Git pou Pantheon.

Koulye a, ann chanje git remote originpou lonje dwèt sou GitLab olye de Pantheon. Li ka fè командой git remote.

Ann ale nan pwojè GitLab la epi kopye URL depo a soti nan dropdown Klonaj nan paj detay pwojè a. Ann chwazi Klonaj la ak opsyon SSH, paske nou te deja konfigirasyon kle SSH la.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Pa default git remote pou yon kopi lokal depo kòd la - origin. Sa a ka chanje c git remote set-url origin [URL репозитория GitLab], kote olye pou yo parantèz nou antre URL aktyèl la.

Finalman, nou lanse git push origin master --forcepouse kòd WordPress soti nan Pantheon nan GitLab.

Opsyon –force sèlman nesesè yon fwa. Lè sa a, nan ekip git push li pa pral sou GitLab.

Mete kanpe kalifikasyon ak varyab

Sonje kijan nou te ajoute yon kle SSH lokalman pou nou konekte nan Pantheon ak GitLab? Ou ka itilize siy SSH pou otorize GitLab ak Pantheon.

GitLab gen dokiman ekselan. Ann wè seksyon sou kle SSH lè w ap itilize ekzekitè Docker la nan dokiman an sou lè l sèvi avèk kle SSH ak GitLab CI/CD.

Kounye a nou pral konplete de premye etap yo: Ann kreye yon nouvo pè kle SSH lokalman ak ssh-keygen epi ajoute kle prive a kòm yon varyab nan pwojè a..

Lè sa a, nou pral mande SSH_PRIVATE_KEY kòm GitLab CI/CD varyab anviwònman an nan anviwònman pwojè yo.
Nan twazyèm ak katriyèm etap yo nou pral kreye yon dosye .gitlab-ci.yml ak kontni tankou sa a:

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"

Ann pa komèt fichye a ankò .gitlab-ci.yml, Lè sa a, w ap bezwen ajoute yon lòt bagay nan li.

Koulye a, nou fè senkyèm etap la ak ajoute kle piblik ou te kreye nan premye etap la nan sèvis ou bezwen jwenn aksè nan anviwònman konstriksyon an.

Nan ka nou an, nou vle jwenn aksè nan Pantheon soti nan GitLab. Nou swiv enstriksyon yo nan dokiman Pantheon sou ajoute yon kle SSH nan Pantheon epi fè etap sa a.

Sonje byen: SSH prive se nan GitLab, SSH louvri se nan Pantheon.

Ann mete kanpe yon kèk plis varyab anviwònman. Premye a rele PANTHEON_SITE. Valè li se non sit Pantheon sou machin ou an.

Se non an sou machin nan ki nan lis nan fen Klonaj la ak lòd Git. Ou te deja klonaj sit la lokalman, kidonk sa a pral non an nan anyè depo lokal la.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Apre sa, ann mete sou pye varyab anviwònman an PANTHEON_GIT_URL. Sa a se URL depo Git pou sit Pantheon ke nou te deja itilize.

Antre sèlman URL repozitwa SSH la, san yo pa git clone ak non sit la sou machin nan nan fen an.

Ouf. Sa a fini, kounye a nou ka fini dosye nou an .gitlab-ci.yml.

Kreye yon travay deplwaman

Sa nou pral fè okòmansman ak GitLab CI sanble anpil ak sa nou te fè ak depo Git nan tan lontan an. Men, fwa sa a, ann ajoute depo Pantheon la kòm yon dezyèm sous Git aleka, epi ann pouse kòd la soti nan GitLab nan Pantheon.

Pou fè sa, se pou yo konfigirasyon etap deploy и travay deploy:dev, paske nou pral deplwaye nan anviwònman an devlopman sou Pantheon. Fichye a ki kapab lakòz .gitlab-ci.yml pral sanble sa a:

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

Varyab SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL ta dwe gade abitye - nou mete kanpe varyab anviwònman sa yo pi bonè. Avèk varyab sa yo nou pral kapab sèvi ak valè yo nan dosye a .gitlab-ci.yml anpil fwa, epi yo pral sèlman bezwen mete ajou nan yon sèl kote.

Finalman, ajoute, komèt epi voye fichye a .gitlab-ci.yml sou GitLab.

Tcheke deplwaman an

Si nou te fè tout bagay kòrèkteman, travay la deploy:dev pral kouri avèk siksè nan GitLab CI/CD epi soumèt yon komèt .gitlab-ci.yml nan Pantheon. Ann fè yon gade.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Voye fil demann rantre nan Pantheon

Isit la nou pral sèvi ak karakteristik Pantheon pi renmen mwen an - miltidev, kote ou ka kreye plis anviwònman Pantheon pou branch Git sou demann.

Aksè nan multidev limite, kidonk seksyon sa a ka sote. Men, si ou gen aksè, ou ka seryezman ogmante pwodiktivite pa mete kanpe kreyasyon otomatik anviwònman miltidev sou Pantheon soti nan demann fizyon GitLab.

Premyèman, ann fè yon nouvo branch Git lokalman lè l sèvi avèk git checkout -b multidev-support. Koulye a, ann chanje yon bagay ankò nan .gitlab-ci.yml.

Mwen renmen mete nimewo demann fizyon an nan non anviwònman Pantheon. Pou egzanp, premye demann fizyon an se mr-1, dezyèm - mr-2 elatriye.

Demann fizyon an chanje, kidonk nou bezwen dinamik detèmine non branch Pantheon yo. Li fasil sou GitLab - ou jis bezwen itilize varyab anviwònman predefini.

Nou ka pran $CI_MERGE_REQUEST_IIDpou presize nimewo demann fizyon an. Ann aplike tout bagay sa yo ansanm ak varyab anviwònman mondyal nou te espesifye pi bonè epi ajoute yon nouvo travay deploy:multidev nan fen fichye a. .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

Li pral sanble ak travay nou an deploy:dev, se sèlman branch lan voye nan Pantheon, pa nan master.

Nou te ajoute ak komèt dosye a mete ajou .gitlab-ci.yml, epi kounye a ann pouse yon nouvo branch nan GitLab ak git push -u origin multidev-support.

Koulye a, kite a kreye yon nouvo demann fizyon soti nan branch lan multidev-supportpa klike Kreye demann fizyone.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Lè nou te kreye yon demann fizyon, nou gade ki jan travay CI/CD egzekite deploy:multidev.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Gade, yon nouvo fil yo te voye nan Pantheon. Men, si nou ale nan seksyon multidev sou tablodbò sit Pantheon, nou p ap wè nouvo anviwònman an la.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Ann gade nan seksyon Git Branches.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Kòm yon rezilta, fil nou an mr-1 te rive nan Pantheon. Ann kreye yon anviwònman ki soti nan yon branch mr-1.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Nou te kreye yon anviwònman miltidev, kounye a ann tounen nan GitLab epi gade nan seksyon an Operasyon > Anviwònman. Nou pral wè antre pou dev и mr-1.

Sa a se paske nou te ajoute yon antre environment Avèk non name и url nan travay CI/CD. Si nou klike sou ikòn anviwònman ouvè a, yo pral mennen nou nan adrès URL anviwònman an multidev sou Pantheon.

Otomatik kreyasyon multidev

Nan prensip, ou ka sispann isit la epi jis sonje yo kreye yon anviwònman miltidev pou chak demann fizyone, men pwosesis sa a ka otomatize.

Pantheon gen yon zouti liy kòmand Tèminal, kote ou ka travay ak platfòm la otomatikman. Terminus pèmèt ou kreye anviwònman miltidev soti nan liy lan lòd - ideyal pou GitLab CI.

Nou bezwen yon nouvo demann fizyon pou teste sa. Ann kreye yon nouvo branch lè l sèvi avèk git checkout -b auto-multidev-creation.

Pou itilize Terminus nan travay GitLab CI/CD, ou bezwen yon siy machin pou otantifikasyon ak Terminus ak yon imaj veso ak Terminus.

Kreye yon siy machin Pantheon, sove li nan yon kote ki an sekirite epi ajoute li kòm yon varyab anviwònman mondyal nan GitLab ak non an PANTHEON_MACHINE_TOKEN.

Si ou bliye ki jan yo ajoute varyab anviwònman GitLab, tounen nan kote nou defini PANTHEON_SITE.

Kreye yon Dockerfile ak Terminus

Si ou pa itilize Docker oswa ou pa renmen fichye yo Dockerfile, pran imaj mwen registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest epi sote seksyon sa a.

GitLab gen yon rejis veso, kote nou ka bati epi mete Dockerfile pou pwojè nou an. Ann kreye yon Dockerfile ak Terminus pou travay ak Pantheon.

Terminus se yon zouti liy kòmand PHP, kidonk ann kòmanse ak imaj PHP a. Mwen enstale Terminus atravè Composer, kidonk mwen pral itilize ofisyèl Docker Composer imaj. Nou kreye Dockerfile nan anyè repozitwa lokal la ak kontni sa a:

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

Swiv enstriksyon yo pou rasanble ak voye imaj ki soti nan seksyon an Bati ak pouse imaj в dokiman rejis kontenèpou kolekte yon imaj de Dockerfile epi pouse li nan GitLab.

Louvri seksyon an Rejis nan pwojè GitLab la. Si tout bagay te ale selon plan an, imaj nou an ap la. Ekri yon lyen nan tag imaj la - nou bezwen li pou dosye a .gitlab-ci.yml.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Seksyon script nan pwoblèm nan deploy:multidev ap kòmanse grandi, kidonk ann deplase li nan yon dosye separe. Kreye yon nouvo fichye 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

Script la se nan yon anyè prive ak pa pèmèt aksè entènèt nan Pantheon. Nou gen yon script pou lojik multidev nou an. Ann mete ajou seksyon an kounye a deploy:multidev dosye .gitlab-ci.ymlkonsa ke li vire tankou sa a:

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

Nou bezwen asire w ke travay nou yo fèt nan imaj la koutim kreye, kidonk kite a ajoute yon definisyon image soti nan rejis URL nan .gitlab-ci.yml. Kòm yon rezilta, nou te fini ak yon dosye tankou sa a .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

Ajoute, komèt epi voye private/multidev-deploy.sh и .gitlab-ci.yml. Koulye a, nou retounen nan GitLab epi tann pou travay la CI/CD fini. Pran pasyans: multidev ka pran plizyè minit pou kreye.

Lè sa a, nou ale gade nan lis la multidev sou Pantheon. O mirak! Anviwònman Multidev mr-2 deja isit la.

Ki jan yo konekte GitLab ak Pantheon ak Optimize Drupal ak WordPress Workflows

Konklizyon

Ekip mwen an te gen plis plezi lè nou te kòmanse louvri demann fizyone ak kreye anviwònman otomatikman.

Avèk zouti pwisan GitLab ak Pantheon, ou ka konekte GitLab ak Pantheon otomatikman.

Depi nou itilize GitLab CI/CD, workflow nou an ap gen plas pou grandi. Men kèk ide pou w kòmanse:

Kite m 'konnen sa ou panse sou GitLab, Pantheon ak automatisation.

PS Èske w te konnen Terminus, zouti liy kòmand Pantheon la, ka pwolonje atravè grefon?

Nou menm nan Pantheon te fè yon bon travay sou vèsyon 2 nou an Plugin pou zouti bati Terminus ak sipò GitLab. Si ou pa vle deranje ak paramèt pou chak pwojè, eseye plugin sa a epi ede nou teste v2 beta a. Pou ekip Terminus la build:project:create Ou bezwen sèlman yon siy Pantheon ak yon siy GitLab. Li pral deplwaye youn nan echantiyon pwojè yo ak Composer ak tès otomatik, kreye yon nouvo pwojè nan GitLab, yon nouvo sit Pantheon, epi konekte yo lè l sèvi avèk varyab anviwònman ak kle SSH.

Sou otè a

Andrew Taylor kreye zouti pou devlopè nan panteon.

Sous: www.habr.com

Add nouvo kòmantè