ProHoster > Блог > Isakoso > Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes
Gbiyanju awọn irinṣẹ tuntun fun kikọ ati imuṣiṣẹ adaṣe adaṣe ni Kubernetes
Pẹlẹ o! Laipẹ, ọpọlọpọ awọn irinṣẹ adaṣe itura ni a ti tu silẹ mejeeji fun kikọ awọn aworan Docker ati fun imuṣiṣẹ si Kubernetes. Ni iyi yii, Mo pinnu lati ṣere ni ayika pẹlu GitLab, ṣe iwadi awọn agbara rẹ daradara ati, nitorinaa, ṣeto opo gigun ti epo.
Iṣẹ yii jẹ atilẹyin nipasẹ oju opo wẹẹbu kubernetes.io, eyi ti o ti ipilẹṣẹ lati awọn koodu orisun laifọwọyi, ati fun kọọkan pool ìbéèrè rán, awọn robot laifọwọyi ina kan awotẹlẹ ti ikede awọn ojula pẹlu rẹ ayipada ati ki o pese ọna asopọ kan fun wiwo.
Mo gbiyanju lati kọ ilana ti o jọra lati ibere, ṣugbọn ti a kọ patapata lori Gitlab CI ati awọn irinṣẹ ọfẹ ti Mo lo lati lo awọn ohun elo si Kubernetes. Loni Emi yoo nipari sọ fun ọ diẹ sii nipa wọn.
Nkan naa yoo jiroro lori awọn irinṣẹ bii: Hugo, qbec, kaniko, git-crypt и GitLab CI pẹlu awọn ẹda ti ìmúdàgba ayika.
Gẹgẹbi apẹẹrẹ ti iṣẹ akanṣe wa, a yoo gbiyanju lati ṣẹda aaye titẹjade iwe ti a ṣe lori Hugo. Hugo jẹ olupilẹṣẹ akoonu aimi.
Fun awọn ti ko mọ pẹlu awọn olupilẹṣẹ aimi, Emi yoo sọ fun ọ diẹ sii nipa wọn. Ko dabi awọn ẹrọ oju opo wẹẹbu ti aṣa pẹlu data data kan ati diẹ ninu PHP, eyiti, nigbati olumulo kan ba beere, ṣe awọn oju-iwe lori fo, awọn olupilẹṣẹ aimi jẹ apẹrẹ ni iyatọ diẹ. Wọn gba ọ laaye lati mu awọn orisun, nigbagbogbo ṣeto awọn faili ni isamisi Markdown ati awọn awoṣe akori, lẹhinna ṣajọ wọn sinu oju opo wẹẹbu ti pari patapata.
Iyẹn ni, bi abajade, iwọ yoo gba ilana ilana kan ati ṣeto awọn faili HTML ti ipilẹṣẹ, eyiti o le nirọrun gbejade si eyikeyi alejo gbigba olowo poku ati gba oju opo wẹẹbu ṣiṣẹ.
O le fi Hugo sori agbegbe ati gbiyanju rẹ:
Bibẹrẹ aaye tuntun kan:
hugo new site docs.example.org
Ati ni akoko kanna ibi ipamọ git:
cd docs.example.org
git init
Titi di isisiyi, aaye wa jẹ pristine ati pe ki ohun kan le han lori rẹ, a nilo akọkọ lati sopọ akori kan; akori kan jẹ eto awọn awoṣe nikan ati awọn ofin pato nipasẹ eyiti o jẹ ipilẹṣẹ aaye wa.
Fun akori ti a yoo lo Mọ, eyi ti, ni ero mi, ni ibamu daradara fun aaye iwe-ipamọ.
Emi yoo fẹ lati san ifojusi pataki si otitọ pe a ko nilo lati ṣafipamọ awọn faili akori ninu ibi ipamọ iṣẹ akanṣe wa; dipo, a le sopọ nirọrun ni lilo git submodule:
Nitorinaa, ibi ipamọ wa yoo ni awọn faili nikan ti o ni ibatan taara si iṣẹ akanṣe wa, ati pe akori ti o sopọ yoo wa bi ọna asopọ si ibi ipamọ kan pato ati adehun ninu rẹ, iyẹn ni, o le fa nigbagbogbo lati orisun atilẹba ati ki o ma bẹru ti aisedede ayipada.
Jẹ ki a ṣe atunṣe atunto naa config.toml:
baseURL = "http://docs.example.org/"
languageCode = "en-us"
title = "My Docs Site"
theme = "learn"
Tẹlẹ ni ipele yii o le ṣiṣẹ:
hugo server
Ati ni adirẹsi http://localhost:1313/ ṣayẹwo oju opo wẹẹbu tuntun ti a ṣẹda, gbogbo awọn ayipada ti a ṣe ninu itọsọna ṣe imudojuiwọn oju-iwe ṣiṣi laifọwọyi ni ẹrọ aṣawakiri, rọrun pupọ!
Jẹ ká gbiyanju lati ṣẹda kan ideri iwe ni akoonu / _index.md:
# My docs site
## Welcome to the docs!
You will be very smart :-)
Sikirinifoto ti oju-iwe tuntun ti a ṣẹda
Lati ṣẹda aaye kan, kan ṣiṣẹ:
hugo
Awọn akoonu liana gbangba / ati pe yoo jẹ oju opo wẹẹbu rẹ.
Bẹẹni, nipasẹ ọna, jẹ ki a fi kun lẹsẹkẹsẹ .gitignore:
echo /public > .gitignore
Maṣe gbagbe lati ṣe awọn ayipada wa:
git add .
git commit -m "New site created"
2. Ngbaradi Dockerfile
O to akoko lati setumo ọna ti ibi ipamọ wa. Mo maa n lo nkan bii:
dockerfiles/ - ni awọn ilana pẹlu Dockerfiles ati ohun gbogbo pataki fun kikọ awọn aworan Docker wa.
ran lọwọ/ - ni awọn ilana fun gbigbe awọn ohun elo wa si Kubernetes
Nitorinaa, a yoo ṣẹda Dockerfile akọkọ wa ni ọna naa dockerfiles / aaye ayelujara / Dockerfile
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" ]
Bi o ti le rii, Dockerfile ni meji ninu LATI, anfani yi ni a npe ni olona-ipele kọ ati gba ọ laaye lati yọkuro ohun gbogbo ti ko wulo lati aworan Docker ikẹhin.
Nitorinaa, aworan ikẹhin yoo ni ninu nikan duduhttpd (lightweight olupin HTTP) ati gbangba / - akoonu ti oju opo wẹẹbu wa ti ipilẹṣẹ.
Maṣe gbagbe lati ṣe awọn ayipada wa:
git add dockerfiles/website
git commit -m "Add Dockerfile for website"
3. Ngba lati mọ kaniko
Gẹgẹbi olupilẹṣẹ aworan docker, Mo pinnu lati lo kanikoNiwọn igba ti iṣiṣẹ rẹ ko nilo daemon docker kan, ati pe o le kọ funrararẹ le ṣee ṣe lori ẹrọ eyikeyi ati pe kaṣe le wa ni ipamọ taara ni iforukọsilẹ, nitorinaa imukuro iwulo lati ni ibi ipamọ itẹramọṣẹ ni kikun.
Lati kọ aworan naa, kan ṣiṣe apoti naa pẹlu kaniko executor ki o si kọja ni ayika kikọ lọwọlọwọ; eyi tun le ṣee ṣe ni agbegbe, nipasẹ docker:
Nibo registry.gitlab.com/kvaps/docs.example.org/website - orukọ aworan docker rẹ; lẹhin ile, yoo ṣe ifilọlẹ laifọwọyi sinu iforukọsilẹ docker.
Apaadi -- kaṣe gba ọ laaye lati kaṣe awọn fẹlẹfẹlẹ ni iforukọsilẹ docker; fun apẹẹrẹ ti a fun, wọn yoo wa ni fipamọ ni registry.gitlab.com/kvaps/docs.example.org/website/cache, ṣugbọn o le pato ona miiran nipa lilo paramita --cache-repo.
Sikirinifoto ti docker-registry
4. Ngba lati mọ qbec
Qbec jẹ ohun elo imuṣiṣẹ ti o fun ọ laaye lati ṣapejuwe asọye ohun elo rẹ ṣafihan ati gbe wọn lọ si Kubernetes. Lilo Jsonnet gẹgẹbi sintasi akọkọ n gba ọ laaye lati jẹ ki o rọrun pupọ apejuwe awọn iyatọ kọja awọn agbegbe pupọ, ati pe o fẹrẹ yọkuro atunwi koodu patapata.
Eyi le jẹ otitọ paapaa ni awọn ọran nibiti o nilo lati fi ohun elo ranṣẹ si ọpọlọpọ awọn iṣupọ pẹlu awọn aye oriṣiriṣi ati fẹ lati ṣe apejuwe wọn ni asọye ni Git.
Qbec tun gba ọ laaye lati ṣe awọn shatti Helm nipa gbigbe wọn awọn aye pataki ati lẹhinna ṣiṣẹ wọn ni ọna kanna bi awọn ifihan deede, pẹlu o le lo ọpọlọpọ awọn iyipada si wọn, ati pe eyi, ni ọna, gba ọ laaye lati yọ iwulo kuro. lo ChartMuseum. Iyẹn ni, o le fipamọ ati ṣe awọn shatti taara lati git, nibiti wọn wa.
Gẹgẹbi Mo ti sọ tẹlẹ, a yoo tọju gbogbo awọn imuṣiṣẹ sinu itọsọna kan ran lọwọ/:
Nibi ti a ba wa nipataki nife ninu spec.awọn agbegbe, qbec ti ṣẹda agbegbe aiyipada tẹlẹ fun wa ati mu adirẹsi olupin naa, bakanna bi aaye orukọ lati kubeconfig lọwọlọwọ wa.
Bayi nigbati ransogun si aiyipada ayika, qbec yoo ma gbe lọ nigbagbogbo si iṣupọ Kubernetes ti a sọ pato ati si aaye orukọ ti a sọ, iyẹn ni, iwọ ko ni lati yipada laarin awọn aaye ati awọn aaye orukọ lati le ṣe imuṣiṣẹ kan.
Ti o ba jẹ dandan, o le ṣe imudojuiwọn awọn eto nigbagbogbo ninu faili yii.
Gbogbo awọn agbegbe rẹ ni a ṣe apejuwe ninu qbec.yaml, ati ninu faili params.libsonnet, ibi ti o ti sọ ibi ti lati gba awọn paramita fun wọn.
Nigbamii ti a ri awọn ilana meji:
irinše/ - gbogbo awọn ifihan fun ohun elo wa yoo wa ni ipamọ nibi; wọn le ṣe apejuwe mejeeji ni jsonnet ati awọn faili yaml deede
awọn agbegbe / - nibi a yoo ṣe apejuwe gbogbo awọn oniyipada (awọn paramita) fun awọn agbegbe wa.
Nipa aiyipada a ni awọn faili meji:
ayika/base.libsonnet - yoo ni awọn paramita ti o wọpọ fun gbogbo awọn agbegbe
ayika/default.libsonnet - ni awọn paramita ti o bori fun ayika aiyipada
jẹ ki a ṣii ayika/base.libsonnet ati ṣafikun awọn paramita fun paati akọkọ wa nibẹ:
Ninu faili yii a ṣe apejuwe awọn nkan Kubernetes mẹta ni ẹẹkan, iwọnyi ni: imuṣiṣẹ, Service и Ingress. Ti a ba fẹ, a le fi wọn sinu awọn ẹya oriṣiriṣi, ṣugbọn ni ipele yii ọkan yoo to fun wa.
Syntax jsonnet jọra pupọ si json deede, ni ipilẹ, json deede ti wulo jsonnet, nitorinaa ni akọkọ o le rọrun fun ọ lati lo awọn iṣẹ ori ayelujara bii yaml2json lati yi yaml rẹ deede pada si json, tabi, ti awọn paati rẹ ko ba ni awọn oniyipada eyikeyi ninu, lẹhinna wọn le ṣe apejuwe ni irisi yaml deede.
Nigbati o ba n ṣiṣẹ pẹlu jsonnet Mo ṣeduro gíga fifi ohun itanna sori ẹrọ fun olootu rẹ
Fun apẹẹrẹ, ohun itanna kan wa fun vim vim-jsonnet, eyi ti o tan-an sintasi afihan ati ki o ṣiṣẹ laifọwọyi jsonnet fmt ni gbogbo igba ti o ba fipamọ (nilo jsonnet fi sori ẹrọ).
Ohun gbogbo ti ṣetan, bayi a le bẹrẹ imuṣiṣẹ:
Lati wo ohun ti a ni, jẹ ki a sare:
qbec show default
Ni iṣẹjade, iwọ yoo rii awọn ifihan yaml ti a ṣe afihan ti yoo lo si iṣupọ aiyipada.
Nla, ni bayi lo:
qbec apply default
Ni iṣelọpọ iwọ yoo rii nigbagbogbo ohun ti yoo ṣee ṣe ninu iṣupọ rẹ, qbec yoo beere lọwọ rẹ lati gba awọn ayipada nipa titẹ y iwọ yoo ni anfani lati jẹrisi awọn ero rẹ.
Ohun elo wa ti šetan ati ransogun!
Ti o ba ṣe awọn ayipada, o le ṣe nigbagbogbo:
qbec diff default
lati wo bi awọn ayipada wọnyi yoo ṣe ni ipa lori imuṣiṣẹ lọwọlọwọ
Maṣe gbagbe lati ṣe awọn ayipada wa:
cd ../..
git add deploy/website
git commit -m "Add deploy for website"
Titi di aipẹ Mo lo deede nikan gitlab-olusare lori ẹrọ ti a ti pese tẹlẹ (eiyan LXC) pẹlu ikarahun tabi docker-executor. Ni ibẹrẹ, a ni ọpọlọpọ iru awọn asare ni agbaye ni asọye ni gitlab wa. Wọn gba awọn aworan docker fun gbogbo awọn iṣẹ akanṣe.
Ṣugbọn gẹgẹbi iṣe ti fihan, aṣayan yii kii ṣe apẹrẹ julọ, mejeeji ni awọn ofin ti ilowo ati ailewu. O dara pupọ julọ ati pe o tọ ni imọran diẹ sii lati ni awọn asare lọtọ ti a gbe lọ fun iṣẹ akanṣe kọọkan, tabi paapaa fun agbegbe kọọkan.
Da, yi ni ko kan isoro ni gbogbo, niwon bayi a yoo ran awọn gitlab-olusare taara gẹgẹbi apakan ti iṣẹ akanṣe wa ni ọtun Kubernetes.
Gitlab n pese iwe apẹrẹ Helm ti o ti ṣetan fun gbigbe gitlab-runner si Kubernetes. Nitorinaa gbogbo ohun ti o nilo lati ṣe ni wiwa ìforúkọsílẹ àmi fun ise agbese wa ni Eto -> CI / CD -> Awọn asare ki o si fi si Helm:
yga8y-jdCusVDn_t4Wxc - aami ìforúkọsílẹ fun ise agbese rẹ.
rbac.create=otitọ - pese olusare pẹlu iye pataki ti awọn anfani lati ni anfani lati ṣẹda awọn adarọ-ese lati ṣe awọn iṣẹ ṣiṣe wa nipa lilo kubernetes-executor.
Ti ohun gbogbo ba ṣe ni deede, o yẹ ki o wo olusare ti o forukọsilẹ ni apakan Awọn aṣaju, ninu rẹ ise agbese eto.
Sikirinifoto ti olusare ti a ṣafikun
Ṣe o rọrun bi? - Bẹẹni, o rọrun! Ko si wahala diẹ sii pẹlu awọn asare fiforukọṣilẹ pẹlu ọwọ, lati isisiyi lọ awọn aṣaju yoo ṣẹda ati run laifọwọyi.
6. Ran awọn Helm shatti pẹlu QBEC
Niwon a pinnu lati ro gitlab-olusare apakan ti iṣẹ akanṣe wa, o to akoko lati ṣapejuwe rẹ ni ibi ipamọ Git wa.
A le ṣe apejuwe rẹ gẹgẹbi paati lọtọ aaye ayelujara, ṣugbọn ni ojo iwaju a gbero lati ran awọn oriṣiriṣi awọn ẹda aaye ayelujara gan igba, ko gitlab-olusare, eyi ti yoo wa ni ransogun ni ẹẹkan fun Kubernetes iṣupọ. Nitorinaa jẹ ki a bẹrẹ ohun elo lọtọ fun rẹ:
cd deploy
qbec init gitlab-runner
cd gitlab-runner
Ni akoko yii a kii yoo ṣapejuwe awọn nkan Kubernetes pẹlu ọwọ, ṣugbọn yoo gba iwe-aṣẹ Helm ti o ti ṣetan. Ọkan ninu awọn anfani ti qbec ni agbara lati ṣe awọn shatti Helm taara lati ibi ipamọ Git kan.
Bayi liana ataja / gitlab-olusare A ni ibi ipamọ kan pẹlu chart fun gitlab-runner.
Ni ọna kanna, o le sopọ awọn ibi ipamọ miiran, fun apẹẹrẹ, gbogbo ibi ipamọ pẹlu awọn shatti osise https://github.com/helm/charts
Jẹ ki a ṣe apejuwe paati naa irinše / gitlab-runner.jsonnet:
local env = {
name: std.extVar('qbec.io/env'),
namespace: std.extVar('qbec.io/defaultNs'),
};
local p = import '../params.libsonnet';
local params = p.components.gitlabRunner;
std.native('expandHelmTemplate')(
'../vendor/gitlab-runner',
params.values,
{
nameTemplate: params.name,
namespace: env.namespace,
thisFile: std.thisFile,
verbose: true,
}
)
Ni igba akọkọ ti ariyanjiyan to faagunHelmTemplate a kọja ọna si chart, lẹhinna params.iye, eyi ti a mu lati awọn paramita ayika, lẹhinna o wa ohun elo pẹlu
orukọ Àdàkọ - Tu akọle
orukọ orukọ - namespace gbe si Helm
Faili yii - paramita ti o nilo ti o kọja ọna si faili lọwọlọwọ
ọrọ-ọrọ - fihan aṣẹ Helm awoṣe pẹlu gbogbo awọn ariyanjiyan nigba ti o nṣe chart
Bayi jẹ ki a ṣe apejuwe awọn paramita fun paati wa ninu ayika/base.libsonnet:
Ṣugbọn titoju awọn aṣiri ni Git kii ṣe ailewu, ṣe? Nitorina a nilo lati encrypt wọn daradara.
Nigbagbogbo, nitori iyipada kan, eyi kii ṣe oye nigbagbogbo. O le gbe awọn asiri si qbec ati nipasẹ awọn oniyipada ayika ti eto CI rẹ.
Ṣugbọn o tọ lati ṣe akiyesi pe awọn iṣẹ akanṣe diẹ sii tun wa ti o le ni ọpọlọpọ awọn aṣiri diẹ sii; gbigbe gbogbo wọn nipasẹ awọn oniyipada ayika yoo nira pupọju.
Pẹlupẹlu, ninu ọran yii Emi kii yoo ni anfani lati sọ fun ọ nipa iru irinṣẹ iyanu bii git-crypt.
git-crypt O tun rọrun ni pe o gba ọ laaye lati ṣafipamọ gbogbo itan-akọọlẹ ti awọn aṣiri, bakanna bi afiwe, dapọ ati yanju awọn ija ni ọna kanna bi a ti lo lati ṣe ninu ọran Git.
Ohun akọkọ lẹhin fifi sori ẹrọ git-crypt a nilo lati ṣe ina awọn bọtini fun ibi ipamọ wa:
git crypt init
Ti o ba ni bọtini PGP kan, lẹhinna o le ṣafikun ararẹ lẹsẹkẹsẹ gẹgẹbi alabaṣiṣẹpọ fun iṣẹ akanṣe yii:
Ni ọna yii o le ṣe ipiti ibi ipamọ yii nigbagbogbo nipa lilo bọtini ikọkọ rẹ.
Ti o ko ba ni bọtini PGP kan ati pe o ko nireti, lẹhinna o le lọ si ọna miiran ki o si okeere bọtini ise agbese:
git crypt export-key /path/to/keyfile
Bayi, ẹnikẹni ti o ni ohun okeere bọtini faili yoo ni anfani lati decrypt rẹ ibi ipamọ.
O to akoko lati ṣeto aṣiri akọkọ wa.
Jẹ ki n ran ọ leti pe a tun wa ninu iwe ilana naa ransogun/gitlab-olusare/, ibi ti a ti ni a liana asiri/, jẹ ki a encrypt gbogbo awọn faili ti o wa ninu rẹ, fun eyi a yoo ṣẹda faili kan asiri / .gitattributes pẹlu akoonu wọnyi:
Bi o ṣe le rii lati inu akoonu, gbogbo awọn faili ti wa ni boju-boju * yoo wa ni ìṣó nipasẹ git-crypt, ayafi fun julọ .gitattributes
A le ṣayẹwo eyi nipa ṣiṣe:
git crypt status -e
Ijade yoo jẹ atokọ ti gbogbo awọn faili ti o wa ninu ibi ipamọ fun eyiti fifi ẹnọ kọ nkan ṣiṣẹ
Iyẹn ni gbogbo rẹ, ni bayi a le ṣe awọn ayipada wa lailewu:
cd ../..
git add .
git commit -m "Add deploy for gitlab-runner"
Lati dina ibi ipamọ kan, kan ṣiṣẹ:
git crypt lock
ati lẹsẹkẹsẹ gbogbo awọn faili ti paroko yoo yipada si nkan alakomeji, kii yoo ṣee ṣe lati ka wọn.
Lati yọkuro ibi ipamọ, ṣiṣẹ:
git crypt unlock
8. Ṣẹda aworan apoti irinṣẹ
Aworan apoti irinṣẹ jẹ aworan pẹlu gbogbo awọn irinṣẹ ti a yoo lo lati ran iṣẹ akanṣe wa lọ. Yoo jẹ lilo nipasẹ olusare Gitlab lati ṣe awọn iṣẹ ṣiṣe imuṣiṣẹ aṣoju.
Ohun gbogbo rọrun nibi, jẹ ki a ṣẹda tuntun kan dockerfiles / apoti irinṣẹ / Dockerfile pẹlu akoonu wọnyi:
FROM alpine:3.11
RUN apk add --no-cache git git-crypt
RUN QBEC_VER=0.10.3
&& wget -O- https://github.com/splunk/qbec/releases/download/v${QBEC_VER}/qbec-linux-amd64.tar.gz
| tar -C /tmp -xzf -
&& mv /tmp/qbec /tmp/jsonnet-qbec /usr/local/bin/
RUN KUBECTL_VER=1.17.0
&& wget -O /usr/local/bin/kubectl
https://storage.googleapis.com/kubernetes-release/release/v${KUBECTL_VER}/bin/linux/amd64/kubectl
&& chmod +x /usr/local/bin/kubectl
RUN HELM_VER=3.0.2
&& wget -O- https://get.helm.sh/helm-v${HELM_VER}-linux-amd64.tar.gz
| tar -C /tmp -zxf -
&& mv /tmp/linux-amd64/helm /usr/local/bin/helm
Bi o ti le rii, ni aworan yii a fi gbogbo awọn ohun elo ti a lo lati fi ohun elo wa sori ẹrọ. A ko nilo rẹ nibi ayafi kubectl, ṣugbọn o le fẹ lati mu ṣiṣẹ ni ayika pẹlu rẹ lakoko iṣeto opo gigun ti epo.
Pẹlupẹlu, lati ni anfani lati ṣe ibaraẹnisọrọ pẹlu Kubernetes ki o si fi ranṣẹ si, a nilo lati tunto ipa kan fun awọn pods ti ipilẹṣẹ nipasẹ gitlab-runner.
Lati ṣe eyi, jẹ ki a lọ si liana pẹlu gitlab-runner:
Mo ro pe a le lailewu pe yi a ti ikede v0.0.1 ki o si fi aami sii:
git tag v0.0.1
A yoo ṣafikun awọn afi nigbakugba ti a nilo lati tu ẹya tuntun kan silẹ. Awọn afi ni awọn aworan Docker yoo so mọ awọn afi Git. Titari kọọkan pẹlu aami tuntun yoo ṣe ipilẹṣẹ kikọ awọn aworan pẹlu aami yii.
Jẹ ká ṣe o git titari --tags, ati pe jẹ ki a wo opo gigun ti epo akọkọ wa:
Sikirinifoto ti opo gigun ti epo akọkọ
O tọ lati fa ifojusi rẹ si otitọ pe apejọ nipasẹ awọn afi jẹ o dara fun kikọ awọn aworan docker, ṣugbọn ko dara fun gbigbe ohun elo kan si Kubernetes. Niwọn igba ti awọn aami tuntun le ṣe sọtọ si awọn adehun atijọ, ninu ọran yii, ipilẹṣẹ opo gigun ti epo fun wọn yoo yorisi imuṣiṣẹ ti ẹya atijọ.
Lati yanju iṣoro yii, igbagbogbo kikọ awọn aworan docker ti so si awọn afi, ati imuṣiṣẹ ohun elo si ẹka kan titunto si, ninu eyiti awọn ẹya ti awọn aworan ti a gbajọ jẹ koodu lile. Eyi ni ibiti o ti le ṣe ipilẹṣẹ yiyi pada pẹlu iyipada ti o rọrun titunto si-awọn ẹka.
10. Adaṣiṣẹ ti imuṣiṣẹ
Ni ibere fun olusare Gitlab lati sọ awọn aṣiri wa silẹ, a yoo nilo lati okeere bọtini ibi ipamọ ati ṣafikun si awọn oniyipada agbegbe CI wa:
Nibi a ti mu ọpọlọpọ awọn aṣayan titun ṣiṣẹ fun qbec:
--root diẹ ninu awọn/app - gba ọ laaye lati pinnu itọsọna ti ohun elo kan pato
--agbara: k8s-o tọ __incluster__ - eyi jẹ oniyipada idan ti o sọ pe imuṣiṣẹ yoo waye ni iṣupọ kanna ninu eyiti gtilab-runner nṣiṣẹ. Eyi jẹ pataki nitori bibẹẹkọ qbec yoo gbiyanju lati wa olupin Kubernetes ti o yẹ ninu kubeconfig rẹ
--duro - fi agbara mu qbec lati duro titi awọn orisun ti o ṣẹda yoo lọ sinu ipo Ṣetan ati pe lẹhinna jade nikan pẹlu koodu ijade aṣeyọri.
– beeni - nìkan disables ibanisọrọ ikarahun Ṣe o da ọ loju? nigba ti ransogun.
Ati lẹhin git titari a yoo rii bi a ti fi awọn ohun elo wa:
Sikirinifoto ti opo gigun ti epo keji
11. Artifacts ati ijọ nigbati titari si titunto si
Ni deede, awọn igbesẹ ti a ṣalaye loke to lati kọ ati fi jiṣẹ fere eyikeyi microservice, ṣugbọn a ko fẹ lati ṣafikun tag ni gbogbo igba ti a nilo lati ṣe imudojuiwọn aaye naa. Nitorinaa, a yoo gba ipa-ọna ti o ni agbara diẹ sii ati ṣeto imuṣiṣẹ imuṣiṣẹ ni ẹka titunto si.
Ero naa rọrun: bayi aworan ti wa aaye ayelujara yoo wa ni tun ni gbogbo igba ti o ba Titari sinu titunto si, ati lẹhinna gbe lọ laifọwọyi si Kubernetes.
Jẹ ki a ṣe imudojuiwọn awọn iṣẹ meji wọnyi ninu wa .gitlab-ci.yml:
Jọwọ ṣe akiyesi pe a ti ṣafikun okun kan titunto si к awọn atunṣe fun awọn iṣẹ build_website ati pe a lo bayi $CI_COMMIT_REF_NAME dipo $CI_COMMIT_TAG, iyẹn ni, a ti ṣii lati awọn afi ni Git ati ni bayi a yoo Titari aworan kan pẹlu orukọ ẹka ifaramọ ti o bẹrẹ opo gigun ti epo. O ṣe akiyesi pe eyi yoo tun ṣiṣẹ pẹlu awọn afi, eyi ti yoo gba wa laaye lati ṣafipamọ awọn aworan ti aaye kan pẹlu ẹya kan pato ninu iforukọsilẹ-docker.
Nigbati orukọ aami docker fun ẹya tuntun ti aaye naa le yipada, a tun ni lati ṣapejuwe awọn ayipada si Kubernetes, bibẹẹkọ kii yoo ni tunṣe ohun elo lati aworan tuntun, nitori kii yoo ṣe akiyesi eyikeyi awọn ayipada ninu ifihan ifihan.
Aṣayan —vm:ext-str digest=”$ DIGEST” fun qbec - faye gba o lati kọja ohun ita oniyipada to jsonnet. A fẹ ki o tun gbe lọ sinu iṣupọ pẹlu itusilẹ ohun elo kọọkan. A ko le lo orukọ tag mọ, eyiti o le jẹ iyipada bayi, nitori a nilo lati so mọ ẹya kan pato ti aworan naa ki o fa imuṣiṣẹ nigbati o yipada.
Nibi a yoo ṣe iranlọwọ nipasẹ agbara Kaniko lati ṣafipamọ aworan daijesti si faili kan (aṣayan --digest-faili)
Lẹhinna a yoo gbe faili yii lọ ati ka ni akoko imuṣiṣẹ.
Jẹ ki a ṣe imudojuiwọn awọn paramita fun wa ransogun / aaye ayelujara / agbegbe / base.libsonnet eyi ti yoo dabi eyi:
Ti ṣe, ni bayi eyikeyi fi sinu titunto si initializes awọn Kọ ti docker image fun aaye ayelujara, ati lẹhinna gbe lọ si Kubernetes.
Maṣe gbagbe lati ṣe awọn ayipada wa:
git add .
git commit -m "Configure dynamic build"
A yoo ṣayẹwo nigbamii git titari a yẹ ki o wo nkan bi eyi:
Sikirinifoto ti opo gigun ti epo fun oluwa
Ni opo, a ko nilo lati tun gitlab-runner ṣiṣẹ pẹlu titari kọọkan, ayafi ti, dajudaju, ko si ohun ti o yipada ninu iṣeto rẹ, jẹ ki a ṣatunṣe ni .gitlab-ci.yml:
Sikirinifoto ti opo gigun ti epo ti a ṣe imudojuiwọn
12. Ìmúdàgba ayika
O to akoko lati ṣe iyatọ opo gigun ti epo wa pẹlu awọn agbegbe ti o ni agbara.
Ni akọkọ, jẹ ki a ṣe imudojuiwọn iṣẹ naa build_website ninu wa .gitlab-ci.yml, yọ awọn Àkọsílẹ lati o nikan, eyi ti yoo fi ipa mu Gitlab lati ṣe okunfa rẹ lori eyikeyi ifaramo si eyikeyi ẹka:
Wọn yoo ṣe ifilọlẹ lori titari si eyikeyi awọn ẹka ayafi oluwa ati pe yoo ran ẹya awotẹlẹ ti aaye naa lọ.
A rii aṣayan tuntun fun qbec: --app-tag - o fun ọ laaye lati samisi awọn ẹya ti ohun elo ti a fi ranṣẹ ati ṣiṣẹ nikan laarin aami yii; nigbati o ba ṣẹda ati iparun awọn orisun ni Kubernetes, qbec yoo ṣiṣẹ pẹlu wọn nikan.
Ni ọna yii a ko le ṣẹda agbegbe lọtọ fun atunyẹwo kọọkan, ṣugbọn nirọrun tun lo ọkan kanna.
Nibi ti a tun lo qbec waye awotẹlẹ, dipo qbec waye aiyipada - Eyi ni deede akoko ti a yoo gbiyanju lati ṣapejuwe awọn iyatọ fun awọn agbegbe wa (atunyẹwo ati aiyipada):
Jẹ ki a fi kun awotẹlẹ ayika ni ransogun / aaye ayelujara / qbec.yaml
Lẹhinna a yoo kede rẹ sinu ransogun / aaye ayelujara / 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
Ki o si kọ si isalẹ awọn aṣa sile fun o ni ransogun / aaye ayelujara / agbegbe / 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',
},
},
}
Jẹ ki a tun wo iṣẹ ni pẹkipẹki stop_awotẹlẹ, yoo jẹ okunfa nigbati ẹka naa ba paarẹ ati ki gitlab ko gbiyanju lati ṣayẹwo o ti lo. GIT_STRATEGY: ko si, nigbamii a oniye titunto si- eka ati ki o pa awotẹlẹ nipasẹ o.
O jẹ airoju diẹ, ṣugbọn Emi ko rii ọna ti o lẹwa diẹ sii sibẹsibẹ.
Aṣayan miiran yoo jẹ lati mu atunyẹwo kọọkan lọ si aaye orukọ hotẹẹli kan, eyiti o le wó patapata.
Ohun gbogbo n ṣiṣẹ? - nla, paarẹ ẹka idanwo wa: titunto si isanwo git, git titari orisun: idanwo, a ṣayẹwo pe awọn iṣẹ piparẹ ayika ṣiṣẹ laisi awọn aṣiṣe.
Nibi Emi yoo fẹ lati ṣalaye lẹsẹkẹsẹ pe eyikeyi idagbasoke ninu iṣẹ akanṣe kan le ṣẹda awọn ẹka, o tun le yipada .gitlab-ci.yml faili ati wiwọle awọn oniyipada asiri.
Nitorinaa, o gba ọ niyanju lati gba lilo wọn nikan fun awọn ẹka ti o ni aabo, fun apẹẹrẹ ni titunto si, tabi ṣẹda lọtọ ṣeto ti oniyipada fun kọọkan ayika.
13. Atunwo Apps
Atunwo Apps Eyi jẹ ẹya GitLab ti o fun ọ laaye lati ṣafikun bọtini kan fun faili kọọkan ninu ibi ipamọ lati yara wo ni agbegbe ti a fi ranṣẹ.
Ni ibere fun awọn bọtini wọnyi lati han, o nilo lati ṣẹda faili kan .gitlab/ipa-map.yml ati ṣe apejuwe gbogbo awọn iyipada ọna ninu rẹ; ninu ọran wa o yoo rọrun pupọ: