
Il-mistieden tagħna, il-kreatur tal-għodda tal-iżviluppatur Pantheon, jitkellem dwar kif jiġu awtomatizzati l-iskjeramenti. WordPress bl-użu ta' GitLab CI/CD.
В Naħdem fir-relazzjonijiet mal-iżviluppaturi, għalhekk dejjem infittex modi ġodda biex ngħin lill-iżviluppaturi. WordPress и Drupal Issolvi problemi ta' awtomazzjoni fil-flussi tax-xogħol. Biex nagħmel dan, inħobb nesperimenta b'għodod ġodda u ngħaqqadhom biex nikseb effiċjenza akbar.
Spiss nara żviluppaturi jissieltu ma 'server ta' staging wieħed.
Huwa ta’ pjaċir kbir li tistenna min-naħa tiegħek biex tuża server intermedju jew tibgħat lill-klijenti URL bin-nota: "Ħares hawn, imma s'issa tħaresx hawn."
- waħda mill-għodod jibred Pantheon - issolvi din il-problema, għaliex magħhom tista 'toħloq ambjenti għall-fergħat Git fuq talba. Kull ambjent multidev għandu l-URL u d-database tiegħu stess, sabiex l-iżviluppaturi jkunu jistgħu jaħdmu bil-kwiet, jiċċekkjaw il-kwalità, u jiksbu l-approvazzjoni mingħajr ma jirfsu fuq sieq xulxin.
Iżda Pantheon m'għandux għodda għall-kontroll tal-verżjoni jew integrazzjoni u skjerament kontinwu (CI/CD). Iżda hija pjattaforma flessibbli li biha tista 'tintegra kwalunkwe għodda.
Innotajt ukoll li t-timijiet jużaw ċerti għodod għall-iżvilupp, u oħrajn differenti għall-assemblaġġ u l-iskjerament.
Pereżempju, għandhom għodod differenti għall-kontroll tal-verżjoni u CI/CD. Int trid tiddejjaq u taqleb bejn l-għodod biex teditja l-kodiċi u tiddijanjostika l-problemi.
Fuq hemm sett sħiħ ta 'għodod ta' żvilupp: għall-kontroll tal-verżjoni, biljetti, talbiet ta 'għaqda, pipeline CI/CD tal-aħjar fil-klassi, reġistru tal-kontejners, u kollox bħal dak. Għadni ma ltqajtx ma' applikazzjoni li toffri tant biex timmaniġġja l-fluss tax-xogħol tal-iżvilupp tiegħek.
Inħobb l-awtomazzjoni, għalhekk tgħallimt kif tgħaqqad Pantheon ma 'GitLab sabiex l-impenji għall-fergħa prinċipali fuq GitLab jiġu skjerati fl-ambjent ta' żvilupp ewlieni f'Pantheon. U t-talbiet għall-għaqda fuq GitLab jistgħu joħolqu u jużaw kodiċi għal ambjenti multidev f'Pantheon.
F'din il-gwida, ser nurik kif twaqqaf konnessjoni bejn GitLab u Pantheon u tottimizza l-fluss tax-xogħol tiegħek. WordPress и Drupal.
Naturalment huwa possibbli, , iżda aħna se nagħmlu kollox b'idejna biex wieħed jidħol fih u fil-futur tuża din l-għodda mhux biss għall-iskjerament.
Introduzzjoni
Għal din il-kariga, trid tifhem li Pantheon ikisser kull sit fi tliet elementi: kodiċi, database, u fajls.
Il-kodiċi jinkludi fajls tas-CMS bħall-qalba, plugins, u temi. WordPressDawn il-fajls huma ġestiti fi , ospitat minn Pantheon, li jfisser li nistgħu niskjeraw kodiċi minn GitLab għal Pantheon ma 'Git.
Fajls fil-Pantheon huma fajls tal-midja, jiġifieri, immaġini għas-sit. Tipikament dawn jittellgħu mill-utenti u Git jinjorahom.
, Sir af aktar dwar jew fuq pantheon.io.
Suppożizzjonijiet
Il-proġett tiegħi fuq Pantheon u GitLab jissejjaħ pantheon-gitlab-blog-demoL-isem tal-proġett irid ikun uniku. Se nkunu qed naħdmu b'websajt hawnhekk. WordPressTista' teħodha wkoll Drupal, iżda xi affarijiet se jkollhom jinbidlu.
Jien se nuża u tista' taħdem fiha , jekk trid.
Oħloq proġett
L-ewwel, ejja noħolqu (nerġgħu lura għal dan aktar tard).
Issa Imbagħad ninstallawh. WordPress għad-dashboard tal-websajt.
Jekk idejk qed ħakk biex tbiddel xi ħaġa, pereżempju, neħħi jew iżżid plugins, kun paċenzja. Is-sit għadu mhux konness ma' GitLab, u rridu li l-bidliet kollha fil-kodiċi jgħaddu minn GitLab.
Meta se ninstallawh? WordPress, erġa' lura għad-dashboard tal-websajt Pantheon u ibdel il-modalità tal-iżvilupp għal Git.
Impenn inizjali fuq GitLab
Issa trid tittrasferixxi l-kodiċi inizjali WordPress Mill-websajt ta' Pantheon għal GitLab. Biex nagħmlu dan, nikklonaw il-kodiċi mir-repożitorju Git tal-websajt ta' Pantheon lokalment u mbagħad nimbuttawh għar-repożitorju GitLab.
Biex tagħmilha aktar faċli u sigura, u mhux se jkollna ndaħħlu password kull darba li nikklonu repożitorju Pantheon Git. Fl-istess ħin diġà .
Biex tagħmel dan, kklona s-sit Pantheon lokalment billi tikkopja l-kmand mill-qasam Klonu b'Git fuq id-dashboard tas-sit.
Jekk għandek bżonn għajnuna, aqra d-dokumentazzjoni .
Issa ejja nbiddlu git remote originbiex tipponta lejn GitLab minflok Pantheon. Jista 'jsir .
Ejja mmorru għall-proġett GitLab u kkopja l-URL tar-repożitorju mill-dropdown Klonu fuq il-paġna tad-dettalji tal-proġett. Ejja nagħżlu l-għażla Clone with SSH, għax diġà kkonfigurajna ċ-ċavetta SSH.
Permezz ta 'default git remote għal kopja lokali tar-repożitorju tal-kodiċi - origin. Dan jista' jinbidel c git remote set-url origin [URL репозитория GitLab], fejn minflok il-parentesi nidħlu l-URL attwali.
Fl-aħħarnett, inniedu git push origin master --forcebiex tibgħat il-kodiċi WordPress mis-sit tal-Pantheon fuq GitLab.
L-għażla –force hija meħtieġa darba biss. Imbagħad fi timijiet
git pushmhux se jkun fuq GitLab.
Twaqqif ta 'kredenzjali u varjabbli
Ftakar kif żidna ċavetta SSH lokalment biex tidħol f'Pantheon u GitLab? It-token SSH jista 'jintuża biex jawtorizza GitLab u Pantheon.
GitLab għandu dokumentazzjoni eċċellenti. Ejja naraw .
Issa se nlestu l-ewwel żewġ passi: Ejja noħolqu par ta 'ċavetta SSH ġdid lokalment ma' ssh-keygen u żid iċ-ċavetta privata bħala varjabbli mal-proġett.
Imbagħad aħna nistaqsu SSH_PRIVATE_KEY kif fis-settings tal-proġett.
Fit-tielet u r-raba 'passi aħna noħolqu fajl .gitlab-ci.yml b'kontenut bħal dan:
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"Ejja ma nikkommettux il-fajl s'issa .gitlab-ci.yml, imbagħad ikollok bżonn iżżid xi ħaġa oħra magħha.
Issa nwettqu l-ħames pass u żid iċ-ċavetta pubblika li ħloqt fl-ewwel pass mas-servizzi li għandek bżonn aċċess għalihom fl-ambjent tal-bini.
Fil-każ tagħna, irridu naċċessaw Pantheon minn GitLab. Aħna nsegwu l-istruzzjonijiet fid-dokument Pantheon fuq u wettaq dan il-pass.
Ftakar: SSH privat jinsab f'GitLab, SSH miftuħ jinsab fil-Pantheon.
Ejja nwaqqfu ftit aktar varjabbli ambjentali. L-ewwel wieħed jissejjaħ PANTHEON_SITE. Il-valur tiegħu huwa l-isem tas-sit Pantheon fuq il-magna tiegħek.
L-isem fuq il-magna huwa elenkat fl-aħħar tal-kmand tal-Klonu bil-Git. Int diġà kklonajt is-sit lokalment, għalhekk dan se jkun l-isem tad-direttorju tar-repożitorju lokali.
Sussegwentement, ejja nwaqqfu l-varjabbli ambjentali PANTHEON_GIT_URL. Dan huwa l-URL tar-repożitorju Git għas-sit Pantheon li diġà użajna.
Daħħal biss l-URL tar-repożitorju SSH, mingħajr
git cloneu l-isem tas-sit fuq il-magna fl-aħħar.
Phew. Dak lest, issa nistgħu nispiċċaw il-fajl tagħna .gitlab-ci.yml.
Oħloq kompitu ta 'skjerament
Dak li inizjalment se nkunu qed nagħmlu ma 'GitLab CI huwa simili ħafna għal dak li għamilna mar-repożitorji Git fil-passat. Iżda din id-darba, ejja nżidu r-repożitorju Pantheon bħala t-tieni sors Git remot, u mbagħad imbotta l-kodiċi minn GitLab għal Pantheon.
Biex tagħmel dan, ejja kkonfigurat deploy и deploy:dev, għax se niskjeraw fl-ambjent ta 'żvilupp fuq Pantheon. Il-fajl li jirriżulta .gitlab-ci.yml se tidher bħal din:
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:
- masterVarjabbli SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL għandhom jidhru familjari - aħna waqqafna dawn il-varjabbli ambjentali qabel. B'dawn il-varjabbli se nkunu nistgħu nużaw il-valuri fil-fajl .gitlab-ci.yml ħafna drabi, u jkunu jeħtieġu biss li jiġu aġġornati f'post wieħed.
Fl-aħħarnett, żid, tikkommetti u ibgħat il-fajl .gitlab-ci.yml fuq GitLab.
Iċċekkja l-iskjerament
Jekk għamilna kollox b'mod korrett, il-kompitu deploy:dev se taħdem b'suċċess f'GitLab CI/CD u tissottometti impenn .gitlab-ci.yml fil-Panteon. Ejja nagħtu ħarsa.
Tibgħat il-ħjut tat-talba għall-għaqda lil Pantheon
Hawnhekk se nużaw il-karatteristika favorita tiegħi Pantheon − , fejn tista 'toħloq ambjenti Pantheon addizzjonali għall-fergħat Git fuq talba.
, għalhekk din it-taqsima tista' tinqabeż. Imma jekk għandek aċċess, tista 'żżid serjament il-produttività billi twaqqaf ħolqien awtomatiku ta' ambjenti multidev fuq Pantheon minn talbiet ta 'għaqda ta' GitLab.
L-ewwel ejja nagħmlu fergħa Git ġdida lokalment bl-użu git checkout -b multidev-support. Issa ejja nbiddlu xi ħaġa mill-ġdid ġewwa .gitlab-ci.yml.
Inħobb ninkludi n-numru tat-talba għall-għaqda fl-isem tal-ambjent Pantheon. Pereżempju, l-ewwel talba għall-għaqda hija mr-1, it-tieni - mr-2 eċċ.
It-talba għall-għaqda tinbidel, għalhekk għandna bżonn niddeterminaw b'mod dinamiku l-ismijiet tal-fergħat Pantheon. Huwa faċli fuq GitLab - għandek bżonn biss tuża .
Nistgħu nieħdu $CI_MERGE_REQUEST_IIDbiex tispeċifika n-numru tat-talba għall-għaqda. Ejja napplikaw dan kollu flimkien mal-varjabbli ambjentali globali li speċifikajna qabel u żid kompitu ġdid deploy:multidev fl-aħħar tal-fajl .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_requestsSe jkun simili għall-kompitu tagħna deploy:dev, il-fergħa biss tintbagħat lil Pantheon, mhux lil master.
Żidna u kkommettejna l-fajl aġġornat .gitlab-ci.yml, u issa ejja nimbotta fergħa ġdida għal GitLab bi git push -u origin multidev-support.
Issa ejja noħolqu talba ġdida għall-għaqda mill-fergħa multidev-supportbilli tagħfas Oħloq talba għall-għaqda.
Wara li ħloqna talba għall-għaqda, inħarsu lejn kif jitwettaq il-kompitu CI/CD deploy:multidev.
Ara, ħajt ġdid intbagħat lil Pantheon. Imma jekk immorru fit-taqsima multidev fuq id-dashboard tas-sit Pantheon, mhux se naraw l-ambjent il-ġdid hemmhekk
Ejja nħarsu lejn it-taqsima tal-Git Branches.
Bħala riżultat, il-ħajta tagħna mr-1 waslet għall Pantheon. Ejja noħolqu ambjent minn fergħa mr-1.
Ħloqna ambjent multidev, issa ejja mmorru lura għal GitLab u nħarsu lejn it-taqsima Operazzjonijiet > Ambjenti. Se naraw entrati għal dev и mr-1.
Dan għaliex żidna dħul environment Bl-isem name и url f'kompiti CI/CD. Jekk nikklikkjaw fuq l-ikona ta 'l-ambjent miftuħ, niġu meħuda għall-URL ta' l-ambjent multidev fuq Pantheon.
Awtomatizza l-ħolqien ta' multidev
Fil-prinċipju, tista 'tieqaf hawn u ftakar biss li toħloq ambjent multidev għal kull talba għall-għaqda, iżda dan il-proċess jista' jiġi awtomatizzat.
Pantheon għandu għodda tal-linja tal-kmand , fejn tista 'taħdem mal-pjattaforma awtomatikament. Terminus jippermettilek li toħloq ambjenti multidev mil-linja tal-kmand - ideali għal .
Neħtieġu talba ġdida għall-għaqda biex nittestjaw dan. Ejja noħolqu fergħa ġdida bl-użu git checkout -b auto-multidev-creation.
Biex tuża Terminus fil-kompiti GitLab CI/CD, għandek bżonn token tal-magna għall-awtentikazzjoni ma 'Terminus u immaġni ta' kontenitur ma 'Terminus.
, issalvah f'post sigur u żidha bħala varjabbli ambjentali globali f'GitLab bl-isem PANTHEON_MACHINE_TOKEN.
Jekk insejt kif iżżid varjabbli ambjentali GitLab, mur lura fejn iddefinijna
PANTHEON_SITE.
Ħolqien ta 'Dockerfile ma' Terminus
Jekk ma tużax Docker jew ma tħobbx il-fajls Dockerfile, ħu l-immaġni tiegħi registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest u aqbeż din it-taqsima.
, fejn nistgħu nibnu u npoġġu l-Dockerfile għall-proġett tagħna. Ejja noħolqu Dockerfile b'Terminus biex naħdmu ma' Pantheon.
Terminus hija għodda tal-linja tal-kmand PHP, allura ejja nibdew bl-immaġni PHP. Qed ninstalla Terminus permezz tal-Kompożitur, għalhekk ser nuża . Noħolqu Dockerfile fid-direttorju tar-repożitorju lokali bil-kontenut li ġej:
# 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"Segwi l-istruzzjonijiet biex tgħaqqad u tibgħat immaġini mit-taqsima Ibni u timbotta immaġini в biex tiġbor immaġini minn Dockerfile u imbottah għal GitLab.
Iftaħ it-taqsima Reġistru fil-proġett GitLab. Jekk kollox mar skont il-pjan, l-immaġni tagħna tkun hemm. Ikteb link għat-tikketta tal-immaġni - għandna bżonnha għall-fajl .gitlab-ci.yml.
Sezzjoni script fil-problema deploy:multidev qed jibda jikber, mela ejja nimxu għal fajl separat. Oħloq fajl ġdid 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..."
fiL-iskript jinsab f'direttorju privat u . Għandna skript għal-loġika multidev tagħna. Ejja issa naġġornaw it-taqsima deploy:multidev fajl .gitlab-ci.ymlsabiex jirriżulta hekk:
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_requestsGħandna bżonn niżguraw li l-kompiti tagħna jitwettqu fl-immaġni personalizzata maħluqa, allura ejja nżidu definizzjoni image mill-URL tar-reġistru għal .gitlab-ci.yml. Bħala riżultat, spiċċajna b'fajl bħal dan .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Żid, ikkometti u ibgħat private/multidev-deploy.sh и .gitlab-ci.yml. Issa nerġgħu lura għal GitLab u nistennew li l-kompitu CI/CD jitlesta. Kun paċenzjuż: multidev jista' jieħu diversi minuti biex jinħoloq.
Imbagħad immorru nħarsu lejn il-lista multidev fuq Pantheon. Oh miraklu! Ambjent multidev mr-2 diġà hawn.
Konklużjoni
It-tim tiegħi ħa gost ħafna aktar meta bdejna niftħu talbiet għall-għaqda u noħolqu ambjenti awtomatikament.
Bl-għodda qawwija ta 'GitLab u Pantheon, tista' tikkonnettja GitLab ma' Pantheon awtomatikament.
Peress li nużaw GitLab CI/CD, il-fluss tax-xogħol tagħna se jkollu spazju biex jikber. Hawn huma ftit ideat biex tibda:
- Żid pass tal-bini.
- Żid ittestjar awtomatizzat.
- Żid kompitu biex tiżgura li l-istandards tal-kodiċi jintlaħqu.
- Żid .
Għidilna x'taħseb dwar GitLab, Pantheon u l-awtomazzjoni.
PS Kont taf li Terminus, l-għodda tal-linja tal-kmand ta' Pantheon, ?
Aħna fil-Pantheon għamilna xogħol tajjeb fuq il-verżjoni 2 tagħna bl-appoġġ GitLab. Jekk ma tridx tolqot bl-issettjar għal kull proġett, ipprova dan il-plugin u għinna nittestjaw il-v2 beta. Għat-tim Terminus build:project:create Għandek bżonn biss token Pantheon u token GitLab. Hija se tiskjera wieħed mill-proġetti ta 'kampjun ma' Composer u ttestjar awtomatizzat, toħloq proġett ġdid f'GitLab, sit ġdid ta 'Pantheon, u tgħaqqadhom billi tuża varjabbli ambjentali u ċwievet SSH.
Dwar l-awtur
Andrew Taylor joħloq għodod għall-iżviluppaturi fil .
Sors: www.habr.com
