Mgbakọ dị egwu na mbugharị onyonyo Docker nwere werf site na iji ọmụmaatụ saịtị akwụkwọ edegharịrị

Anyị ekwuola maka ngwa GitOps anyị ihe karịrị otu ugboro. werf, na oge a, anyị ga-achọ ịkọrọ anyị ahụmahụ n'ịchịkọta saịtị na akwụkwọ nke oru ngo n'onwe ya - werf.io (ụdị nke Russian ya bụ en.werf.io). Nke a bụ saịtị static nkịtị, mana mgbakọ ya na-atọ ụtọ n'ihi na ejiri ọnụ ọgụgụ arịa dị ike rụọ ya.

Mgbakọ dị egwu na mbugharị onyonyo Docker nwere werf site na iji ọmụmaatụ saịtị akwụkwọ edegharịrị

Banye n'ime nuances nke nhazi saịtị: na-emepụta menu a na-ahụkarị maka ụdị niile, ibe nwere ozi gbasara mwepụta, wdg. - anyị agaghị. Kama, ka anyị lekwasị anya na okwu na njirimara nke mgbakọ dị ike yana ntakịrị na usoro CI/CD na-eso ya.

Okwu mmalite: ka saịtị ahụ si arụ ọrụ

Iji malite, a na-echekwa akwụkwọ werf yana koodu ya. Nke a na-amanye ụfọdụ ihe mmepe chọrọ n'ozuzu karịa oke edemede a, mana opekempe enwere ike ikwu na:

  • E kwesịghị ịhapụ ọrụ werf ọhụrụ na-enweghị imelite akwụkwọ ahụ na, ọzọ, mgbanwe ọ bụla na akwụkwọ ahụ na-egosi mwepụta nke ụdị werf ọhụrụ;
  • Ihe oru ngo a nwere mmepe siri ike: enwere ike weputa nsụgharị ohuru otutu ugboro n'ụbọchị;
  • Ọrụ ntuziaka ọ bụla iji bufee saịtị nwere ụdị akwụkwọ ọhụrụ ọ dịkarịa ala na-agwụ ike;
  • Ihe oru ngo a na-agbaso usoro ntule nsụgharị, na 5 ọwa kwụsie ike. Usoro ntọhapụ na-agụnye usoro n'usoro nke nsụgharị site na ọwa iji na-abawanye nkwụsi ike: site na alfa ruo nkume siri ike;
  • Saịtị ahụ nwere ụdị asụsụ Russian, nke "na-ebi ma na-etolite" (ya bụ, ọdịnaya nke emelitere) n'otu n'otu na ụdị isi (ya bụ, asụsụ Bekee).

Iji zoo " kichin dị n'ime" a niile site n'aka onye ọrụ, na-enye ya ihe "na-arụ ọrụ naanị", anyị mere iche iche werf nwụnye na melite ngwá ọrụ Ndi multiwerf. Naanị ịkwesịrị ịkọwa nọmba ntọhapụ na ọwa kwụsiri ike nke ị dị njikere iji, multiwerf ga-elele ma ọ bụrụ na enwere ụdị ọhụrụ na ọwa wee budata ya ma ọ bụrụ na ọ dị mkpa.

Na nchịkọta nhọrọ ụdị dị na webụsaịtị, ụdị werf kachasị ọhụrụ dị na ọwa ọ bụla. Site na ndabara, site na adreesị werf.io/documentation ụdị nke ọwa kachasị kwụsiri ike maka ntọhapụ ọhụrụ na-emepe - a na-edekwa ya site na engines ọchụchọ. Akwụkwọ maka ọwa dị na adreesị dị iche iche (dịka ọmụmaatụ, werf.io/v1.0-beta/documentation maka ntọhapụ beta 1.0).

Na mkpokọta, saịtị ahụ nwere ụdịdị ndị a dị:

  1. mgbọrọgwụ (meghere na ndabara),
  2. maka ọwa mmelite ọ bụla na-arụ ọrụ nke mwepụta ọ bụla (dịka ọmụmaatụ, werf.io/v1.0-beta).

