Tha sinn mu thrĂ th air bruidhinn mun inneal GitOps againn barrachd air aon uair. , agus an turas seo bu mhath leinn ar n-eòlas a cho-roinn ann a bhith aâ cruinneachadh na lĂ raich le sgrĂŹobhainnean aâ phròiseict fhèin - (tha an dreach Ruiseanach aige ). Is e lĂ rach Ă bhaisteach statach a tha seo, ach tha a cho-chruinneachadh inntinneach leis gu bheil e air a thogail aâ cleachdadh Ă ireamh fiĂšghantach de stuthan.

Gabh a-steach do nuances structar na lĂ raich: cruthaich clĂ r cumanta airson a h-uile dreach, duilleagan le fiosrachadh mu sgaoilidhean, msaa. â cha bhi sinn. An Ă ite sin, leig dhuinn fòcas a chuir air cĂšisean agus feartan co-chruinneachadh fiĂšghantach agus beagan air na pròiseasan CI / CD a tha nan cois.
Ro-rĂ dh: mar a tha an lĂ rach ag obair
An toiseach, tha sgrĂŹobhainnean werf air an stòradh còmhla ris aâ chòd aige. Tha seo aâ sparradh riatanasan leasachaidh sònraichte a tha sa chumantas taobh a-muigh raon an artaigil seo, ach aig aâ char as lugha faodar a rĂ dh:
- Cha bu chòir gnĂŹomhan werf Ăšra a bhith air an leigeil ma sgaoil gun a bhith ag Ăšrachadh nan sgrĂŹobhainnean agus, air an lĂ imh eile, tha atharrachadh sam bith anns na sgrĂŹobhainnean aâ ciallachadh gun tèid dreach Ăšr de werf a leigeil ma sgaoil;
- Tha leasachadh meadhanach dian aig aâ phròiseact: faodar dreachan Ăšra fhoillseachadh grunn thursan san latha;
- Tha obair lĂ imhe sam bith airson lĂ rach a chleachdadh le dreach Ăšr de sgrĂŹobhainnean co-dhiĂš sgĂŹth;
- Tha am pròiseact aâ gabhail ri dòigh semantach , le 5 sianalan seasmhachd. Tha am pròiseas fuasglaidh a' gabhail a-steach gluasad sreathach de dhreachan tro shianalan ann an òrdugh Ă rdachadh seasmhachd: bho alpha gu creag-chruaidh;
- Tha dreach Ruiseanach air an lĂ rach, a tha âaâ fuireach agus a âleasachadhâ (ie, a tha an susbaint air Ăšrachadh) ann an co-shĂŹnte ris a âphrĂŹomh dhreach (ie, Beurla).
Gus an âcidsin a-staighâ seo fhalach bhon neach-cleachdaidh, aâ tabhann rudeigin dha a tha âdĂŹreach ag obairâ, rinn sinn inneal stĂ laidh is Ăšrachaidh werf air leth A bheil . Feumaidh tu dĂŹreach an Ă ireamh fuasglaidh agus an sianal seasmhachd a tha thu deiseil airson a chleachdadh a shònrachadh, agus nĂŹ multiwerf sgrĂšdadh a bheil dreach Ăšr air an t-sianal agus luchdaich sĂŹos e ma tha sin riatanach.
Anns aâ chlĂ r taghadh dreach air an lĂ rach-lĂŹn, tha na dreachan as Ăšire de werf rim faighinn anns gach seanal. Gu bunaiteach, le seòladh tha an dreach den t-sianal as seasmhaiche airson an fhoillseachadh as Ăšire aâ fosgladh - tha e cuideachd air a chlĂ rachadh le einnseanan luirg. Tha sgrĂŹobhainnean airson an t-seanail rim faighinn aig seòlaidhean fa leth (mar eisimpleir, airson sgaoileadh beta 1.0).
Gu h-iomlan, tha na dreachan a leanas rim faighinn air an lĂ rach:
- root (a 'fosgladh gu bunaiteach),
- airson gach sianal Ăšrachaidh gnĂŹomhach de gach brath (mar eisimpleir, ).
Gus dreach sònraichte de lĂ rach a ghineadh, san fharsaingeachd, tha e gu leòr airson a chur ri chèile a 'cleachdadh le bhith aâ ruith san eòlaire /docs òrdugh co-fhreagarrach repository werf (jekyll build), Ă s deidh dhut atharrachadh gu tag Git den dreach a tha a dhĂŹth.
Chan eil air fhĂ gail ach sin a chur ris:
- tha an goireas fhèin (werf) air a chleachdadh airson co-chruinneachadh;
- Tha pròiseasan CI / CD air an togail air bunait GitLab CI;
- agus tha seo uile, gu dearbh, a 'ruith ann an Kubernetes.
gnĂŹomhan
A-nis cruthaichidh sinn gnĂŹomhan a bheir aire do na mion-fhiosrachadh a chaidh a mhĂŹneachadh:
- Ăs deidh dhut an dreach werf atharrachadh air sianal Ăšrachadh sam bith bu chòir na sgrĂŹobhainnean air an lĂ rach Ăšrachadh gu fèin-ghluasadach.
- Airson leasachadh feumaidh tu a bhith comasach uaireannan faic dreachan ro-shealladh den lĂ rach.
Feumaidh an là rach a bhith air ath-chruinneachadh às deidh dhuinn an dreach atharrachadh air seanal sam bith bho na tagaichean Git co-fhreagarrach, ach ann am pròiseas togail an Ïomhaigh gheibh sinn na feartan a leanas:
- Leis gu bheil an liosta de dhreachan air seanalan ag atharrachadh, chan fheumar ach na sgrĂŹobhainnean ath-thogail airson seanalan far a bheil an dreach air atharrachadh. Ăs deidh na h-uile, chan eil ath-thogail a h-uile cĂ il a-rithist glè mhath.
- Faodaidh an seata de shianalan airson fiosan atharrachadh. Aig à m air choreigin, mar eisimpleir, is dòcha nach bi dreach air na seanalan nas seasmhaiche na an sgaoileadh trà th 1.1, ach thar Úine nochdaidh iad - sa chÚis seo, nach bu chòir dhut an co-chruinneachadh atharrachadh le là imh?
A rèir coltais, tha sin tha co-chruinneachadh an urra ri atharrachadh dà ta bhon taobh a-muigh.
РоаНиСаŃиŃ
A 'taghadh dòigh-obrach
Air an lĂ imh eile, faodaidh tu gach dreach riatanach a ruith mar pod air leth ann an Kubernetes. Tha an roghainn seo aâ ciallachadh Ă ireamh nas motha de nithean anns aâ chnuasach, a dhâ fhĂ sas leis an Ă rdachadh anns an Ă ireamh de sgaoilidhean sèimh seasmhach. Agus tha seo, an uair sin, aâ ciallachadh cumail suas nas iom-fhillte: tha a frithealaiche HTTP fhèin aig gach dreach, agus le eallach beag. Gu dearbh, tha seo cuideachd a 'ciallachadh cosgaisean stòrais nas Ă irde.
Ghabh sinn an aon rathad aâ cruinneachadh a h-uile dreach riatanach ann an aon ĂŹomhaigh. Tha na stats cruinnichte de gach dreach den lĂ rach suidhichte ann an soitheach le NGINX, agus thig trafaic chun chleachdadh co-fhreagarrach tro NGINX Ingress. Tha structar sĂŹmplidh - tagradh gun stĂ ite - aâ toirt cothrom dhut cleachdadh a sgèileadh gu furasta (a rèir an luchd) aâ cleachdadh Kubernetes fhèin.
Gus a bhith nas mionaidiche, tha sinn a 'tional dĂ ĂŹomhaigh: aon airson a' chuairt riochdachaidh, an dĂ rna fear a bharrachd airson a 'chuairt dev. Tha an ĂŹomhaigh a bharrachd air a chleachdadh (air a chuir air bhog) a-mhĂ in air a âchuairt dev còmhla ris aâ phrĂŹomh fhear agus tha an dreach den lĂ rach bhon ghealladh ath-bhreithneachaidh ann, agus thathas a âdèanamh slighe eatorra aâ cleachdadh goireasan Ingress.
werf vs git clone agus artifacts
Mar a chaidh ainmeachadh roimhe, gus stats lĂ raich a ghineadh airson dreach sònraichte de na sgrĂŹobhainnean, feumaidh tu togail le bhith ag atharrachadh chun taga tasgaidh iomchaidh. Dhâ fhaodadh tu seo a dhèanamh cuideachd le bhith aâ clònadh an stòr-tasgaidh gach uair a thogas tu, aâ taghadh nan tagaichean iomchaidh bho liosta. Ach, 's e obair caran dian a tha seo agus, a bharrachd air sin, feumar stiĂšireadh nach eil cho beag a sgrĂŹobhadh... Is e fĂŹor dhroch eas-bhuannachd eile nach eil dòigh ann air rudeigin a thasgadh aig Ă m co-chruinneachaidh leis an dòigh-obrach seo.
An seo thig an goireas werf fhèin gu ar cuideachadh, aâ cur an gnĂŹomh tasgadh glic agus a 'toirt cothrom dhut a chleachdadh . Le bhith aâ cleachdadh werf gus còd a chuir ris bhon stòr, luathaichidh sin an togail gu mòr, oir bidh werf gu bunaiteach aâ clonadh an stòr aon uair agus an uairsin aâ cur gu bĂ s a-mhĂ in fetch ma tha sin riatanach. A bharrachd air an sin, nuair a chuireas sinn dĂ ta bhon stòr, chan urrainn dhuinn ach na clĂ ran riatanach a thaghadh (anns aâ chĂšis againn is e seo an eòlaire docs), a lughdaicheas gu mòr an ĂŹre de dhĂ ta a bharrachd.
Leis gur e inneal a thâ ann an Jekyll a chaidh a dhealbhadh airson dĂ ta statach a chur ri chèile agus nach eil feum air san ĂŹomhaigh dheireannaich, bhiodh e loidsigeach a chruinneachadh ann an , agus san dealbh dheireannach cuir a-steach dĂŹreach an toradh cruinneachaidh.
Bidh sinn aâ sgrĂŹobhadh werf.yaml
Mar sin, cho-dhĂšin sinn gun cuireadh sinn ri chèile gach dreach ann an artifact werf air leth. Ge-tĂ , sinn chan eil fios againn cia mheud de na stuthan-obrach sin a bhios ann aig Ă m co-chruinneachadh, mar sin chan urrainn dhuinn rèiteachadh togail stèidhichte a sgrĂŹobhadh (gu daingeann aâ bruidhinn, is urrainn dhuinn fhathast, ach cha bhith e gu tur èifeachdach).
Leigidh werf leat a chleachdadh anns an fhaidhle rèiteachaidh agad (werf.yaml), agus tha seo ga dhèanamh comasach cruthaich config air an itealan a rèir dĂ ta bhon taobh a-muigh (na tha a dhĂŹth ort!). Is e dĂ ta bhon taobh a-muigh sa chĂšis againn fiosrachadh mu dhreachan agus fiosan, air a bheil sinn aâ cruinneachadh an Ă ireamh riatanach de stuthan agus mar thoradh air an sin gheibh sinn dĂ ĂŹomhaigh: werf-doc и werf-dev ruith air diofar chuairtean.
Tha dĂ ta bhon taobh a-muigh air a thoirt seachad tro chaochladairean Ă rainneachd. Seo an sgrĂŹobhadh aca:
-
RELEASES- loidhne le liosta de sgaoilidhean agus an dreach gnĂ thach co-fhreagarrach de werf, ann an cruth liosta luachan air a sgaradh le Ă ite san cruth<ĐĐĐĐĐ _Đ ĐĐĐĐĐ>%<ĐĐĐĐĐ _ĐĐĐ ĐĄĐĐ>. Eisimpleir:1.0%v1.0.4-beta.20 -
CHANNELS- loidhne le liosta de shianalan agus an dreach gnĂ thach co-fhreagarrach de werf, ann an cruth liosta luachan air a sgaradh le Ă ite anns aâ chruth<ĐĐĐĐĐ>%<ĐĐĐĐĐ _ĐĐĐ ĐĄĐĐ>. Eisimpleir:1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22 -
ROOT_VERSION- dreach fuasglaidh werf ri thaisbeanadh gu bunaiteach air an là rach (chan eil e an-còmhnaidh riatanach sgrÏobhainnean a thaisbeanadh leis an à ireamh fuasglaidh as à irde). Eisimpleir:v1.0.4-beta.20 -
REVIEW_SHA- hash den ghealladh ath-bhreithneachaidh Ă s am feum thu an dreach a thogail airson an lĂšb deuchainn.
Thèid na caochladairean sin a lÏonadh ann an loidhne-phÏoban GitLab CI, agus dè dÏreach a tha sgrÏobhte gu h-Ïosal.
An toiseach, airson goireasachd, tha sinn a 'mĂŹneachadh ann an werf.yaml Rach caochladairean teamplaid, aâ sònrachadh luachan dhaibh bho chaochladairean Ă rainneachd:
{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }} Tha an tuairisgeul air an artifact airson an dreach statach den lĂ rach a chuir ri chèile mar as trice airson a h-uile cĂšis a dh âfheumas sinn (aâ toirt a-steach cruthachadh an dreach freumh, a bharrachd air an dreach airson an dev circuit). Mar sin, gluaisidh sinn e gu bloc air leth aâ cleachdadh aâ ghnĂŹomh define - airson ath-chleachdadh Ă s deidh sin include. Cuiridh sinn na h-argamaidean a leanas chun teamplaid:
-
Version- dreach gineadh (ainm tag); -
Channel- ainm an t-sianail Ăšrachaidh airson a bheil an artifact air a chruthachadh; -
Commit- dèan hash, ma thèid an artifact a chruthachadh airson gealltanas ath-bhreithneachaidh; - co-theacs.
Tuairisgeul teamplaid artifact
{{- define "doc_artifact" -}}
{{- $Root := index . "Root" -}}
artifact: doc-{{ .Channel }}
from: jekyll/builder:3
mount:
- from: build_dir
to: /usr/local/bundle
ansible:
install:
- shell: |
export PATH=/usr/jekyll/bin/:$PATH
- name: "Install Dependencies"
shell: bundle install
args:
executable: /bin/bash
chdir: /app/docs
beforeSetup:
{{- if .Commit }}
- shell: echo "Review SHA - {{ .Commit }}."
{{- end }}
{{- if eq .Channel "root" }}
- name: "releases.yml HASH: {{ $Root.Files.Get "releases.yml" | sha256sum }}"
copy:
content: |
{{ $Root.Files.Get "releases.yml" | indent 8 }}
dest: /app/docs/_data/releases.yml
{{- else }}
- file:
path: /app/docs/_data/releases.yml
state: touch
{{- end }}
- file:
path: "{{`{{ item }}`}}"
state: directory
mode: 0777
with_items:
- /app/main_site/
- /app/ru_site/
- file:
dest: /app/docs/pages_ru/cli
state: link
src: /app/docs/pages/cli
- shell: |
echo -e "werfVersion: {{ .Version }}nwerfChannel: {{ .Channel }}" > /tmp/_config_additional.yml
export PATH=/usr/jekyll/bin/:$PATH
{{- if and (ne .Version "review") (ne .Channel "root") }}
{{- $_ := set . "BaseURL" ( printf "v%s" .Channel ) }}
{{- else if ne .Channel "root" }}
{{- $_ := set . "BaseURL" .Channel }}
{{- end }}
jekyll build -s /app/docs -d /app/_main_site/{{ if .BaseURL }} --baseurl /{{ .BaseURL }}{{ end }} --config /app/docs/_config.yml,/tmp/_config_additional.yml
jekyll build -s /app/docs -d /app/_ru_site/{{ if .BaseURL }} --baseurl /{{ .BaseURL }}{{ end }} --config /app/docs/_config.yml,/app/docs/_config_ru.yml,/tmp/_config_additional.yml
args:
executable: /bin/bash
chdir: /app/docs
git:
- url: https://github.com/flant/werf.git
to: /app/
owner: jekyll
group: jekyll
{{- if .Commit }}
commit: {{ .Commit }}
{{- else }}
tag: {{ .Version }}
{{- end }}
stageDependencies:
install: ['docs/Gemfile','docs/Gemfile.lock']
beforeSetup: '**/*'
includePaths: 'docs'
excludePaths: '**/*.sh'
{{- end }} Feumaidh ainm an artifact a bhith gun samhail. Is urrainn dhuinn seo a choileanadh, mar eisimpleir, le bhith aâ cur ainm an t-seanail (luach an caochlaideach). .Channel) mar iar-leasachan air ainm an artifact: artifact: doc-{{ .Channel }}. Ach feumaidh tu tuigsinn, nuair a bhios tu aâ toirt a-steach stuthan bho stuthan, gum feum thu iomradh a thoirt air na h-aon ainmean.
Nuair a thathar aâ toirt cunntas air artifact, thathas aâ cleachdadh na feart werf a leanas: . StĂ ladh a 'sealltainn an eòlaire seirbheis build_dir aâ leigeil leat an tasgadan Jekyll a shĂ bhaladh eadar ruith loidhne-phĂŹoban, a tha gu mòr aâ luathachadh ath-chruinneachadh.
Is dòcha gu bheil thu air mothachadh cuideachd air cleachdadh an fhaidhle releases.yml na fhaidhle YAML le dĂ ta fuasglaidh air iarraidh bho (artifact a gheibhear nuair a thathar aâ cur loidhne-phĂŹoban an gnĂŹomh). Tha feum air nuair a thathar aâ cur ri chèile an lĂ rach, ach ann an co-theacs an artaigil tha e inntinneach dhuinn oir tha e an urra ri a staid ath-chruinneachadh de dĂŹreach aon artifact - artifact de dhreach freumh na lĂ raich (chan eil feum air ann an stuthan eile).
Tha seo air a bhuileachadh aâ cleachdadh an aithris chumha if Rach gu teamplaidean agus dealbhadh {{ $Root.Files.Get "releases.yml" | sha256sum }} ann an Ă rd-Ăšrlar . Bidh e ag obair mar a leanas: nuair a bhios tu aâ togail artifact airson an dreach freumh (caochlaideach .Channel co-ionann ri root) hash faidhle releases.yml aâ toirt buaidh air ainm-sgrĂŹobhte na h-ĂŹre gu lèir, leis gu bheil e na phĂ irt den ainm gnĂŹomh Ansible (parameter name). Mar sin, nuair a tha e ag atharrachadh susbaint faidhle releases.yml thèid an artifact co-fhreagarrach ath-chruinneachadh.
Feuch an toir thu aire cuideachd do bhith ag obair le stòr a-muigh. Ann an Ïomhaigh artifact bho , chan eil ach an eòlaire air a chur ris /docs, agus a rèir nam paramadairean a chaidh seachad, thèid dà ta an taga no an ath-bhreithneachaidh a tha a dhÏth a chur ris sa bhad.
Gus an teamplaid artifact a chleachdadh gus tuairisgeul a ghineadh air artifact nan dreachan a chaidh a ghluasad de shianalan is sgaoilidhean, bidh sinn aâ cur lĂšb air dòigh air aâ chaochladair .WerfVersions в werf.yaml:
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}} Air sgĂ th cruthaichidh an lĂšb grunn stuthan (tha sinn an dòchas sin), feumar aire a thoirt don sgaradh eadar iad - an t-sreath --- (Airson tuilleadh fiosrachaidh mu cho-chòrdadh faidhle rèiteachaidh, faic ). Mar a chaidh a mhĂŹneachadh na bu thrĂ ithe, nuair a bhios sinn aâ gairm teamplaid ann an lĂšb, bidh sinn aâ dol seachad air paramadairean an tionndaidh, URL agus co-theacsa freumh.
San aon dòigh, ach Ă s aonais lĂšb, canaidh sinn an teamplaid artifact airson âcĂšisean sònraichteâ: airson an dreach freumh, a bharrachd air an dreach bhon ath-bhreithneachadh gealltanas:
{{ dict "Version" .WerfRootVersion "Channel" "root" "Root" $Root | include "doc_artifact" }}
---
{{- if .WerfReviewCommit }}
{{ dict "Version" "review" "Channel" "review" "Commit" .WerfReviewCommit "Root" $Root | include "doc_artifact" }}
{{- end }} Thoir an aire nach tèid an artifact airson an gealltanas ath-bhreithneachaidh a thogail ach ma tha an caochladair air a shuidheachadh .WerfReviewCommit.
Tha na stuthan deiseil - tha an t-à m ann tòiseachadh air an toirt a-steach!
Tha an ĂŹomhaigh mu dheireadh, a chaidh a dhealbhadh airson a ruith air Kubernetes, na NGINX cunbhalach le faidhle rèiteachaidh frithealaiche air a chur ris nginx.conf agus statach bho artifacts. A bharrachd air artifact an dreach freumh den lĂ rach, feumaidh sinn an lĂšb air an caochladair ath-aithris .WerfVersions gus artifacts seanail a thoirt a-steach agus dreachan a leigeil ma sgaoil + lean an riaghailt ainmeachadh artifact a ghabh sinn ris na bu thrĂ ithe. Leis gu bheil gach artifact aâ stòradh dreachan den lĂ rach airson dĂ chĂ nan, bidh sinn gan toirt a-steach do na h-Ă iteachan a tha air an toirt seachad leis an rèiteachadh.
Tuairisgeul air an dealbh mu dheireadh werf-doc
image: werf-doc
from: nginx:stable-alpine
ansible:
setup:
- name: "Setup /etc/nginx/nginx.conf"
copy:
content: |
{{ .Files.Get ".werf/nginx.conf" | indent 8 }}
dest: /etc/nginx/nginx.conf
- file:
path: "{{`{{ item }}`}}"
state: directory
mode: 0777
with_items:
- /app/main_site/assets
- /app/ru_site/assets
import:
- artifact: doc-root
add: /app/_main_site
to: /app/main_site
before: setup
- artifact: doc-root
add: /app/_ru_site
to: /app/ru_site
before: setup
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
add: /app/_main_site
to: /app/main_site/v{{ $Channel }}
before: setup
{{ end -}}
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
add: /app/_ru_site
to: /app/ru_site/v{{ $Channel }}
before: setup
{{ end -}}Chan eil anns an ĂŹomhaigh a bharrachd, a tha, còmhla ris aâ phrĂŹomh fhear, air a chuir air bhog air aâ chuairt dev, ach dĂ dhreach den lĂ rach: an dreach bhon ghealladh ath-bhreithneachaidh agus dreach bunaiteach na lĂ raich (tha maoin choitcheann ann agus, ma chuimhnicheas tu. , cuir a-mach dĂ ta). Mar sin, bidh an ĂŹomhaigh a bharrachd eadar-dhealaichte bhon phrĂŹomh fhear a-mhĂ in anns an roinn in-mhalairt (agus, gu dearbh, san ainm):
image: werf-dev
...
import:
- artifact: doc-root
add: /app/_main_site
to: /app/main_site
before: setup
- artifact: doc-root
add: /app/_ru_site
to: /app/ru_site
before: setup
{{- if .WerfReviewCommit }}
- artifact: doc-review
add: /app/_main_site
to: /app/main_site/review
before: setup
- artifact: doc-review
add: /app/_ru_site
to: /app/ru_site/review
before: setup
{{- end }} Mar a chaidh a rĂ dh gu h-Ă rd, cha tèid an artifact airson an gealltanas ath-bhreithneachaidh a chruthachadh ach nuair a bhios an caochladair Ă rainneachd stèidhichte air a ruith REVIEW_SHA. Bhiodh e comasach gun a bhith aâ gineadh an ĂŹomhaigh werf-dev idir mura h-eil caochladair Ă rainneachd ann REVIEW_SHA, ach a chum Bidh ĂŹomhaighean docker ann an werf ag obair airson an ĂŹomhaigh werf-dev, fĂ gaidh sinn e airson a thogail a-mhĂ in leis an artifact dreach freumh (tha e air a thogail mar-thĂ co-dhiĂš), gus structar na loidhne-phĂŹoban a dhèanamh nas sĂŹmplidhe.
Tha an cruinneachadh deiseil! Gluaisidh sinn air adhart gu CI/CD agus nuances cudromach.
PĂŹoba ann an GitLab CI agus feartan togail fiĂšghantach
Nuair a bhios sinn aâ ruith an togalaich feumaidh sinn na caochladairean Ă rainneachd a thathar aâ cleachdadh ann a shuidheachadh werf.yaml. Chan eil seo aâ buntainn ris aâ chaochladair REVIEW_SHA, a shuidhicheas sinn nuair a chuireas sinn fòn gu loidhne-phĂŹoban bhon dubhan GitHub.
Ginidh sinn an dĂ ta riatanach bhon taobh a-muigh ann an sgriobt Bash generate_artifacts, a ghineas dĂ artifact loidhne-phĂŹoban GitLab:
- faidhle
releases.ymlle dĂ ta foillseachaidh, - faidhle
common_envs.sh, anns a bheil na caochladairean Ă rainneachd ri Ă s-mhalairt.
Susbaint an fhaidhle generate_artifacts gheibh thu nar n-ionnsuidh . Chan e a bhith aâ faighinn an dĂ ta fhèin cuspair an artaigil, ach am faidhle common_envs.sh cudromach dhuinne, oir tha obair na feirge an crochadh air. Eisimpleir den t-susbaint aige:
export RELEASES='1.0%v1.0.6-4'
export CHANNELS='1.0-alpha%v1.0.7-1 1.0-beta%v1.0.7-1 1.0-ea%v1.0.6-4 1.0-stable%v1.0.6-4 1.0-rock-solid%v1.0.6-4'
export ROOT_VERSION='v1.0.6-4' Faodaidh tu toradh a leithid de sgriobt a chleachdadh, mar eisimpleir, aâ cleachdadh gnĂŹomh Bash source.
A-nis thig am pĂ irt spòrsail. Gus am bi an dĂ chuid togail agus cleachdadh an tagraidh ag obair gu ceart, feumar dèanamh cinnteach gu bheil werf.yaml a bha An t-aon rud as lugha taobh a-staigh aon loidhne-phĂŹoban. Mura tèid coinneachadh ris aâ chumha seo, bidh ainmean-sgrĂŹobhte nan ĂŹrean a bhios werf aâ cunntadh rè co-chruinneachadh agus, mar eisimpleir, cleachdadh, eadar-dhealaichte. Leanaidh seo gu mearachd cleachdadh, oir ... bidh an ĂŹomhaigh a tha a dhĂŹth airson a chleachdadh a dhĂŹth.
Ann am faclan eile, ma tha am fiosrachadh mu sgaoilidhean agus dreachan mar an ceudna aig Ă m co-chruinneachadh ĂŹomhaigh na lĂ raich, agus aig Ă m an cleachdadh tha dreach Ăšr air a leigeil ma sgaoil agus gu bheil luachan eadar-dhealaichte aig caochladairean na h-Ă rainneachd, fĂ illigidh an cleachdadh le mearachd: Ă s deidh a h-uile cĂ il, cha deach artifact an dreach Ăšr a thogail fhathast.
Ma tha ginealach werf.yaml an urra ri dà ta bhon taobh a-muigh (mar eisimpleir, liosta de dhreachan gnà thach, mar a tha sa chÚis againn), an uairsin bu chòir sgrÏobhadh agus luachan an dà ta sin a chlà radh taobh a-staigh na loidhne-phÏoban. Tha seo gu sònraichte cudromach ma tha crÏochan taobh a-muigh ag atharrachadh gu math tric.
Bidh sinn faighinn agus clĂ radh dĂ ta bhon taobh a-muigh aig aâ chiad ĂŹre den loidhne-phĂŹoban ann an GitLab (Ro-thog) agus cuir thairis iad nas fhaide san fhoirm Artifact GitLab CI. Leigidh seo leat obraichean loidhne-phĂŹoban a ruith agus ath-thòiseachadh (togail, cleachdadh, glanadh) leis an aon rèiteachadh a-steach werf.yaml.
Susbaint an Ă rd-Ăšrlar Ro-thog faidhle .gitlab-ci.yml:
Prebuild:
stage: prebuild
script:
- bash ./generate_artifacts 1> common_envs.sh
- cat ./common_envs.sh
artifacts:
paths:
- releases.yml
- common_envs.sh
expire_in: 2 weekAn dèidh dhut an dĂ ta bhon taobh a-muigh a ghlacadh san artifact, faodaidh tu togail agus cleachdadh aâ cleachdadh ĂŹrean Ă bhaisteach loidhne-phĂŹoban GitLab CI: Tog agus Cleachd. Bidh sinn a âcur air bhog an loidhne-phĂŹoban fhèin le bhith aâ cleachdadh dubhan bho stòr GitHub werf (ie, nuair a tha atharrachaidhean ann an stòr GitHub). Gheibhear dĂ ta air an son ann am feartan pròiseact GitLab san roinn Suidhichidhean CI/CD -> Piopaichean loidhne-phĂŹoban, agus an uairsin cruthaich an Webhook co-fhreagarrach ann an GitHub (Settings -> Webhooks).
Bidh an ĂŹre togail aâ coimhead mar seo:
Build:
stage: build
script:
- type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- source common_envs.sh
- werf build-and-publish --stages-storage :local
except:
refs:
- schedules
dependencies:
- Prebuild Cuiridh GitLab dĂ artifact bhon Ă rd-Ăšrlar chun ĂŹre togail Ro-thog, agus mar sin bidh sinn aâ cur a-mach caochladairean le dĂ ta cuir a-steach ullaichte aâ cleachdadh an togail source common_envs.sh. Bidh sinn aâ tòiseachadh air an ĂŹre togail anns a h-uile cĂšis, ach a-mhĂ in an loidhne-phĂŹoban a chuir air bhog a rèir clĂ r-ama. A rèir a 'chlĂ r-ama, bidh sinn a' ruith loidhne-phĂŹoban airson glanadh - anns a 'chĂšis seo chan eil feum air co-chruinneachadh a dhèanamh.
Aig ĂŹre cleachdadh, bheir sinn cunntas air dĂ ghnĂŹomh - fa leth airson an cleachdadh gu cuairtean cinneasachaidh agus leasachaidh, aâ cleachdadh teamplaid YAML:
.base_deploy: &base_deploy
stage: deploy
script:
- type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- source common_envs.sh
- werf deploy --stages-storage :local
dependencies:
- Prebuild
except:
refs:
- schedules
Deploy to Production:
<<: *base_deploy
variables:
WERF_KUBE_CONTEXT: prod
environment:
name: production
url: werf.io
only:
refs:
- master
except:
variables:
- $REVIEW_SHA
refs:
- schedules
Deploy to Test:
<<: *base_deploy
variables:
WERF_KUBE_CONTEXT: dev
environment:
name: test
url: werf.test.flant.com
except:
refs:
- schedules
only:
variables:
- $REVIEW_SHA Chan eil na gnĂŹomhan gu bunaiteach eadar-dhealaichte ach ann a bhith aâ comharrachadh aâ cho-theacsa brabhsair anns am bu chòir dha werf an cleachdadh a dhèanamh (WERF_KUBE_CONTEXT), agus aâ suidheachadh caochladairean Ă rainneachd lĂšb (environment.name и environment.url), a tha an uairsin air an cleachdadh ann an teamplaidean cairt Helm. Cha toir sinn seachad susbaint nan teamplaidean, oir... chan eil dad inntinneach an sin airson aâ chuspair sin, ach gheibh thu a-steach iad .
Cuairt mu dheireadh
Leis gu bheil dreachan werf air an leigeil ma sgaoil gu math tric, thèid ĂŹomhaighean Ăšra a thogail gu tric, agus bidh ClĂ r Docker an-còmhnaidh aâ fĂ s. Mar sin, tha e deatamach glanadh ĂŹomhaighean fèin-ghluasadach a rèiteachadh stèidhichte air poileasaidhean. Tha e gu math furasta a dhèanamh.
Airson a chur an gnĂŹomh bidh feum agad air:
- Cuir ceum glanaidh ris
.gitlab-ci.yml; - Cuir a-steach obair glanaidh bho Ă m gu Ă m;
- Stèidhich caochladair à rainneachd le comharra ruigsinneachd sgrÏobhaidh.
A 'cur ri ĂŹre glanaidh .gitlab-ci.yml:
Cleanup:
stage: cleanup
script:
- type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
- type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
- source common_envs.sh
- docker login -u nobody -p ${WERF_IMAGES_CLEANUP_PASSWORD} ${WERF_IMAGES_REPO}
- werf cleanup --stages-storage :local
only:
refs:
- schedules
Tha sinn mu thrà th air cha mhòr a h-uile cà il seo fhaicinn beagan nas à irde - dÏreach airson a ghlanadh feumaidh tu logadh a-steach an-toiseach gu Clà r an Docker le comharra aig a bheil na còraichean dealbhan a dhubhadh às ann an Clà r an Docker (chan eil an tòcan gnÏomh GitLab CI a chaidh a chuir a-mach gu fèin-ghluasadach a leithid de chòraichean). Feumar an tòcan a chruthachadh ann an GitLab ro-là imh agus feumaidh a luach a bhith air a shònrachadh ann an caochladair na h-à rainneachd WERF_IMAGES_CLEANUP_PASSWORD pròiseact (Roghainnean CI/CD -> caochladairean).
Thathas aâ dèanamh obair glanaidh a-steach leis aâ chlĂ r a tha a dhĂŹth CI/CD ->
ClĂ ran.
Sin agad e: cha bhith pròiseact ann an ClĂ r an Docker an-còmhnaidh aâ fĂ s bho ĂŹomhaighean gun chleachdadh.
Aig deireadh aâ phĂ irt phractaigeach, leig dhomh do chuimhneachadh gu bheil lĂ n liostaichean bhon artaigil rim faighinn ann :
- ;
- .
thoradh air
- Fhuair sinn structar cruinneachaidh loidsigeach: aon artifact gach dreach.
- Tha an co-chruinneachadh uile-choitcheann agus chan eil feum air atharrachaidhean là imhe nuair a thèid dreachan Úra de werf a leigeil ma sgaoil: thèid na sgrÏobhainnean air an là rach-lÏn Úrachadh gu fèin-ghluasadach.
- Tha dĂ ĂŹomhaigh air an cruinneachadh airson cumaidhean eadar-dhealaichte.
- Bidh e ag obair gu sgiobalta, air sgĂ th Thathas aâ cleachdadh caching cho mòr âs as urrainn - nuair a thèid dreach Ăšr de werf a leigeil ma sgaoil no nuair a thèid dubhan GitHub a ghairm airson gealltanas ath-bhreithneachaidh, chan eil ach an artifact co-fhreagarrach leis an dreach atharraichte air ath-thogail.
- Cha leig thu leas smaoineachadh mu bhith aâ cuir Ă s do dhâ ĂŹomhaighean nach deach an cleachdadh: cumaidh glanadh a rèir poileasaidhean fleasgaich ClĂ r an Docker ann an òrdugh.
toraidhean
- Le bhith aâ cleachdadh werf leigidh sin leis aâ cho-chruinneachadh obrachadh gu sgiobalta mar thoradh air tasgadh an dĂ chuid den cho-chruinneachadh fhèin agus tasgadh nuair a bhios iad ag obair le stòran taobh a-muigh.
- Le bhith ag obair le stòran taobh a-muigh Git cuir Ă s don fheum air an stòr gu lèir a ghleusadh gach turas no ath-thòiseachadh aâ chuibhle le loidsig optimization duilich. Bidh werf aâ cleachdadh tasgadan agus aâ clonadh dĂŹreach aon turas, agus an uairsin aâ cleachdadh
fetchagus dÏreach nuair a bhios feum air. - Comas teamplaidean Go a chleachdadh anns an fhaidhle rèiteachaidh togail
werf.yamlaâ leigeil leat cunntas a thoirt air co-chruinneachadh aig a bheil an toradh an urra ri dĂ ta bhon taobh a-muigh. - Le bhith aâ cleachdadh mount in werf gu mòr aâ luathachadh cruinneachadh stuthan - mar thoradh air an tasgadan, a tha cumanta don h-uile loidhne-phĂŹoban.
- Tha werf ga dhèanamh furasta glanadh a rèiteachadh, rud a tha gu sònraichte cudromach nuair a bhios tu aâ togail gu dinamach.
PS
Leugh cuideachd air ar blog:
- ÂŤ";
- ÂŤ";
- ÂŤ";
- ÂŤ".
Source: www.habr.com
