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

Cuir beachd ann