Iji mepụta otu ụdị nke saịtị, n'ozuzu, o zuru ezu iji chịkọta ya Jekyllsite na-agba ọsọ na ndekọ /docs werf repository iwu kwekọrọ (jekyll build), ka ịgbanwee gaa na mkpado Git nke ụdị achọrọ.

Ọ dị naanị ịgbakwunye na:

  • a na-eji ihe eji eme ihe n'onwe ya (werf) maka mgbakọ;
  • Ewubere usoro CI/CD na ndabere nke GitLab CI;
  • na ihe niile a, n'ezie, na-agba ọsọ na Kubernetes.

ihe aga-eme

Ugbu a, ka anyị mepụta ọrụ ndị na-eburu n'uche nkọwa niile akọwapụtara:

  1. Mgbe agbanwechara ụdị werf na ọwa mmelite ọ bụla Ekwesịrị imelite akwụkwọ dị na saịtị ahụ ozugbo.
  2. Maka mmepe ịkwesịrị inwe ike mgbe ụfọdụ lee ụdị nlegharị anya nke saịtị ahụ.

A ga-achịkọta saịtị ahụ mgbe ịgbanwere ụdị na ọwa ọ bụla site na mkpado Git kwekọrọ, mana n'usoro iwulite onyonyo a, anyị ga-enweta atụmatụ ndị a:

  • Ebe ọ bụ na ndepụta nke nsụgharị na ọwa na-agbanwe, ọ dị mkpa naanị iji wughachi akwụkwọ maka ọwa ebe nsụgharị gbanwere. E kwuwerị, iwughachi ihe niile adịghị mma nke ukwuu.
  • Ntọala ọwa maka mwepụta nwere ike ịgbanwe. N'oge ụfọdụ, dịka ọmụmaatụ, enwere ike ọ gaghị enwe ụdị ọwa na ọwa kwụsiri ike karịa ntọhapụ mbụ-enweta 1.1, mana ka oge na-aga, ha ga-apụta - na nke a, ọ bụ na i kwesịghị iji aka gbanwee mgbakọ ahụ?

Ọ na-apụta na mgbakọ na-adabere na ịgbanwe data mpụga.

Mmejuputa iwu

Ịhọrọ Ụzọ

N'aka nke ọzọ, ịnwere ike ịme ụdị ọ bụla achọrọ dị ka pọd dị iche na Kubernetes. Nhọrọ a na-egosi ọnụ ọgụgụ buru ibu nke ihe dị na ụyọkọ ahụ, nke ga-eto na mmụba nke ọnụọgụ werf kwụsiri ike. Na nke a, n'aka nke ya, na-egosi mmezi dị mgbagwoju anya: ụdị ọ bụla nwere ihe nkesa HTTP nke ya, yana obere ibu. N'ezie, nke a gụnyekwara ọnụ ahịa akụrụngwa ka ukwuu.

Anyị were otu ụzọ ahụ na-achịkọta ụdịdị niile dị mkpa n'otu onyonyo. Statics achịkọtara nke ụdị saịtị ahụ niile dị n'ime akpa nwere NGINX, na okporo ụzọ na-ebunye ya kwekọrọ na-abịa site na NGINX Ingress. Usoro dị mfe - ngwa na-enweghị steeti - na-enye gị ohere iji Kubernetes n'onwe ya nwee ike iwepụta ngwa ngwa (dabere na ibu).

Iji mee nke ọma karị, anyị na-anakọta ihe oyiyi abụọ: otu maka sekit mmepụta, nke abụọ bụ ihe mgbakwunye maka sekit dev. A na-eji ihe oyiyi agbakwunyere (wepụtara) naanị na sekit dev yana nke bụ isi ma nwee ụdị saịtị ahụ site na nyocha nyocha, a na-eme ntụgharị n'etiti ha site na iji akụrụngwa Ingress.

werf vs git clone na artifacts

