Ntchitoyi idalimbikitsidwa ndi tsamba lawebusayiti kubernetes.io, yomwe imapangidwa kuchokera ku ma source kodi zokha, ndi pempho lililonse la dziwe lomwe latumizidwa, loboti imangopanga mawonekedwe owonera tsambalo ndi zosintha zanu ndikupereka ulalo wowonera.
Ndinayesa kupanga njira yofananayo kuyambira pachiyambi, koma yomangidwa kwathunthu pa Gitlab CI ndi zida zaulere zomwe ndimagwiritsa ntchito potumiza mapulogalamu ku Kubernetes. Lero ndidzakuuzani zambiri za iwo.
Nkhaniyi ifotokoza zida monga: Hugo, qbec, kodi, git-crypt и GitLab CI ndi kupanga malo osinthika.
Monga chitsanzo cha polojekiti yathu, tidzayesa kupanga malo osindikizira zolemba omangidwa pa Hugo. Hugo ndi static content generator.
Kwa iwo omwe sadziwa majenereta osasunthika, ndikuwuzani zambiri za iwo. Mosiyana ndi ma injini wamba omwe ali ndi database ndi PHP, omwe, akafunsidwa ndi wogwiritsa ntchito, amapanga masamba pa ntchentche, majenereta osasunthika amapangidwa mosiyana. Amakulolani kuti mutenge magwero, nthawi zambiri mafayilo omwe ali mu Markdown markup ndi ma tempuleti amutu, kenako ndikuwaphatikiza kukhala tsamba lomalizidwa kwathunthu.
Izi zikutanthauza kuti, chifukwa chake, mudzalandira chikwatu ndi seti yamafayilo opangidwa ndi HTML, omwe mutha kungowayika ku hosting iliyonse yotsika mtengo ndikupeza tsamba logwira ntchito.
Mutha kukhazikitsa Hugo kwanuko ndikuyesa:
Kuyambitsa tsamba latsopano:
hugo new site docs.example.org
Ndipo nthawi yomweyo git repository:
cd docs.example.org
git init
Pakadali pano, tsamba lathu ndilabwino ndipo kuti china chake chiwonekere pamenepo, choyamba tiyenera kulumikiza mutuwo; mutu umangokhala ma templates ndi malamulo odziwika omwe tsamba lathu limapangidwira.
Pamutuwu tidzagwiritsa ntchito Phunzirani, yomwe, mwa lingaliro langa, ili yoyenera kwambiri pa malo olembedwa.
FROM alpine:3.11 as builder
ARG HUGO_VERSION=0.62.0
RUN wget -O- https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_linux-64bit.tar.gz | tar -xz -C /usr/local/bin
ADD . /src
RUN hugo -s /src
FROM alpine:3.11
RUN apk add --no-cache darkhttpd
COPY --from=builder /src/public /var/www
ENTRYPOINT [ "/usr/bin/darkhttpd" ]
CMD [ "/var/www" ]
Monga mukuwonera, Dockerfile ili ndi ziwiri Kuchokera, mbali iyi imatchedwa kumanga kwamasitepe ambiri ndikukulolani kuti muchotse chilichonse chosafunikira pa chithunzi chomaliza cha Docker.
Motero, chithunzi chomaliza chidzakhala ndi mdimahttpd (seva ya HTTP yopepuka) ndi pagulu/ - zomwe zili patsamba lathu lopangidwa mokhazikika.
Musaiwale kupanga zosintha zathu:
git add dockerfiles/website
git commit -m "Add Dockerfile for website"
3. Kudziwa kaniko
Monga wopanga zithunzi za docker, ndinaganiza zogwiritsa ntchito kodi, popeza ntchito yake sikutanthauza docker daemon, ndi kumanga palokha akhoza kuchitidwa pa makina aliwonse ndi posungira akhoza kusungidwa mwachindunji mu kaundula, potero kuchotsa kufunika kosungira zonse mosalekeza.
Kuti mupange chithunzicho, ingoyendetsani chidebecho ndi kaniko executor ndikuupereka zomwe zikuchitika pano; izi zitha kuchitikanso kwanuko, kudzera pa docker:
Kumeneko registry.gitlab.com/kvaps/docs.example.org/website - dzina lachithunzi chanu cha docker; mukamanga, idzakhazikitsidwa yokha ku registry ya docker.
chizindikiro --cache amakulolani kuti musungitse zigawo mu registry ya docker; mwachitsanzo, adzapulumutsidwa registry.gitlab.com/kvaps/docs.example.org/website/cache, koma mutha kufotokoza njira ina pogwiritsa ntchito parameter --cache-repo.
Chithunzi cha docker-registry
4. Kudziwana ndi qbec
Qbec ndi chida chotumizira chomwe chimakupatsani mwayi wofotokozera momveka bwino zowonetsera zanu ndikuzitumiza ku Kubernetes. Kugwiritsira ntchito Jsonnet monga mawu akuluakulu amakulolani kuti muchepetse kufotokozera kusiyana pakati pa malo angapo, komanso kuthetseratu kubwereza kachidindo.
Apa timakonda kwambiri spec.environments, qbec yatipangira kale malo osasinthika ndipo idatenga adilesi ya seva, komanso malo a mayina kuchokera ku kubeconfig yathu yamakono.
Tsopano potumiza ku chosasintha chilengedwe, qbec nthawi zonse idzatumizidwa ku gulu la Kubernetes lotchulidwa ndi malo omwe atchulidwa, ndiye kuti, simukuyeneranso kusinthana pakati pa zochitika ndi malo a mayina kuti mugwiritse ntchito.
Ngati ndi kotheka, mutha kusintha zosintha mufayiloyi nthawi zonse.
Malo anu onse akufotokozedwa qbec.yaml, ndi mu fayilo params.libsonnet, pomwe pakunena komwe angawapezere magawo awo.
Kenako tikuwona mitundu iwiri:
zigawo/ - zowonetsera zonse za pulogalamu yathu zidzasungidwa pano; zitha kufotokozedwa mu jsonnet ndi mafayilo aml wamba
malo/ - apa tifotokoza zosintha zonse (magawo) am'malo athu.
Mwachikhazikitso tili ndi mafayilo awiri:
chilengedwe/base.libsonnet - idzakhala ndi magawo ofanana m'malo onse
Environments/default.libsonnet - ili ndi magawo omwe amachotsedwa pa chilengedwe chosasintha
tiyeni titsegule chilengedwe/base.libsonnet ndikuwonjezera magawo a gawo lathu loyamba pamenepo:
Mufayilo iyi tidafotokozera mabungwe atatu a Kubernetes nthawi imodzi, awa ndi: Kutumizidwa, Service и Ingress. Ngati tifuna, titha kuziyika m'zigawo zosiyanasiyana, koma panthawiyi imodzi ikhala yokwanira kwa ife.
cd ../..
git add deploy/website
git commit -m "Add deploy for website"
5. Kuyesa Gitlab-runner ndi Kubernetes-executor
Mpaka posachedwa ndimangogwiritsa ntchito nthawi zonse gitlab-wothamanga pa makina okonzekeratu (chidebe cha LXC) chokhala ndi chipolopolo kapena docker-executor. Poyambirira, tinali ndi othamanga angapo otere omwe amafotokozedwa padziko lonse lapansi mu gitlab yathu. Adasonkhanitsa zithunzi za docker pama projekiti onse.
Koma monga momwe zasonyezera, njirayi si yabwino kwambiri, ponseponse pokhudzana ndi zochitika ndi chitetezo. Ndikwabwinoko komanso kolondola kwambiri kukhala ndi othamanga osiyana pa projekiti iliyonse, kapenanso malo aliwonse.
Mwamwayi, ili si vuto konse, popeza tsopano titumiza gitlab-wothamanga molunjika ngati gawo la polojekiti yathu ku Kubernetes.
Gitlab imapereka tchati cha helm chokonzekera kutumiza gitlab-runner ku Kubernetes. Ndiye zomwe muyenera kuchita ndikupeza chizindikiro cholembetsa kwa polojekiti yathu Zokonda -> CI / CD -> Othamanga ndi kuchipereka kwa wotsogolera:
Popeza tinaganiza zoganizira gitlab-wothamanga gawo la polojekiti yathu, yakwana nthawi yoti tifotokoze m'nkhokwe yathu ya Git.
Titha kuzifotokoza ngati chigawo chosiyana webusaiti, koma mtsogolomu tikukonza zotumiza makope osiyanasiyana webusaiti nthawi zambiri, mosiyana gitlab-wothamanga, yomwe idzatumizidwa kamodzi kokha pa gulu la Kubernetes. Chifukwa chake tiyeni tiyambitse pulogalamu ina yake:
cd deploy
qbec init gitlab-runner
cd gitlab-runner
Nthawi ino sitidzafotokozera mabungwe a Kubernetes pamanja, koma titenga tchati cha Helm chokonzekera. Chimodzi mwazabwino za qbec ndikutha kupereka ma chart a Helm mwachindunji kuchokera kunkhokwe ya Git.
Tidzawonjezera ma tag nthawi iliyonse yomwe tikufuna kutulutsa mtundu watsopano. Ma tag muzithunzi za Docker adzamangiriridwa ku ma tag a Git. Kukankha kulikonse komwe kuli ndi tag yatsopano kudzayambitsa kupanga zithunzi ndi tag iyi.
Ndikoyenera kukuwonetsani kuti kusonkhana ndi ma tag ndikoyenera kumanga zithunzi za docker, koma sikoyenera kutumiza ku Kubernetes. Popeza ma tag atsopano atha kuperekedwa kwa mabizinesi akale, pakadali pano, kuyambitsa mapaipi awo kudzatsogolera kutumizidwa kwa mtundu wakale.
Kuti athetse vutoli, nthawi zambiri mapangidwe a zithunzi za docker amamangiriridwa ku ma tag, ndipo kutumizidwa kwa ntchito ku nthambi. mbuye, momwe mitundu ya zithunzi zomwe zasonkhanitsidwa ndi hardcode. Apa ndipamene mutha kuyambitsa kubweza ndi kubwereranso kosavuta mbuye-nthambi.
Chonde dziwani kuti tawonjezera ulusi mbuye к refs za ntchito build_website ndipo tikugwiritsa ntchito $CI_COMMIT_REF_NAME mmalo mwa $CI_COMMIT_TAG, ndiye kuti, tamasulidwa ku ma tag ku Git ndipo tsopano tidzakankhira chithunzi chokhala ndi dzina la nthambi yodzipereka yomwe idayambitsa mapaipi. Ndizofunikira kudziwa kuti izi zigwiranso ntchito ndi ma tag, zomwe zitilola kuti tisunge zithunzi za tsamba lomwe lili ndi mtundu wina mu docker-registry.
Pamene dzina la chizindikiro cha docker la mtundu watsopano watsambalo silingasinthidwe, tiyenerabe kufotokoza zosintha za Kubernetes, apo ayi sizidzangoyikanso ntchito kuchokera pachithunzi chatsopano, chifukwa sichidzawona kusintha kulikonse mu chiwonetsero cha kutumiza.
Apa tithandizidwa ndi luso la Kaniko losunga chithunzi cha digest ku fayilo (njira --digest-file)
Kenako tidzasamutsa fayiloyi ndikuyiwerenga panthawi yotumiza.
Tikuwona njira yatsopano ya qbec: --app-tag - imakulolani kuti muyike mitundu yomwe yatumizidwa ndikugwira ntchito mkati mwa tag iyi; popanga ndikuwononga zinthu ku Kubernetes, qbec imagwira ntchito ndi iwo okha.
Mwanjira iyi sitingathe kupanga malo osiyana pazowunikira zilizonse, koma kungogwiritsanso ntchito zomwezo.
Apa timagwiritsanso ntchito qbec gwiritsani ntchito ndemanga, m'malo mwa qbec gwiritsani ntchito kusakhazikika - ino ndiyo nthawi yomwe tidzayesa kufotokoza kusiyana kwa malo athu (kuwunika ndi kusasintha):
Onjezani review chilengedwe mu deploy/website/qbec.yaml
Ndiye ife tizilengeza izo mu deploy/website/params.libsonnet:
local env = std.extVar('qbec.io/env');
local paramsMap = {
_: import './environments/base.libsonnet',
default: import './environments/default.libsonnet',
review: import './environments/review.libsonnet',
};
if std.objectHas(paramsMap, env) then paramsMap[env] else error 'environment ' + env + ' not defined in ' + std.thisFile
Ndipo lembani ma parameters okhazikika pa izo deploy/website/environments/review.libsonnet:
// this file has the param overrides for the default environment
local base = import './base.libsonnet';
local slug = std.extVar('qbec.io/tag');
local subdomain = std.extVar('subdomain');
base {
components+: {
website+: {
name: 'example-docs-' + slug,
domain: subdomain + '.docs.example.org',
},
},
}
Tiyeninso tione bwinobwino za jobu stop_review, zidzayambika nthambi ikachotsedwa ndipo kuti gitlab isayese kuyesa kuti igwiritsidwe ntchito GIT_STRATEGY: palibe, kenako timapangana mbuye-nthambi ndi kuchotsa ndemanga kudzera izo.
Ndizosokoneza pang'ono, koma sindinapeze njira yokongola kwambiri.
Njira ina ingakhale kutumiza ndemanga iliyonse ku malo a hotelo, omwe angathe kuthetsedwa nthawi zonse.