
Mêvanê me, afirînerê amûrên pêşdebiran Pantheon, li ser çawaniya otomatîkkirina bicihkirinan diaxive. WordPress bi karanîna GitLab CI/CD.
В Ez di têkiliyên pêşdebiran de dixebitim, ji ber vê yekê ez her gav li rêyên nû digerim da ku alîkariya pêşdebiran bikim. WordPress и Drupal Pirsgirêkên otomasyonê di herikên kar de çareser bikin. Ji bo vê yekê, ez hez dikim bi amûrên nû re ceribandinê bikim û wan bi hev re bikim da ku karîgeriyek mezintir bi dest bixim.
Ez pir caran dibînim ku pêşdebiran bi serverek yekane re têdikoşin.
Kêfxweş e ku meriv li benda dora we bimîne ku hûn serverek navber bikar bînin an ji xerîdaran URLek bi navnîşê bişînin: "Li vir binihêrin, lê hîna li vir nenihêrin."
- yek ji amûrên xweş ên Pantheon - vê pirsgirêkê çareser dike, ji ber ku bi wan re hûn dikarin li gorî daxwazê ji bo şaxên Git hawîrdoran biafirînin. Her hawîrdora multidev URL û databasa xwe heye, ji ber vê yekê pêşdebiran dikarin bêdeng bixebitin, kalîteyê kontrol bikin, û erêkirinê bistînin bêyî ku li ser tiliyên hevûdu bikevin.
Lê Pantheon ji bo kontrolkirina guhertoyê an yekbûn û bicîhkirina domdar (CI/CD) amûr tune. Lê ew platformek maqûl e ku hûn dikarin her amûrek pê re yek bikin.
Di heman demê de min bala xwe dayê ku tîm ji bo pêşkeftinê hin amûran bikar tînin, û yên cûda jî ji bo komkirin û bicîhkirinê bikar tînin.
Mînakî, wan ji bo kontrolkirina guhertoyê û CI/CD amûrên cihêreng hene. Pêdivî ye ku hûn li dora xwe bizivirin û di navbera amûran de veguherînin da ku kodê biguherînin û pirsgirêkan teşhîs bikin.
li ser komek bêkêmasî ya amûrên pêşkeftinê hene: ji bo kontrolkirina guhertoyê, bilêtan, daxwazên hevgirtinê, boriyek CI/CD-ê ya herî baş, qeydek konteynerê, û her tiştê mîna wê. Ez hîna rast nehatime serîlêdanek ku ji bo birêvebirina xebata pêşkeftina we ewqas pir pêşkêşî dike.
Ez ji otomasyonê hez dikim, ji ber vê yekê ez fêr bûm ka meriv çawa Pantheon bi GitLab ve girêdide da ku peywirên şaxê sereke yên li ser GitLab li hawîrdora pêşkeftina sereke ya li Pantheon-ê werin bicîh kirin. Û daxwazên yekbûnê yên li ser GitLab dikarin kodê li hawîrdorên multidev ên li Pantheon biafirînin û bicîh bikin.
Di vê rêbernameyê de, ez ê nîşanî we bidim ka meriv çawa di navbera GitLab û Pantheon de pêwendiyek saz dike û herikîna karê xwe baştir dike. WordPress и Drupal.
Helbet gengaz e, , lê em ê her tiştî bi destên xwe bikin ku em tê de bikolin û di pêşerojê de vê amûrê ne tenê ji bo bicîhkirinê bikar bînin.
Pîrozbahiyê
Ji bo vê postê, hûn hewce ne ku fêm bikin ku Pantheon her malperê li sê hêmanan vediqetîne: kod, databas û pelan.
Kod pelên CMS-ê yên wekî core, plugin û themes vedihewîne. WordPressEv pelan di nav de têne rêvebirin , ku ji hêla Pantheon ve hatî mêvandar kirin, tê vê wateyê ku em dikarin kodê ji GitLab berbi Pantheon-ê bi Git-ê bicîh bikin.
Pelên di Pantheon de pelên medyayê ne, ango wêneyên malperê ne. Bi gelemperî ew ji hêla bikarhêneran ve têne barkirin û Git wan paşguh dike.
, li ser bêtir fêr bibin an li pantheon.io.
Texmîn
Projeya min li ser Pantheon û GitLab tê gotin pantheon-gitlab-blog-demoDivê navê projeyê bêhempa be. Em ê li vir bi malperekê bixebitin. WordPressTu jî dikarî wê bigirî Drupal, lê belê divê hin tişt werin guhertin.
Ez ê bikar bînim û hûn dikarin tê de bixebitin , heke hûn bixwazin.
Projeyek çêbikin
Pêşîn, em biafirînin (Em ê paşê vegerin ser vê yekê).
Now Paşê em wê saz dikin. WordPress ji bo dashboarda malperê.
Ger destên we ji bo guheztina tiştek diherikin, mînakî, pêvekan jê bikin an lê zêde bikin, bi sebir bin. Malper hîna bi GitLab ve ne girêdayî ye, û em dixwazin ku hemî guhertinên kodê di nav GitLab re derbas bibin.
Em ê kengî wê saz bikin? WordPress, vegere ser dashboarda malpera Pantheonê û moda pêşvebirinê biguherîne Git.
Peymana destpêkê li ser GitLab
Niha hûn hewce ne ku koda destpêkê veguhezînin WordPress Ji malpera Pantheonê bo GitLab. Ji bo vê yekê, em kodê ji depoya Git a malpera Pantheonê bi awayekî herêmî klona dikin û dûv re wê dişînin depoya GitLab.
Ji bo ku hêsantir û ewlehtir bikin, û em neçar in ku her gava ku em depoyek Pantheon Git klon dikin şîfreyek têkevin. Di heman demê de jixwe .
Ji bo kirina vê, malpera Pantheon-ê bi herêmî klon bikin bi kopîkirina fermanê ji qada Clone bi Git li ser dashboarda malperê.
Ger hewcedariya we bi alîkariyê hebe, belgeyê bixwînin .
Niha em biguherînin git remote originku li şûna Pantheonê GitLab nîşan bide. Ew dikare were kirin .
Ka em biçin projeya GitLab û URL-ya depoyê ji pelika Clone ya li ser rûpela hûrguliyên projeyê kopî bikin. Ka em vebijarka Clone bi SSH hilbijêrin, ji ber ku me berê mifteya SSH mîheng kiriye.
by default git remote ji bo kopiyek herêmî ya depoya kodê - origin. Ev dikare were guhertin c git remote set-url origin [URL репозитория GitLab], li ku derê li şûna brûsk em navnîşana rastîn ya URL-ê têkevin.
Di dawiyê de, em dest pê dikin git push origin master --forceji bo şandina kodê WordPress ji malpera Pantheonê li ser GitLab.
Vebijarka -hêz tenê carekê hewce ye. Piştre di tîmên
git pushew ê ne li ser GitLab be.
Sazkirina pêbawer û guherbaran
Bînin bîra xwe ku me çawa mifteyek SSH-ya herêmî lê zêde kir ku têkevin Pantheon û GitLab? Nîşana SSH dikare were bikar anîn ku destûr bide GitLab û Pantheon.
GitLab xwedan belgeyên hêja ye. Ka em bibînin .
Niha em ê du gavên pêşîn temam bikin: Werin em bi ssh-keygen cotek mifteya SSH-ya nû bi herêmî biafirînin û mifteya taybet wekî guhêrbar li projeyê zêde bikin..
Paşê em ê bipirsin SSH_PRIVATE_KEY çawa di mîhengên projeyê de.
Di gavên sêyemîn û çaremîn de em ê pelek çêbikin .gitlab-ci.yml bi naverok bi vî rengî:
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"Werin em hê dosyayê negirin .gitlab-ci.yml, hingê hûn ê hewce bikin ku tiştek din lê zêde bikin.
Niha em pêngava pêncemîn pêk tînin û mifteya giştî ya ku we di gava yekem de çêkiriye li ser karûbarên ku hûn hewce ne ku di hawîrdora çêkirinê de bigihîjin wan zêde bikin.
Di doza me de, em dixwazin ji GitLab bigihîjin Pantheon. Em rêwerzên di belgeya Pantheon de li ser bişopînin û vê gavê pêk bînin.
Bînin bîra xwe: SSH taybet li GitLab e, SSH vekirî li Pantheon e.
Werin em çend guhêrbarên jîngehê yên din saz bikin. Ya yekem jê re PANTHEON_SITE tê gotin. Nirxa wê navê malpera Pantheon li ser makîneya we ye.
Navê li ser makîneyê di dawiya fermana Clone bi Git de tête navnîş kirin. We berê malper bi herêmî klon kiriye, ji ber vê yekê ev ê navê pelrêça depoya herêmî be.
Paşê, em guhêrbara jîngehê saz bikin PANTHEON_GIT_URL. Ev URL-ya depoya Git-ê ye ji bo malpera Pantheon ku me berê bikar aniye.
Tenê URL-ya depoya SSH-ê binivîse, bêyî
git cloneû navê malperê li ser makîneyê di dawiyê de.
Phew. Ev qediya, niha em dikarin dosyaya xwe biqedînin .gitlab-ci.yml.
Karê veqetandinê biafirînin
Ya ku em ê di destpêkê de bi GitLab CI re bikin, pir dişibihe ya ku me berê bi depoyên Git re kiriye. Lê vê carê, bila em depoya Pantheon-ê wekî çavkaniyek Git-a dûr a duyemîn lê zêde bikin, û dûv re kodê ji GitLab berbi Pantheon-ê bikişîne.
Ji bo vê yekê, werin em mîheng bikin deploy и deploy:dev, ji ber ku em ê li hawîrdora pêşkeftinê li ser Pantheon bicîh bikin. Pelê encam .gitlab-ci.yml wê wisa bibînin:
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:
- masterGuhêrbar SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL divê nas xuya bike - me berê van guhêrbarên jîngehê saz kir. Bi van guherbaran em ê bikaribin nirxên di pelê de bikar bînin .gitlab-ci.yml gelek caran, û ew ê tenê hewce ne ku li cîhek nûve bikin.
Di dawiyê de, pelê lê zêde bike, bipejirîne û bişîne .gitlab-ci.yml li ser GitLab.
Kontrolkirina belavkirinê
Ger me her tişt rast kir, peywir deploy:dev dê di GitLab CI/CD de bi serfirazî bixebite û commitek bişîne .gitlab-ci.yml li Pantheonê. Ka em lê binêrin.
Mijarên daxwaza yekbûnê ji Pantheon re dişîne
Li vir em ê taybetmendiya Pantheon-a xweya bijare bikar bînin - , ku hûn dikarin li gorî daxwazê ji bo şaxên Git-ê jîngehên din ên Pantheon biafirînin.
, ji ber vê yekê ev beş dikare were avêtin. Lê ger gihîştina we hebe, hûn dikarin bi ciddî hilberîneriyê zêde bikin bi sazkirina çêkirina otomatîkî ya hawîrdorên multidevê yên li ser Pantheon ji daxwazên yekbûnê yên GitLab.
Pêşî bila em şaxek nû ya Git-ê bi karanîna herêmî çêbikin git checkout -b multidev-support. Naha em dîsa di hundurê de tiştek biguhezînin .gitlab-ci.yml.
Ez hez dikim ku di nav navê hawîrdora Pantheon de hejmara daxwaza hevgirtinê têxim nav xwe. Mînakî, yekem daxwaza yekbûnê ye mr-1, duyem - mr-2 etc.
Daxwaza hevgirtinê diguhere, ji ber vê yekê divê em bi dînamîk navên şaxên Pantheon diyar bikin. Ew li ser GitLab hêsan e - hûn tenê hewce ne ku bikar bînin .
Em dikarin bigirin $CI_MERGE_REQUEST_IIDji bo diyarkirina hejmara daxwaza yekbûnê. Werin em van hemî li gel guhêrbarên jîngehê yên gerdûnî yên ku me berê diyar kiribûn bicîh bînin û li dawiya pelê peywirek nû lê zêde bikin deploy:multidev .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_requestsEw ê mîna karê me be deploy:dev, tenê şax ji Pantheon re tê şandin, ne ku master.
Me dosyaya nûvekirî lê zêde kir û pêve kir .gitlab-ci.yml, û naha em şaxek nû bi GitLab re bişopînin git push -u origin multidev-support.
Naha em ji şaxê daxwaznameyek nû ya yekbûnê biafirînin multidev-supportbi tikandina Daxwaza yekbûnê çêbikin.
Dema ku daxwaznameyek hevgirtinê çêkir, em mêze dikin ka peywira CI/CD çawa tê darve kirin deploy:multidev.
Binêrin, mijarek nû ji Pantheon re hat şandin. Lê heke em biçin beşa multidev li ser panela malpera Pantheon, em ê jîngeha nû li wir nebînin.
Ka em li beşa Git Branches binêrin.
Di encamê de, mijara me mr-1 gihîştin Pantheonê. Werin em ji şaxekê jîngehekê ava bikin mr-1.
Me hawîrdorek multidev çêkiriye, naha em vegerin GitLab û li beşê binêrin Operasyonên > Jîngeh. Em ê navnîşan ji bo bibînin dev и mr-1.
Ev ji ber ku me navnîşek zêde kir environment Bi navê name и url nav karên CI / CD. Ger em li ser îkona jîngeha vekirî bikirtînin, em ê bibin navnîşana jîngeha multidev-ê ya li ser Pantheon.
Afirandina multidev otomatîk bikin
Di prensîbê de, hûn dikarin li vir rawestin û tenê ji bîr mekin ku ji bo her daxwazek hevgirtinê hawîrdorek multidev biafirînin, lê ev pêvajo dikare otomatîk be.
Pantheon amûrek rêza fermanê heye , ku hûn dikarin bixweber bi platformê re bixebitin. Terminus dihêle hûn ji rêzika fermanê hawîrdorên multidev biafirînin - ji bo îdeal .
Ji bo ceribandina vê yekê ji me re daxwazek hevgirtinek nû hewce ye. Werin em şaxek nû bi kar bînin git checkout -b auto-multidev-creation.
Ji bo ku hûn Terminus-ê di karên GitLab CI/CD-ê de bikar bînin, ji bo pejirandina bi Terminus re tokenek makîneyê û bi Terminus re wêneyek konteynerê hewce dike.
, wê li cîhek ewle hilîne û wekî guhêrbarek jîngehê ya gerdûnî li GitLab bi navî lê zêde bike PANTHEON_MACHINE_TOKEN.
Ger we ji bîr kir ku meriv çawa guhêrbarên jîngehê GitLab zêde bike, vegerin cîhê ku me diyar kiriye
PANTHEON_SITE.
Afirandina Dockerfile bi Terminus
Ger hûn Docker bikar neynin an pelan jê hez nekin Dockerfile, wêneyê min bigire registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest û ji vê beşê derbas bibin.
, ku em dikarin ji bo projeya xwe Dockerfile ava bikin û bi cîh bikin. Ka em bi Terminus re Dockerfile biafirînin ku bi Pantheon re bixebitin.
Terminus amûrek rêzika fermanê ya PHP-ê ye, ji ber vê yekê em bi wêneya PHP-ê dest pê bikin. Ez bi rêya Composer Terminus saz dikim, ji ber vê yekê ez ê bikar bînim . Em diafirînin Dockerfile di pelrêça depoya herêmî de bi naveroka jêrîn:
# 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"Talîmatên ji bo komkirin û şandina wêneyan ji beşê bişopînin Wêneyan ava bikin û bişopînin в ji bo berhevkirina wêneyek Dockerfile û wê bikişîne GitLab.
Beşê vekin Registry di projeya GitLab de. Ger her tişt li gorî planê bimeşe, dê wêneyê me li wir be. Girêdanek bi etîketa wêneyê binivîsin - em ji bo pelê hewce ne .gitlab-ci.yml.
Beşê script di pirsgirêkê de deploy:multidev dest bi mezinbûnê dike, ji ber vê yekê bila em wê veguhezînin pelek cûda. Pelê nû çêbikin 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..."
fiSkrîpta di pelrêça taybet de ye û . Ji bo mantiqa xweya multidev skrîptek me heye. Ka em niha beşê nûve bikin deploy:multidev dosî .gitlab-ci.ymlda ku bi vî rengî derkeve holê:
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_requestsPêdivî ye ku em pê ewle bin ku karên me di wêneya xwerû ya çêkirî de têne kirin, ji ber vê yekê em pênaseyekê lê zêde bikin image ji URL-ya qeydê berbi .gitlab-ci.yml. Di encamê de, em bi dosyayek bi vî rengî bi dawî bûn .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_requestsZêde bikin, bişînin û bişînin private/multidev-deploy.sh и .gitlab-ci.yml. Naha em vegerin GitLab û li bendê ne ku peywira CI/CD biqede. Bi sebir bin: multidev dikare çend hûrdeman bigire ku meriv çêbike.
Dûv re em diçin navnîşa multidevê ya li ser Pantheonê binihêrin. Ey mûcîze! jîngeha Multidev mr-2 jixwe li vir.
encamê
Dema ku me dest bi vekirina daxwazên hevgirtinê û afirandina jîngehan bixweber kir, tîmê min pir kêfa xwe kişand.
Bi amûrên hêzdar ên GitLab û Pantheon, hûn dikarin GitLab bixweber bi Pantheon ve girêdin.
Ji ber ku em GitLab CI/CD bikar tînin, xebata me dê cîhê mezinbûnê hebe. Li vir çend raman hene ku hûn dest pê bikin:
- Pêvekek avakirinê zêde bikin.
- Testkirina otomatîkî zêde bikin.
- Ji bo bicîhanîna standardên kodê peywirek zêde bikin.
- Lêzêdekirin .
Bila ji me re bizanin ka hûn li ser GitLab, Pantheon û otomasyonê çi difikirin.
PS Ma we dizanibû ku Terminus, amûra xeta fermanê ya Pantheon, ?
Me li Pantheon li ser guhertoya 2 ya xwe karekî baş kiriye bi piştgiriya GitLab. Heke hûn naxwazin ji bo her projeyê mîhengan aciz bikin, vê pêvekê biceribînin û ji me re bibin alîkar ku v2 beta ceribandinê bikin. Ji bo tîma Terminus build:project:create Hûn tenê tokenek Pantheon û nîşanek GitLab hewce ne. Ew ê yek ji projeyên nimûneyê bi Composer û ceribandina otomatîkî re bicîh bike, projeyek nû li GitLab, malperek nû ya Pantheon-ê biafirîne, û wan bi karanîna guhêrbarên hawîrdorê û bişkokên SSH ve girêbide.
Li ser nivîskarê
Andrew Taylor ji bo pêşdebiran amûran diafirîne .
Source: www.habr.com