Dịka e kwurula, iji mepụta statics saịtị maka ụdị akwụkwọ a kapịrị ọnụ, ịkwesịrị iwulite site na ịgbanwee gaa na mkpado nchekwa kwesịrị ekwesị. Ị nwekwara ike ime nke a site na cloning repository oge ọ bụla ị na-arụ ọrụ, na-ahọrọ mkpado kwesịrị ekwesị na listi. Otú ọ dị, nke a bụ ọrụ na-arụ ọrụ nke ọma na, ọzọkwa, chọrọ ide ntụziaka na-adịghị mkpa ... ọzọ dị njọ mwepu bụ na na nke a obibia ọ dịghị ụzọ cache ihe n'oge mgbakọ.

Ebe a werf ịba uru n'onwe ya na-abịa anyị enyemaka, mmejuputa atumatu smart caching na-enye gị ohere iji ebe nchekwa mpụga. Iji werf tinye koodu site na ebe nchekwa ga-eme ka ọ dịkwuo ngwa ngwa, n'ihi na werf na-emechi ebe nchekwa ahụ otu ugboro wee mee naanị fetch ọ bụrụ na ọ dị mkpa. Na mgbakwunye, mgbe ị na-agbakwunye data sitere na ebe nchekwa, anyị nwere ike họrọ naanị akwụkwọ ndekọ aha dị mkpa (n'ọnọdụ anyị nke a bụ ndekọ. docs), nke ga-ebelata oke data agbakwunyere.

Ebe Jekyll bụ ngwá ọrụ emebere maka ịchịkọta data static na ọ dịghị mkpa na foto ikpeazụ, ọ ga-abụ ihe ezi uche dị na ya ikpokọta na werf artifact, na n'ime foto ikpeazụ bubata naanị nsonaazụ mkpokọta.

Anyị na-ede werf.yaml

Ya mere, anyị kpebiri na anyị ga-achịkọta ụdị nke ọ bụla na arịa werf dị iche iche. Agbanyeghị anyị anyị amaghị ole n'ime ihe ndị a ga-enwe n'oge mgbakọ, n'ihi ya, anyị enweghị ike ide nhazi nhazi nhazi (n'ikwu okwu nke ọma, anyị ka nwere ike, ma ọ gaghị adị irè kpamkpam).

werf na-enye gị ohere iji Gaa ndebiri na faịlụ nhazi gị (werf.yaml), nke a na-emekwa ka o kwe omume mepụta config na ofufe dabere na data mpụga (ihe ị chọrọ!). Data mpụga n'ọnọdụ anyị bụ ozi gbasara ụdị na mwepụta, na ndabere nke anyị na-anakọta ọnụ ọgụgụ arịa dị mkpa na n'ihi ya, anyị nwetara onyonyo abụọ: werf-doc и werf-dev iji na-agba ọsọ na sekit dị iche iche.

A na-ebufe data mpụga site na mgbanwe gburugburu ebe obibi. Nke a bụ ihe mejupụtara ha:

  • RELEASES - ahịrị nwere ndepụta nke mwepụta yana ụdị werf dị ugbu a kwekọrọ, n'ụdị ndepụta ụkpụrụ nke kewara oghere na usoro. <НОМЕР_РЕЛИЗА>%<НОМЕР_ВЕРСИИ>. Ihe atụ: 1.0%v1.0.4-beta.20
  • CHANNELS - ahịrị nwere ndepụta nke ọwa yana ụdị werf dị ugbu a kwekọrọ, n'ụdị ndepụta ụkpụrụ nke kewara oghere na usoro. <КАНАЛ>%<НОМЕР_ВЕРСИИ>. Ihe atụ: 1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22
  • ROOT_VERSION - ụdị ntọhapụ werf ga-egosipụta na ndabara na saịtị ahụ (ọ naghị adị mkpa mgbe niile igosipụta akwụkwọ site na nọmba ntọhapụ kacha elu). Ọmụmaatụ: v1.0.4-beta.20
  • REVIEW_SHA - hash nke nyocha nke ị ga-eji wuo ụdị maka loop ule.

A ga-ejupụta mgbanwe ndị a na pipeline GitLab CI, yana otu esi ede ya n'okpuru.

Nke mbụ, maka ịdị mma, anyị na-akọwapụta na werf.yaml Gaa mgbanwe template, na-ekenye ha ụkpụrụ sitere na mgbanwe gburugburu ebe obibi:

{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }}

