Co-chruinneachadh fiùghantach agus cleachdadh ìomhaighean Docker le werf a’ cleachdadh eisimpleir de làrach sgrìobhainnean dreach

Tha sinn mu thràth air bruidhinn mun inneal GitOps againn barrachd air aon uair. gaoir, 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 - searf.io (tha an dreach Ruiseanach aige ga.werf.io). 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.

Co-chruinneachadh fiùghantach agus cleachdadh ìomhaighean Docker le werf a’ cleachdadh eisimpleir de làrach sgrìobhainnean dreach

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 dreach, 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 ioma-shruth. 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 werf.io/documentation 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, werf.io/v1.0-beta/documentation airson sgaoileadh beta 1.0).

Gu h-iomlan, tha na dreachan a leanas rim faighinn air an lĂ rach:

  1. root (a 'fosgladh gu bunaiteach),
  2. airson gach sianal Ăšrachaidh gnĂŹomhach de gach brath (mar eisimpleir, werf.io/v1.0-beta).

Gus dreach sònraichte de làrach a ghineadh, san fharsaingeachd, tha e gu leòr airson a chur ri chèile a 'cleachdadh Jekyllle 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:

  1. À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.
  2. 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 stòran taobh a-muigh. 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 artifact werf, 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 Rach gu templates 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: cur suas. 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 github.com (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 ìrean. 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 stòras werf, 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 sgrìobhainnean). 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 glanadh le poileasaidhean 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.yml le 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 stòran le eisimpleirean. 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 week

An 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 stòran airson an artaigil.

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 dhol:

thoradh air

  1. Fhuair sinn structar cruinneachaidh loidsigeach: aon artifact gach dreach.
  2. 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.
  3. Tha dĂ  ĂŹomhaigh air an cruinneachadh airson cumaidhean eadar-dhealaichte.
  4. 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.
  5. 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 fetch agus dĂŹreach nuair a bhios feum air.
  • Comas teamplaidean Go a chleachdadh anns an fhaidhle rèiteachaidh togail werf.yaml a’ 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

Ceannaich aoigheachd earbsach airson làraich le dìon DDoS, frithealaichean VPS VDS 🔥 Ceannaich aoigheachd làrach-lìn earbsach le dìon DDoS, frithealaichean VPS VDS | ProHoster