
Mūsu viesis, rīku izstrādātājs no Pantheon, stāsta, kā automatizēt WordPress izveidi, izmantojot GitLab CI/CD.
No Es nodarbojos ar izstrādātāju attiecībām, tāpēc vienmēr meklēju jaunus veidus, kā palīdzēt WordPress un Drupal izstrādātājiem risināt automatizācijas problēmas darbplūsmā. Tādēļ man patīk eksperimentēt ar jauniem rīkiem un kombinēt tos savā starpā efektīvai darbībai.
Es bieži redzu, kā izstrādātāji cieš ar vienu starpserveri.
Tas nav patīkami — gaidīt savu kārtu, lai izmantotu starpserveri, vai sūtīt klientiem URL ar atzīmi: «Šeit skatieties, bet šeit vēl neskatieties».
— viens no foršajiem Pantheon rīkiem — risina šo problēmu, jo ar tām var uz pieprasījumu izveidot vides Git zariem. Katram multidev vidēm ir sava URL un datubāze, tāpēc izstrādātāji var mierīgi strādāt, pārbaudīt kvalitāti un saņemt apstiprinājumu, nekavējoties nepiekrītot viens otram.
Tomēr Pantheon nav versiju kontroles vai nepārtrauktas integrācijas un izveides (CI/CD) rīku. Toties tā ir elastīga platforma, kurā var integrēt jebkādus rīkus.
Vēl es esmu pamanījis, ka izstrādes komandas izmanto vienus rīkus, bet izveidei un izplatīšanai — citus.
Piemēram, viņiem ir atšķirīgi rīki versiju kontrolei un CI/CD. Jāgriežas un jāpārslēdzas starp rīkiem, lai rediģētu kodu un diagnosticētu problēmas.
Uz ir pilnīgs izstrādes rīku komplekts: versiju kontrolei, uzdevumiem, apvienošanas pieprasījumiem, labākais CI/CD pipelines, konteineru reģistrs un viss pārējais. Man vēl nav gadījies lietot lietojumprogrammas, kurās būtu tik daudz visdažādāko rīku darba plūsmas pārvaldībai.
Es dievinu automatizāciju, tāpēc esmu izpētījis, kā pieslēgt Pantheon pie GitLab, lai apstiprinājumi galvenajā zarā GitLab tiek izvietoti galvenajā izstrādes vidē Pantheon. Turklāt apvienošanas pieprasījumi GitLab var izveidot un izplatīt kodu Multidev vidēs Pantheon.
Šajā rokasgrāmatā es pastāstīšu, kā konfigurēt savienojumu starp GitLab un Pantheon un optimizēt WordPress un Drupal darba plūsmu.
Protams, , bet mēs visi darīsim to roku darbs, lai pētītu un nākotnē izmantotu šo rīku ne tikai izvietošanai.
Ievads
Lai saprastu šo ziņu, jāzina, ka Pantheon katru vietni sadala trijos elementos: kods, datu bāze un faili.
Kods ietver CMS failus, piemēram, WordPress kodolu, spraudņus un tēmas. Šos failus pārvalda , kas atrodas Pantheon, tātad mēs varam ieviest kodu no GitLab uz Pantheon ar Git.
Faili Pantheon tiek saukti par multivides failiem, tas ir, attēliem vietnei. Parasti tos augšupielādē lietotāji, un Git tos ignorē.
, uzziniet vairāk par vai pantheon.io.
Pieņēmumi
Mans projekts Pantheon un GitLab saucas pantheon-gitlab-blog-demo. Projekta nosaukumam jābūt unikālam. Šeit mēs strādāsim ar WordPress vietni. Var ņemt arī Drupal, bet būs jāveic daži pielāgojumi.
Es izmantosiu , bet jūs varat strādāt , ja vēlaties.
Izveidojam projektu
Vispirms izveidojam (par to vēl runāsim).
Tagad . Tad instalējam WordPress vietnes vadības panelim.
Ja jūtat vēlmi kaut ko mainīt, piemēram, izdzēst vai pievienot spraudņus, pacietīgi pagaidiet. Vietne vēl nav pieslēgta GitLab un mēs vēlamies, lai visas koda izmaiņas tiek veiktas caur GitLab.
Kad WordPress ir uzstādīts, atgriežamies Pantheon vietnes vadības panelī un pārslēdzam izstrādes režīmu uz Git.
Pirmais komits uz GitLab
Tagad ir jānosūta sākotnējais WordPress kods no Pantheon vietnes uz GitLab. Tam mēs klonējam kodu no Pantheon vietnes Git repozitorija lokāli un pēc tam augšupielādējam to GitLab repozitorijā.
Lai būtu vieglāk un drošāk, un neievadam katru reizi paroli, kad klonējam Pantheon Git repozitoriju. Tāpat jau .
Tam mēs klonējam Pantheon vietni lokāli, nokopējot komandu no Klonēt ar Git laukuma vietnes vadības panelī.
Ja nepieciešama palīdzība, lasiet dokumentāciju .
Tagad mainīsim git remote origin, lai norādītu uz GitLab vietā Pantheon. To var izdarīt .
Pārslēgsimies uz GitLab projektu un nokopēsim URL repozitoriju no izkrītošā saraksta Klonēt projekta detaļu lapā. Izvēlēsimies Klonēt ar SSH variantu, jo mēs jau esam konfigurējuši SSH atslēgu.
Pa noklusējumu git remote lokālajai kodu repozitorija kopijai — origin. To var mainīt ar git remote set-url origin [GitLab repozitorija URL], kur vietā apaļām pēdiņām ievadām faktisko URL.
Visbeidzot, palaidīsim git push origin master --force, lai nosūtītu WordPress kodu no Pantheon vietnes uz GitLab.
Parametrs –force ir jāizmanto tikai vienu reizi. Pēc tam komandās
git pushpats GitLab tas nebūs.
Iestata lietotāja datus un mainīgos
Atceries, kā mēs lokāli pievienojām SSH atslēgu, lai autorizētos Pantheon un GitLab? SSH tokenu var izmantot GitLab un Pantheon autorizācijai.
GitLab ir lieliska dokumentācija. Apskatīsim .
Tagad mēs veiksim pirmos divus soļus: izveidosim jaunu SSH atslēgu pāri lokāli ar ssh-keygen un pievienosim slēpto atslēgu kā mainīgo projektā.
Pēc tam iestatīsim SSH_PRIVATE_KEY kā projektu iestatījumos.
Trešajā un ceturtajā solī izveidosim failu .gitlab-ci.yml ar šādu saturu:
before_script:
# Skatieties 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"Pagājuši vēl nenoklikšķinām uz faila .gitlab-ci.yml, vēlāk tam jābūt vēl ko pievienot.
Tagad veicam piekto soli un pievienojam atklāto atslēgu, ko izveidojām pirmajā solī, servisiem, kuriem jums nepieciešama piekļuve būvēšanas vidē.
Mūsu gadījumā mēs vēlamies no GitLab piekļūt Pantheon. Ievērojiet norādījumus Pantheon dokumentā par un veicam šo soli.
Atceramies: slēgtā SSH – GitLab, atklātā – Pantheon.
Iestatīsim vēl dažus vides mainīgos. Pirmais saucas PANTHEON_SITE. Tai vērtība ir Pantheon vietnes nosaukums uz jūsu datora.
Nosaukums datorā norādīts komandas Clone with Git beigās. Jūs jau esat nolēmis vietni lokāli, tāpēc tas būs lokālā repozitāra vārdnīcas nosaukums.
Tālāk iestatīsim vides mainīgo PANTHEON_GIT_URL. Tas ir Pantheon vietnes Git repozitāra URL, ko mēs jau esam izmantojuši.
Ievadām tikai SSH repozitāra URL, bez
git cloneun vietnes nosaukuma datorā beigās.
Uf. Mēs to izdarījām, tagad varam pabeigt mūsu failu .gitlab-ci.yml.
Izveidojam izsniegšanas uzdevumu
Tas, ko mēs sākumā darīsim ar GitLab CI, ļoti līdzīgs tam, ko mēs darījām ar Git repozitāriem agrāk. Bet šoreiz pievienosim Pantheon repozitoriju kā otro attālināto Git avotu, un pēc tam nosūtīsim kodu no GitLab uz Pantheon.
Lai to izdarītu, iestatīsim deploy un deploy:dev, jo mēs veiksim izsniegšanu izstrādes vidē Pantheon. Rezultātā fails .gitlab-ci.yml izskatīsies šādi:
posmi:
- izvietot
pirms_script:
# Skatiet 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"
izvietot:dev:
posms: izvietot
vide:
nosaukums: dev
URL: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
tikai:
- masterMainīgie SSH_PRIVATE_KEY, PANTHEON_SITE un PANTHEON_GIT_URL jāizskatās pazīstami — mēs iepriekš esam iestatījuši šīs vides mainīgās vērtības. Ar šīm mainīgajām vērtībām mēs varēsim izmantot vērtības failā .gitlab-ci.yml daudzreiz, bet atjaunināt tās vajadzēs tikai vienā vietā.
Visbeidzot, pievienosim, nokommitēsim un nosūtīsim failu .gitlab-ci.yml uz GitLab.
Pārbaudām izvietošanu
Ja viss izdarīts pareizi, uzdevums deploy:dev veiksies veiksmīgi GitLab CI/CD un nosūtīs kommitu .gitlab-ci.yml Pantheon. Apskatīsim.
Nosūtām mērķa zaru uz Pantheon
Šeit mēs izmantosim savu iecienītāko Pantheon funkciju — , kur var pēc pieprasījuma izveidot papildu Pantheon vidus Git zariem.
, tādēļ šo sadaļu var neizpildīt. Bet, ja jums ir piekļuve, varat būtiski uzlabot veiktspēju, iestata automātisku multidev vides izveidi Pantheon no GitLab apvienošanas pieprasījumiem.
Vispirms izveidosim jaunu Git zaru lokāli, izmantojot git checkout -b multidev-support. Tagad atkal veiksim dažas izmaiņas .gitlab-ci.yml.
Man patīk norādīt apvienošanas pieprasījuma numuru Pantheon vides nosaukumā. Piemēram, pirmajam apvienošanas pieprasījumam — mr-1, otrajam — mr-2 utt.
Apvienošanas pieprasījums mainās, tādēļ mums ir dinamiski jānosaka Pantheon zaru nosaukumi. GitLab tas ir pavisam vienkārši — jānāk lietā .
Mēs varam izmantot $CI_MERGE_REQUEST_IID, lai norādītu apvienošanas pieprasījuma numuru. Apskatīsim to visu kopā ar globālajām vides mainīgajām vērtībām, kuras mēs iepriekš norādījām, un pievienosim jaunu uzdevumu izvietot:multidev faila beigās .gitlab-ci.yml.
izvietot:multidev:
posms: izvietot
vide:
nosaukums: multidev/mr-$CI_MERGE_REQUEST_IID
URL: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Iegūstiet apvienošanas pieprasījuma avota zaru
- git checkout $CI_COMMIT_REF_NAME
# Pievienojiet Pantheon git repozitoriju kā papildu attālo
- git remote add pantheon $PANTHEON_GIT_URL
# Nosūtot apvienošanas pieprasījuma avota zaru uz Pantheon
- git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
tikai:
- apvienošanas_pieprasījumiIzskatīsies līdzīgi mūsu uzdevumam deploy:dev, tikai zars tiek nosūtīts uz Pantheon, nevis uz master.
Mēs pievienojām un nokommitējām atjaunināto failu .gitlab-ci.yml, tagad nosūtīsim jauno zaru uz GitLab ar git push -u origin multidev-support.
Tagad izveidosim jaunu apvienošanas pieprasījumu no zara multidev-atbalsts, nospiežot Izveidot apvienošanas pieprasījumu.
Izveidojot apvienošanas pieprasījumu, apskatām, kā tiek izpildīta CI/CD uzdevums deploy:multidev.
Skatieties — Pantheon ir nosūtīta jauna filiāle. Bet, ja pāriesim uz multidev sadaļu Pantheon tīmekļa paneļa saskarnē, tur neredzēsim jauno vidi
Apskatīsim Git filiāļu sadaļu.
Tādējādi mūsu filiāle mr-1 ir nonākusi Pantheon. Izveidosim vidi no filiāles mr-1.
Esam izveidojuši multidev vidi, tagad atgriezīsimies GitLab un ielūkosimies sadaļā Operations > Environments. Mēs redzēsim ierakstus par dev un mr-1.
Tas tāpēc, ka mēs pievienojām ierakstu vidē ar nosaukumu name un url CI/CD uzdevumos. Ja nospiedīsim atvērtās vides ikonu, mēs pāriesim uz multidev vides URL Pantheon.
Automatizēsim multidev izveidi
Principā, uz šo vietu varam apstāties un vienkārši neaizmirst par katra apvienošanas pieprasījuma dēļ izveidot multidev vidi, bet šo procesu var automatizēt.
Pantheon ir komandrindas rīks , ar kuru var automātiski strādāt ar platformu. Ar Terminus var izveidot multidev vides, izmantojot komandrindu — lieliski piemērots .
Mums nepieciešams jauns apvienošanas pieprasījums, lai to pārbaudītu. Izveidosim jaunu filiāli, izmantojot git checkout -b auto-multidev-creation.
Lai izmantotu Terminus GitLab CI/CD uzdevumos, nepieciešams mašīnas tokens, lai autentificētos Terminus un konteineru attēls ar Terminus.
, saglabājam to drošā vietā un pievienojam kā globālo vides mainīgo GitLab ar nosaukumu PANTHEON_MACHINE_TOKEN.
Ja aizmirsāt, kā pievienot GitLab vides mainīgos, atgriezieties tur, kur mēs definējām
PANTHEON_SITE.
Izveidojam Dockerfile ar Terminus
Ja neizmantojat Docker vai nepatīk failu Dockerfile, ņemiet manu attēlu registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest un izlaidiet šo sadaļu.
, kur varam izveidot un izvietot Dockerfile mūsu projektam. Izveidosim Dockerfile ar Terminus, lai strādātu ar Pantheon.
Terminus ir komandrindas rīks PHP, tāpēc sāksim ar PHP attēlu. Es instalēju Terminus caur Composer, tāpēc par pamatu ņemšu . Izveidojam Dockerfile lokālā repozitorija katalogā ar šādu saturu:
# 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"Sekojam būvēšanas un nosūtīšanas attēlu instrukcijām no sadaļas Build and push images par , lai savāktu attēlu no Dockerfile un nosūtītu to uz GitLab.
Atveram sadaļu Registry projektā GitLab. Ja viss ir gājis pēc plāna, tur būs mūsu attēls. Pierakstiet attēla tagu — tā mums nepieciešama failam .gitlab-ci.yml.
Sadaļa script uzdevumā deploy:multidev sāk izplatīties, tāpēc pārliksim to uz atsevišķu failu. Izveidojam jaunu failu 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..."
fiScripts atrodas privātajā katalogā un . Mums ir skripts mūsu multidev loģikai. Tagad atjaunināsim sadaļu deploy:multidev faila .gitlab-ci.yml, lai izskatītos šādi:
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Palaist multidev izvietošanas skriptu
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsJānodrošina, ka mūsu uzdevumi izpildās izveidotajā pielāgotajā attēlā, tāpēc pievienosim definīciju attēls ar reģistra URL .gitlab-ci.yml. Tādējādi mums iznāca šāds fails .gitlab-ci.yml:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
stages:
- deploy
before_script:
# Skatīt 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:
# Palaist multidev izvietošanas skriptu
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsPievienojam, komitejam un nosūtām private/multidev-deploy.sh un .gitlab-ci.yml. Tagad atgriežamies GitLab un gaidām, kamēr CI/CD uzdevums izpildīsies. Lūdzu, pacietieties: multidev var radīt vairākas minūtes.
Pēc tam dodamies apskatīt multidev sarakstu Pantheon. Ak, brīnums! Multidev vide mr-2 jau ir šeit.
Secinājums
Mana komanda strādāja daudz jautrāk, kad mēs sākām atvērt apvienošanas pieprasījumus un automātiski izveidojām vides.
Ar jaudīgajiem GitLab un Pantheon rīkiem varat automātiski savienot GitLab ar Pantheon.
Tā kā mēs izmantojam GitLab CI/CD, mūsu darba plūsma būs daudz attīstāmāka. Šeit ir dažas idejas, ar ko sākt:
- Pievienojiet versijas veidošanas soli.
- Pievienojiet automatizētus testus.
- Pievienojiet uzdevumu, lai nodrošinātu koda standartus.
- Pievienojiet .
Rakstiet, ko domājat par GitLab, Pantheon un automatizāciju.
P.S. Vai zinājāt, ka Terminus, Pantheon komandrindas rīks, ?
Mēs Pantheon labi strādājām pie versijas 2 mūsu ar GitLab atbalsts. Ja nevēlaties ņemties ar iestatījumiem katram projektam, izmēģiniet šo paplašinājumu un palīdziet mums testēt beta v2. Terminus komandai build:project:create tiek nepieciešams tikai Pantheon tokens un GitLab tokens. Tas uzstādīs vienu no projekta piemēriem ar Composer un automātisko testēšanu, izveidos jaunu projektu GitLab, jaunu tīmekļa vietni Pantheon un savienos tās, izmantojot vides mainīgos un SSH atslēgas.
Par autoru
Endrjū Teilors (Andrew Taylor) izstrādā rīkus izstrādātājiem .
Avots: habr.com