Nkọwa nke artifact maka ịchịkọta mbipute static nke saịtị ahụ bụ otu ihe maka ikpe niile anyị chọrọ (gụnyere imepụta ụdị mgbọrọgwụ, yana ụdị maka sekit dev). Ya mere, anyị ga-ebugharị ya na ngọngọ dị iche site na iji ọrụ ahụ define - n'ihi na ụdi re ojiji include. Anyị ga-ebufe arụmụka ndị a na template:

  • Version - ụdị emepụtara (aha mkpado);
  • Channel - aha nke ọwa mmelite nke a na-emepụta ihe ahụ;
  • Commit - eme hash, ma ọ bụrụ na emepụtara arịa ahụ maka nyocha nyocha;
  • gburugburu.

Nkọwa Nlereanya 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 }}

Aha arịa ahụ ga-abụrịrị ihe pụrụ iche. Anyị nwere ike ime nke a, dịka ọmụmaatụ, site n'ịgbakwunye aha ọwa (uru nke mgbanwe .Channel) dị ka mgbakwunye na aha ihe a: artifact: doc-{{ .Channel }}. Mana ịkwesịrị ịghọta na mgbe ị na-ebubata site na arịa ụlọ, ị ga-achọ ịtu aka na otu aha ahụ.

Mgbe a na-akọwa ihe arịa, a na-eji njirimara werf ndị a: arịọnụ. Ịkwalite na-egosi ndekọ ọrụ build_dir na-enye gị ohere ịchekwa cache Jekyll n'etiti pipeline na-agba ọsọ, nke budata ngwa ngwa reassembly.

Ị nwekwara ike chọpụtala iji faịlụ ahụ releases.yml bụ faịlụ YAML nwere data ntọhapụ nke achọrọ n'aka github.com (ihe a na-enweta mgbe a na-eme pipeline). Ọ dị mkpa mgbe ị na-achịkọta saịtị ahụ, mana n'ihe gbasara isiokwu ahụ ọ na-amasị anyị n'ihi na ọ dabere na steeti ya. chịkọtaghachi naanị otu ihe - ihe artifact nke mgbọrọgwụ version nke saịtị (ọ dịghị mkpa na ndị ọzọ artifacts).

A na-eme nke a site na iji nkwupụta ọnọdụ if Gaa ndebiri na atụmatụ {{ $Root.Files.Get "releases.yml" | sha256sum }} na ogbo ogbo. Ọ na-arụ ọrụ dị ka ndị a: mgbe ị na-ewu ihe artifact maka ụdị mgbọrọgwụ (variable .Channel nhata root) faịlụ hash releases.yml na-emetụta mbinye aka nke usoro ahụ dum, ebe ọ bụ akụkụ nke aha ọrụ nwere ike ime (parameter name). Ya mere, mgbe mgbanwe ọdịnaya faịlụ releases.yml a ga-achịkọta arịa ahụ kwekọrọ.

Biko ṅa ntị n'ịrụ ọrụ na ebe nchekwa mpụga. Na oyiyi nke artifact si ebe nchekwa werf, naanị ndekọ ka agbakwunyere /docs, na dabere na paramita gafere, a na-agbakwunye data nke mkpado achọrọ ma ọ bụ nyocha nyocha ozugbo.

Iji jiri template artifact mepụta nkọwa nke artifact nke ụdị ọwa na ewepụtara, anyị na-ahazi loop na mgbanwe mgbanwe. .WerfVersions в werf.yaml:

{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}}

N'ihi na loop ga-emepụta ọtụtụ artifacts (anyị na-atụ anya ya), ọ dị mkpa iburu n'uche nkewa n'etiti ha - usoro. --- (Maka ozi ndị ọzọ gbasara syntax faịlụ nhazi, lee akwụkwọ). Dị ka akọwara na mbụ, mgbe ị na-akpọ template na loop, anyị na-agafe paramita mbipute, URL na mgbọrọgwụ mgbọrọgwụ.

N'otu aka ahụ, mana na-enweghị loop, anyị na-akpọ template artifact maka "ikpe pụrụ iche": maka ụdị mgbọrọgwụ, yana ụdị sitere na nyocha ahụ:

{{ 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 }}

Biko mara na a ga-ewu arịa maka nyocha nyocha naanị ma ọ bụrụ na edobere mgbanwe ahụ .WerfReviewCommit.

Ihe ndị a adịla njikere - oge eruola ịmalite ibubata!

Onyonyo ikpeazụ, emebere ka ọ na-agba ọsọ na Kubernetes, bụ NGINX oge niile yana faịlụ nhazi ihe nkesa agbakwunyere nginx.conf na static sitere na artifact. Na mgbakwunye na artifact nke ụdị mgbọrọgwụ nke saịtị ahụ, anyị kwesịrị ịmegharị loop na mgbanwe .WerfVersions ibubata artifact nke ọwa na ụdị mwepụta + soro iwu ịkpọ aha artifact nke anyị nakweere na mbụ. Ebe ọ bụ na artifact ọ bụla na-echekwa ụdị saịtị ahụ maka asụsụ abụọ, anyị na-ebubata ha na ebe nhazi ahụ nyere.

Nkọwa nke onyonyo ikpeazụ 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 -}}

Ihe onyonyo agbakwunyere, nke, yana nke bụ isi, ewepụtara na sekit dev, nwere naanị ụdị abụọ nke saịtị ahụ: ụdị sitere na nyocha nyocha na ụdị mgbọrọgwụ nke saịtị ahụ (enwere akụ n'ozuzu yana, ọ bụrụ na ị cheta. , ntọhapụ data). Ya mere, onyonyo agbakwunyere ga-adị iche na nke bụ isi naanị na ngalaba mbubata (na, n'ezie, n'aha):

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 }}

Dị ka e kwuru n'elu, a ga-emepụta arịa maka nyocha nyocha naanị mgbe agbanwere gburugburu ebe a na-agbanwe agbanwe REVIEW_SHA. Ọ ga-ekwe omume ịghara imepụta onyonyo werf-dev ma ọ bụrụ na enweghị mgbanwe gburugburu ebe obibi REVIEW_SHA, ma iji ihicha site atumatu Ihe onyonyo Docker na werf na-arụ ọrụ maka onyonyo werf-dev, anyị ga-ahapụ ya ka e wuo ya naanị na artifact ụdị mgbọrọgwụ (e wuru ya agbanyeghị), iji mee ka usoro pipeline dị mfe.

Nzukọ ahụ adịla njikere! Ka anyị gaa na CI/CD na nuances dị mkpa.

Pipeline na GitLab CI na njirimara nke nrụpụta ike

Mgbe a na-arụ ụlọ ahụ, anyị kwesịrị ịtọ mgbanwe gburugburu ebe a na-eji werf.yaml. Nke a anaghị emetụta mgbanwe REVIEW_SHA, nke anyị ga-edobe mgbe a na-akpọ pipeline site na nko GitHub.

Anyị ga-ewepụta data mpụga dị mkpa na edemede Bash generate_artifacts, nke ga-emepụta ihe abụọ GitLab pipeline artifact:

  • faịlụ releases.yml na data ntọhapụ,
  • faịlụ common_envs.sh, nwere mgbanwe gburugburu ebe obibi a ga-ebupụ.

Faịlụ ọdịnaya generate_artifacts ị ga-ahụ na anyị ebe nchekwa nwere ihe atụ. Ịnata data n'onwe ya abụghị isiokwu nke isiokwu, kama faịlụ ahụ common_envs.sh dị anyị mkpa, n'ihi na ọrụ nke werf na-adabere na ya. Ọmụmaatụ nke ọdịnaya ya:

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'

Ị nwere ike iji mmepụta nke edemede dị otú ahụ, dịka ọmụmaatụ, iji ọrụ Bash source.

Ugbu a na-abịa akụkụ fun. Ka ma wuo na ntinye nke ngwa ahụ ka ọ rụọ ọrụ nke ọma, ọ dị mkpa iji hụ na nke ahụ werf.yaml bụ otu ihe opekempe n'ime otu pipeline. Ọ bụrụ na ọnọdụ a emezughị, mgbe ahụ, mbinye aka nke ọkwa nke werf na-agbakọ n'oge mgbakọ na, dịka ọmụmaatụ, ntinye, ga-adị iche. Nke a ga - eduga na njehie ntinye, n'ihi na ... onyonyo a chọrọ maka ibunye ga-efu.

N'ikwu ya n'ụzọ ọzọ, ọ bụrụ na n'oge mgbakọ nke ihe oyiyi saịtị ahụ, ozi gbasara mwepụta na nsụgharị bụ otu, na n'oge ntinye akwụkwọ a na-ewepụta ụdị ọhụrụ na mgbanwe gburugburu ebe obibi nwere ụkpụrụ dị iche iche, mgbe ahụ, ntinye ga-ada na njehie: E kwuwerị, arụbeghị ihe ọhụrụ nke ụdị ọhụrụ ahụ.

Ọ bụrụ na ọgbọ werf.yaml dabere na data mpụga (dịka ọmụmaatụ, ndepụta nke nsụgharị ugbu a, dị ka ọ dị na anyị), mgbe ahụ, ekwesịrị ịdekọ ihe mejupụtara na ụkpụrụ nke data dị otú ahụ n'ime pipeline. Nke a dị mkpa karịsịa ma ọ bụrụ na parampat mpụga na-agbanwe ọtụtụ oge.

Anyị ga-eme ya nata ma dekọọ data mpụga na ọkwa mbụ nke pipeline na GitLab (Mbuo ụzọ) ma nyefee ha n'ihu n'ụdị GitLab CI artifact. Nke a ga-enye gị ohere ịgba ọsọ ma malitegharịa ọrụ pipeline (wuo, tinye, kpochaa) yana otu nhazi ahụ. werf.yaml.

Ọdịnaya nke ogbo Mbuo ụzọ faịlụ .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

N'ịbụ ndị wegharala data mpụga dị na artifact, ị nwere ike wulite ma bugharịa site na iji ọkọlọtọ GitLab CI pipeline nkebi: wuo ma bufee. Anyị na-ebufe pipeline n'onwe ya site na iji nko si GitHub werf repository (ya bụ, mgbe enwere mgbanwe na ebe nchekwa na GitHub). Enwere ike ịchọta data maka ha na njirimara ọrụ GitLab na ngalaba Ntọala CI/CD -> Ọkpụkpọ ọkpọkọ, wee mepụta Webhook kwekọrọ na GitHub (Ntọala -> Webhooks).

Usoro nhazi ahụ ga-adị ka nke a:

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

GitLab ga-agbakwunye arịa abụọ site na ogbo ahụ ruo n'ebe a na-ewu ụlọ Mbuo ụzọ, yabụ anyị na-ebupụ mgbanwe mgbanwe na data ntinye akwadoro site na iji ihe nrụpụta source common_envs.sh. Anyị na-amalite ogbo a na-ewu ụlọ n'ọnọdụ niile, ewezuga ịmalite pipeline dịka usoro nhazi. Dị ka usoro ihe omume si dị, anyị ga-agba ọsọ pipeline maka nhicha - na nke a ọ dịghị mkpa ịme mgbakọ.

N'oge nhazi ọkwa, anyị ga-akọwa ọrụ abụọ - iche iche maka ntinye aka na mmepụta na sekit dev, na-eji template 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

Ọrụ ndị a dị iche naanị n'igosi usoro ụyọkọ nke werf kwesịrị ịrụ ọrụ mbugharị (WERF_KUBE_CONTEXT), na ịtọlite ​​​​ngbanwe gburugburu ebe obibi loop (environment.name и environment.url), nke a na-ejizi na ndebiri chaatị Helm. Anyị agaghị enye ọdịnaya nke ndebiri, n'ihi na ... ọ dịghị ihe na-adọrọ mmasị n'ebe ahụ maka isiokwu a na-ajụ, ma ị nwere ike ịhụ ha na ebe nchekwa maka akụkọ.

mmetụ ikpeazụ

Ebe ọ bụ na a na-ewepụta ụdị werf ọtụtụ mgbe, a ga-ewu ihe onyonyo ọhụrụ ugboro ugboro, na ndekọ Docker ga-eto eto mgbe niile. Ya mere, ọ dị mkpa ịhazi nhichapụ onyonyo akpaka dabere na atumatu. Ọ dị nnọọ mfe ime.

Iji mejuputa ị ga-achọ:

  • Tinye nzọụkwụ nhicha na .gitlab-ci.yml;
  • Tinye mmezu nke ọrụ nhicha oge;
  • Tọọ mgbanwe gburugburu ebe obibi nwere akara ohere ide.

Na-agbakwunye ọkwa nhicha na .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

Anyị ahụlarị ihe fọrọ nke nta ka ọ bụrụ ihe a niile ka ọ dị elu - naanị iji hichaa ya, ịkwesịrị ibu ụzọ banye na ndekọ Docker site na iji akara nwere ikike ihichapụ onyonyo na ndekọ Docker (nke enyere GitLab CI ọrụ na-akpaghị aka anaghị eme ya. nwere ikike ndị dị otú ahụ). Ekwesịrị ịmepụta akara ngosi na GitLab tupu oge eruo yana uru ya ga-akọwarịrị na mgbanwe gburugburu WERF_IMAGES_CLEANUP_PASSWORD oru a (Ntọala CI/CD -> mgbanwe).

Agbakwụnye ọrụ nhicha na nhazi oge achọrọ na-eme n'ime CI/CD ->
Atụmatụ
.

Nke ahụ bụ ya: oru ngo dị na ndekọ Docker agaghịkwa eto mgbe niile site na onyonyo ejighi ya.

Na njedebe nke akụkụ bara uru, ka m chetara gị na ndepụta zuru ezu sitere na akụkọ dị na Git:

N'ihi

  1. Anyị nwetara usoro mgbakọ ezi uche dị na ya: otu ihe n'ụdị ọ bụla.
  2. Mgbakọ ahụ bụ nke zuru ụwa ọnụ na ọ dịghị achọ mgbanwe ntuziaka mgbe a na-ewepụta ụdị werf ọhụrụ: a na-emelite akwụkwọ na weebụsaịtị na-akpaghị aka.
  3. A na-achịkọta ihe oyiyi abụọ maka contours dị iche iche.
  4. Ọ na-arụ ọrụ ngwa ngwa, n'ihi na A na-eji caching mee ihe dịka o kwere mee - mgbe ewepụtara ụdị werf ọhụrụ ma ọ bụ na-akpọ nko GitHub maka nyocha, ọ bụ naanị ihe kwekọrọ na ụdị gbanwere ka a na-ewughachi.
  5. Ọ dịghị mkpa iche echiche banyere ihichapụ ihe oyiyi na-ejighị ya: ihicha dị ka werf atumatu ga-dobe Docker Registry n'usoro.

Nchoputa

  • Iji werf na-enye ohere ka mgbakọ ahụ rụọ ọrụ ngwa ngwa n'ihi caching nke ma mgbakọ n'onwe ya na caching mgbe ị na-arụ ọrụ na ebe nchekwa mpụga.
  • Ịrụ ọrụ na ebe nchekwa Git dị na mpụga na-ewepụ mkpa ọ dị imechi ebe nchekwa oge ọ bụla ma ọ bụ megharịa wiil ahụ na mgbagha kachasị mma. werf na-eji cache wee mee cloning naanị otu ugboro, wee jiri ya fetch na naanị mgbe ọ dị mkpa.
  • Ikike iji ndebiri Go na faịlụ nhazi nrụpụta werf.yaml na-enye gị ohere ịkọwa mgbakọ nke nsonaazụ ya dabere na data mpụga.
  • Iji mount in werf mee ihe ngwa ngwa na-agbakọta ngwa ngwa - n'ihi cache, nke a na-ahụkarị na pipeline niile.
  • werf na-eme ka ọ dị mfe ịhazi nhichapụ, nke dị mkpa karịsịa mgbe ị na-ewuli ike.

PS

Gụọkwa na blọọgụ anyị:

isi: www.habr.com

Zụta nnabata ntụkwasị obi maka saịtị nwere nchekwa DDoS, sava VPS VDS 🔥 Zụta ebe nrụọrụ weebụ a pụrụ ịtụkwasị obi na nchekwa DDoS, sava VPS VDS | ProHoster