Faʻapotopotoga faʻapitoa ma le faʻapipiʻiina o ata Docker faʻatasi ma le werf e faʻaaoga ai le faʻataʻitaʻiga o se nofoaga faʻamaumauga faʻamaumauga

Ua uma ona matou talanoa e uiga i la matou meafaigaluega GitOps sili atu ma le tasi. werf, ma o le taimi lenei matou te fia faʻasoa atu lo matou poto masani i le faʻapipiʻiina o le saite ma faʻamaumauga o le poloketi lava ia - werf.io (o lana lomiga Rusia o en.werf.io). O se nofoaga masani masani lenei, ae o lona faʻapotopotoga e manaia ona o loʻo fausia e faʻaaoga ai se numera malosi o mea taua.

Faʻapotopotoga faʻapitoa ma le faʻapipiʻiina o ata Docker faʻatasi ma le werf e faʻaaoga ai le faʻataʻitaʻiga o se nofoaga faʻamaumauga faʻamaumauga

Alu i nuances o le fausaga o le upega tafaʻilagi: fatuina o se lisi masani mo faʻaliliuga uma, itulau ma faʻamatalaga e uiga i faʻasalalauga, ma isi. - matou te le. Nai lo lena, sei o tatou taulai atu i mataupu ma foliga o le faʻapotopotoga malosi ma sina mea itiiti ile faʻagasologa o le CI / CD.

Folasaga: fa'afefea ona galue le saite

I le amataga, o faʻamaumauga werf o loʻo teuina faʻatasi ma lona code. O lenei mea e tuʻuina atu ai ni manaʻoga tau atinaʻe e masani lava i tua atu o le lautele o lenei tusiga, ae i se tulaga maualalo e mafai ona faʻapea:

  • O galuega fou a le werf e le tatau ona tatalaina e aunoa ma le faŹ»afouina o faŹ»amaumauga ma, i se isi itu, soŹ»o se suiga i faŹ»amaumauga e faŹ»aalia ai le tatalaina o se faŹ»amatalaga fou o le werf;
  • O le poloketi o loŹ»o i ai se atinaŹ»e malosi: e mafai ona faŹ»asalalau faŹ»amatalaga fou i le tele o taimi i le aso;
  • So'o se fa'agaioiga tusi lesona e fa'apipi'i ai se 'upega tafa'ilagi ma se fa'amatalaga fou o fa'amaumauga e le'i fa'avaivai;
  • O le poloketi e faŹ»aaogaina se auala faŹ»apitoa fa'aliliuga, fa'atasi ai ma ala mautu 5. O le fa'agaioiga fa'asa'oloto e aofia ai fa'asologa fa'asolosolo o fa'aliliuga e ala i alavai ina ia fa'atuputeleina le mautu: mai le alafa'atasi i le papa-mautu;
  • O le 'upega tafaŹ»ilagi o loŹ»o i ai se gagana Rusia-gagana, lea e "ola ma atiina ae" (o lona uiga, o mea o loŹ»o faŹ»afouina) e tutusa ma le autu (ie, Igilisi-gagana).

Ina ia natia uma nei " umukuka i totonu " mai le tagata faʻaoga, ofoina atu ia te ia se mea "naʻo le galue", na matou faia fa'apipi'i werf ma fa'afou meafaigaluega - o lea lava multiwerf. E tatau lava ona e faʻamaonia le numera faʻamalolo ma le laina mautu o loʻo e sauni e faʻaoga, ma multiwerf o le a siaki pe iai se faʻamatalaga fou i luga o le auala ma sii mai pe a manaʻomia.

I le lisi o filifiliga filifiliga i luga o le upega tafaʻilagi, o lomiga fou o le werf o loʻo avanoa i alalaupapa taʻitasi. E ala ile tuatusi, ile tuatusi werf.io/documentation o le lomiga o le auala sili ona mautu mo le faʻasalalauga lata mai ua tatalaina - o loʻo faʻasinoina foi e masini suʻesuʻe. E maua fa'amaumauga mo le alalaupapa i tuatusi eseese (fa'ata'ita'iga, werf.io/v1.0-beta/documentation mo le tatalaina o le beta 1.0).

I le aotelega, o le saite o loʻo i ai faʻamatalaga nei e maua:

  1. a'a (tatala e ala i le faaletonu),
  2. mo ta'iala fa'afouina ta'itasi o fa'asalalauga ta'itasi (mo se fa'ata'ita'iga, werf.io/v1.0-beta).

Ina ia fatuina se faʻamatalaga patino o se 'upega tafaʻilagi, i se tulaga lautele, ua lava le faʻapipiʻiina e faʻaaoga ai Iekylle ala i le tamoe i totonu o le lisi /docs werf repository poloaiga tutusa (jekyll build), pe a uma ona sui i le Git tag o le lomiga manaʻomia.

E na'o le fa'aopoopo e fa'apea:

  • o le aoga lava ia (werf) e faŹ»aaogaina mo le faŹ»apotopotoga;
  • CI/CD fa'agasologa o lo'o fausia ile fa'avae ole GitLab CI;
  • ma o nei mea uma, ioe, e tamoe i Kubernetes.

Galuega

Seʻi o tatou faʻatulagaina galuega e amanaʻia uma faʻamatalaga faʻamatalaina:

  1. A maeʻa ona suia le werf version i luga o soʻo se auala faʻafouina fa'amaumauga i luga o le saite e tatau ona otometi ona fa'afouina.
  2. Mo le atinaʻe e tatau ona e mafaia i nisi taimi va'ai mua'i fa'aaliga o le saite.

E tatau ona toe faʻapipiʻi le 'upega tafaʻilagi pe a uma ona suia le faʻasologa i luga o soʻo se auala mai faʻailoga Git tutusa, ae i le faagasologa o le fausiaina o le ata o le a tatou maua ai foliga nei:

  • Talu ai ona o le lisi o faŹ»aliliuga i luga o auala e suia, e naŹ»o le manaŹ»omia o le toe fausia o faŹ»amaumauga mo auala ua suia ai le faŹ»asologa. A uma, o le toe fausia o mea uma e le manaia tele.
  • E ono suia le seti o alalaupapa mo fa'asalalauga. I se taimi i le taimi, mo se faŹ»ataŹ»itaŹ»iga, atonu e leai se faŹ»amatalaga i luga o auala e sili atu ona mautu nai lo le faŹ»asalalauga 1.1 vave, ae i le aluga o taimi o le a aliali mai - i lenei tulaga, e le tatau ona e suia le faŹ»apotopotoga ma le lima?

E fesuiaʻi lena mea fa'apotopotoga fa'alagolago i le suia o fa'amatalaga mai fafo.

Š ŠµŠ°Š»ŠøŠ·Š°Ń†ŠøŃ

Filifilia o se Auala

I le isi itu, e mafai ona e faʻataʻitaʻiina taʻitasi manaʻomia o se isi pod i Kubernetes. O lenei filifiliga e fa'aalia ai le tele o mea faitino i totonu o le fuifui, lea o le a fa'atupulaia ma le fa'ateleina o le numera o fa'amalologa werf mautu. Ma o lenei, i le isi itu, o lona uiga e sili atu le faigata o le tausiga: o faʻasalalauga taʻitasi e iai lana lava HTTP server, ma faʻatasi ai ma sina uta. O le mea moni, o lenei mea e aofia ai foʻi le tele o tau o punaoa.

Sa matou uia le ala lava e tasi fa'apotopoto uma fa'aliliuga talafeagai i le ata e tasi. O faʻamaumauga tuʻufaʻatasia o ituaiga uma o le upega tafaʻilagi o loʻo i totonu o se atigipusa ma NGINX, ma o fefaʻatauaiga i le Faʻasalalauga tutusa e sau mai le NGINX Ingress. O se fausaga faigofie - o se talosaga e leai ni setete - e mafai ai ona e faʻaogaina faigofie le faʻatulagaina (faʻalagolago i le uta) faʻaaoga Kubernetes lava ia.

Ina ia sili atu le saʻo, matou te aoina ni ata se lua: tasi mo le gaosiga o le gaosiga, o le lona lua o se faʻaopoopoga faʻaopoopo mo le matagaluega dev. O le ata faʻaopoopo e faʻaaogaina (faʻalauiloaina) naʻo luga o le dev circuit faʻatasi ma le autu autu ma o loʻo i ai le faʻasologa o le saite mai le iloiloga commit, ma o le taʻavale i le va o latou e faʻaaogaina e faʻaaoga ai punaoa Ingress.

werf vs git clone ma mea taua

E pei ona uma ona taʻua, ina ia mafai ona faʻatupuina faʻamaumauga o le upega tafaʻilagi mo se faʻamatalaga patino o faʻamaumauga, e tatau ona e fausia e ala i le fesuiaʻi i le faʻailoga talafeagai. E mafai foʻi ona e faia lenei mea e ala i le faʻapipiʻiina o le fale teu oloa i taimi uma e te fausia ai, filifili faʻailoga talafeagai mai se lisi. Ae ui i lea, o se faʻagaioiga e sili atu le faʻaogaina o punaoa ma, e le gata i lea, e manaʻomia le tusiaina o faʻatonuga e le taua ... O le isi faʻaletonu matuia o le faʻatasi ai ma lenei auala e leai se auala e teu ai se mea i le taimi o le faʻapotopotoga.

O iinei o le werf utility lava ia e sau e fesoasoani ia i matou, faʻatinoina fa'aoga atamai ma faʻatagaina oe e faʻaaoga fale teu oloa i fafo. O le faʻaaogaina o le werf e faʻaopoopo ai le code mai le fale teu oloa o le a faʻavaveina ai le fausiaina, aua Werf e fa'apipi'i fa'atasi le fale teu oloa ona fa'atino lea ae fetch pe a mana'omia. E le gata i lea, pe a faʻaopoopo faʻamatalaga mai le fale teu oloa, e mafai ona matou filifilia naʻo faʻatonuga talafeagai (i la matou tulaga o le lisi lea docs), lea o le a matua faʻaitiitia ai le aofaʻi o faʻamatalaga faʻaopoopo.

Talu ai o Jekyll o se meafaigaluega ua fuafuaina mo le tuufaatasia o faʻamaumauga faʻamaumauga ma e le manaʻomia i le ata mulimuli, e talafeagai le tuʻufaʻatasia i totonu. werf meafaitino, ma i le ata mulimuli fa'aulufale mai na'o le i'uga tu'ufa'atasi.

Matou te tusia werf.yaml

O lea, na matou filifili ai o le a matou tuʻufaʻatasia faʻasalalauga taʻitasi i se mea faʻapitoa werf. Ae peitai o matou matou te le iloa pe fia le tele o nei meafaitino o le ai ai i le taimi o le faʻapotopotoga, o lea e le mafai ai ona matou tusia se faʻatulagaga faʻatulagaina fau (faʻapitoa, matou te mafaia lava, ae o le a le aoga atoatoa).

werf faʻatagaina oe e faʻaaoga Alu mamanu i lau faila faila (werf.yaml), ma o lenei mea e mafai ai fa'atupu config ile lele faʻalagolago i faʻamatalaga mai fafo (mea e te manaʻomia!). O faʻamatalaga mai fafo i la matou mataupu o faʻamatalaga e uiga i faʻaliliuga ma faʻasalalauga, i luga o le faʻavae matou te aoina ai le numera manaʻomia o mea taua ma o se taunuuga matou te mauaina ni ata se lua: werf-doc и werf-dev e tamo'e i ta'amilosaga eseese.

O fa'amatalaga mai fafo e pasi atu i fesuiaiga o le siosiomaga. O la latou fatuga lenei:

  • RELEASES - se laina faŹ»atasi ma se lisi o faŹ»asalalauga ma le faŹ»asologa o loŹ»o i ai nei o le werf, i le tulaga o se lisi vaeluaga o tulaga taua i le faatulagaga <ŠŠžŠœŠ•Š _Š Š•Š›Š˜Š—Š>%<ŠŠžŠœŠ•Š _Š’Š•Š Š”Š˜Š˜>. O se faŹ»ataŹ»itaŹ»iga: 1.0%v1.0.4-beta.20
  • CHANNELS - se laina faŹ»atasi ma se lisi o auala ma le faŹ»asologa o loŹ»o i ai nei o le werf, i le tulaga o se lisi vaeluaga o tulaga taua i le faatulagaga <ŠšŠŠŠŠ›>%<ŠŠžŠœŠ•Š _Š’Š•Š Š”Š˜Š˜>. O se faŹ»ataŹ»itaŹ»iga: 1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22
  • ROOT_VERSION - Werf faŹ»asalalauga faŹ»aaliga e faŹ»aalia e ala i le faaletonu i luga o le 'upega tafaŹ»ilagi (e le o taimi uma e manaŹ»omia ai le faŹ»aalia o faŹ»amaumauga e le numera faŹ»amalolo sili ona maualuga). Faataitaiga: v1.0.4-beta.20
  • REVIEW_SHA - hash o le toe iloiloga commit lea e te manaŹ»omia e fausia ai le faŹ»asologa mo le suŹ»ega suŹ»ega.

O nei fesuiaiga o le a faʻatumu i le GitLab CI pipeline, ma pe faʻapefea ona tusia tonu i lalo.

Muamua, mo le faigofie, matou te faʻamatalaina i totonu werf.yaml Alu faʻataʻitaʻiga fesuiaiga, tuʻuina atu ia i latou tau mai suiga o le siosiomaga:

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

O le faʻamatalaga o mea faʻapitoa mo le tuʻufaʻatasia o le static version of the site e masani lava ona tutusa mo mataupu uma tatou te manaʻomia (e aofia ai le faʻatupuina o le aʻa, faʻapea foʻi ma le version mo le dev circuit). O le mea lea, o le a matou faʻanofoina i totonu o se poloka ese e faʻaaoga ai le galuega define - mo le toe fa'aogaina mulimuli ane include. O le a matou pasi atu finauga nei i le mamanu:

  • Version - fa'atupuina lomiga (igoa igoa);
  • Channel - o le igoa o le alalaupapa faŹ»afouina lea na faŹ»atupuina ai le mea taua;
  • Commit - fai hash, pe a fai o le meafaitino na gaosia mo se toe iloiloga commit;
  • talaaga.

Fa'amatalaga Fa'ata'ita'i Fa'ailoga

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

E tatau ona tulaga ese le igoa o meafaitino. E mafai ona tatou ausia lenei mea, mo se faʻataʻitaʻiga, e ala i le faʻaopopoina o le igoa o le alalaupapa (le tau o le fesuiaiga .Channel) o se suffix i le igoa o le mea taua: artifact: doc-{{ .Channel }}. Ae e tatau ona e malamalama pe a faʻaulufale mai mea taulima, e tatau ona e faʻasino i igoa tutusa.

Pe a faʻamatalaina se mea faʻapitoa, o loʻo faʻaogaina le faʻaogaina o le werf: fa'apipi'i. Faʻapipiʻi e faʻaalia ai le lisi o auaunaga build_dir faʻatagaina oe e faʻasaoina le Jekyll cache i le va o laina paipa, lea matua faatelevaveina toe faʻapipiʻi.

Atonu na e matauina foi le faʻaogaina o le faila releases.yml o se faila YAML ma faʻamaumauga tuʻuina mai e talosagaina mai github.com (se mea taua na maua pe a fa'atino se paipa). E manaʻomia pe a tuʻufaʻatasia le saite, ae i le anotusi o le tusiga e manaia ia i tatou aua e faʻalagolago i lona tulaga toe fa'aopoopoina na'o le tasi mea fa'apitoa - o se mea faʻapitoa o le aʻa o le saite (e le manaʻomia i isi mea taua).

E fa'atinoina lea e fa'aaoga ai le fa'amatalaga o tuutuuga if Alu mamanu ma mamanu {{ $Root.Files.Get "releases.yml" | sha256sum }} i le tulaga tulaga. E galue e pei ona taua i lalo: pe a fausia se mea faʻapitoa mo le aʻa (variable .Channel e tutusa root) faila hash releases.yml aafia ai le saini o le tulaga atoa, talu ai o se vaega o le igoa o le galuega Ansible (parameter name). O lea la, pe a suia anotusi faila releases.yml o le a toe faʻapipiʻiina mea faʻatatau.

Fa'amolemole fa'alogo lelei fo'i i le galulue fa'atasi ma se fale teu oloa i fafo. I le ata o se mea taua mai fale teu oloa, na'o le fa'atonuga e fa'aopoopoina /docs, ma e fa'atatau i fa'ailoga ua pasia, o fa'amaumauga o le fa'ailoga mana'omia po'o le toe iloiloga e fa'aopoopo vave.

Mo le fa'aogaina o le fa'ata'ita'iga fa'ata'ita'i e fa'atupu ai se fa'amatalaga o le fa'ailoga o fa'aliliuga fa'aliliuina o alalaupapa ma fa'asalalauga, matou te fa'atulaga se matasele i luga o le fesuiaiga. .WerfVersions в werf.yaml:

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

Aua o le matasele o le a maua ai le tele o mea taua (matou te faʻamoemoe), e tatau ona amanaʻia le vaeluaga i le va o latou - o le faasologa. --- (Mo nisi faʻamatalaga ile faʻasologa o faila faila, vaʻai fa'amaumauga). E pei ona faʻamatalaina muamua, pe a valaʻau se faʻataʻitaʻiga i se matasele, matou te pasia le faʻasologa o faʻasologa, URL ma le aʻa.

E faʻapea foʻi, ae leai se matasele, matou te taʻua le faʻataʻitaʻiga faʻataʻitaʻiga mo "mataupu faʻapitoa": mo le aʻa, faʻapea foʻi ma le faʻasologa mai le iloiloga na faia:

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

Fa'amolemole e fa'apea o le meafaitino mo le iloiloga o le a na'o le fausiaina pe a fa'atulaga le fesuiaiga .WerfReviewCommit.

Ua sauni mea taua - ua o'o i le taimi e amata ai ona fa'aulufale mai!

O le ata mulimuli, ua fuafuaina e tamoʻe i luga o Kubernetes, o se NGINX masani faʻatasi ai ma se faila faʻapipiʻi faʻapipiʻi faʻaopoopo nginx.conf ma static mai mea taulima. I le faʻaopoopoga i le faʻaogaina o le aʻa o le upega tafaʻilagi, e manaʻomia le toe faia o le matasele i luga o le fesuiaiga .WerfVersions e fa'aulufale mai mea taua o le alalaupapa ma fa'amalo fa'aliliuga + mulimuli i le tulafono fa'aigoa mea fa'aigoa na matou fa'aaogaina muamua. Talu ai o meafaitino ta'itasi o lo'o teuina fa'aliliuga o le saite mo gagana e lua, matou te fa'aulufale mai i totonu o nofoaga o lo'o saunia e le fa'atulagaga.

Fa'amatalaga o le ata mulimuli 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 -}}

O le ata faʻaopoopo, lea, faʻatasi ai ma le autu autu, o loʻo faʻalauiloaina i luga o le dev circuit, e naʻo le lua lomiga o le upega tafaʻilagi: o le faʻasologa mai le iloiloga commit ma le aʻa o le upega tafaʻilagi (o loʻo i ai aseta lautele ma, pe a e manatua , fa'amaumauga tu'u). O lea la, o le ata faaopoopo o le a ese mai le mea autu na o le vaega faaulufale mai (ma, ioe, i le igoa):

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

E pei ona ta'ua i luga, o le meafaitino mo le iloiloga commit o le a fa'atupuina pe a fa'atino le suiga o le si'osi'omaga seti REVIEW_SHA. E mafai ona le faʻatupuina le ata werf-dev pe a leai se fesuiaiga o le siosiomaga REVIEW_SHA, ae ina ia mafai faamamaina e faiga faavae O ata Docker i le werf na galue mo le ata werf-dev, o le a matou tuʻuina e fausia naʻo le aʻa faʻasologa o mea (ua uma ona fausia), e faafaigofie ai le fausaga o paipa.

Ua sauni le faapotopotoga! Sei o tatou agai i luma ile CI/CD ma mea taua.

Pipeline i le GitLab CI ma foliga o le fausiaina malosi

Pe a faʻatautaia le fausiaina e manaʻomia le setiina o fesuiaiga o le siosiomaga o loʻo faʻaaogaina i totonu werf.yaml. E le fa'atatau i le REVIEW_SHA fesuia'i, lea o le a matou setiina pe a vala'au paipa mai le GitHub matau.

O le a matou gaosia faʻamatalaga mai fafo e manaʻomia i totonu o se tusitusiga Bash generate_artifacts, lea o le a fa'atupuina ai ni fa'ailoga e lua a le GitLab pipeline:

  • faila releases.yml fa'atasi ai ma fa'amaumauga tu'u mai,
  • faila common_envs.sh, o lo'o i ai suiga o le si'osi'omaga e auina atu i fafo.

Fa'amau faila generate_artifacts o le ae maua i la matou fale teu oloa ma faʻataʻitaʻiga. O le mauaina o faʻamatalaga lava ia e le o le autu o le tusiga, ae o le faila common_envs.sh e taua ia i tatou, aua e faalagolago i ai le galuega a werf. O se faʻataʻitaʻiga o lona anotusi:

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'

E mafai ona e faʻaogaina le gaioiga o sea tusitusiga, mo se faʻataʻitaʻiga, faʻaaogaina le galuega Bash source.

O lea ua oo mai le vaega malie. Ina ia mafai ona lelei le fausiaina ma le faʻapipiʻiina o le talosaga, e tatau ona faʻamautinoa werf.yaml sa tutusa lava laʻititi i totonu o le paipa e tasi. Afai e le ausia lenei tulaga, o saini o laʻasaga e faʻatatauina i le taimi o le faʻapotopotoga ma, mo se faʻataʻitaʻiga, faʻapipiʻiina, o le a ese. O lenei mea o le a taʻitaʻia ai le faʻaogaina o mea sese, aua ... o le ata e manaʻomia mo le faʻapipiʻiina o le a misi.

I se isi faaupuga, afai i le taimi o le faʻapotopotoga o le ata o le upega tafaʻilagi o faʻamatalaga e uiga i faʻasalalauga ma faʻaliliuga e tutusa, ma i le taimi o le faʻapipiʻiina e tuʻuina atu se faʻamatalaga fou ma o suiga o le siʻosiʻomaga e eseese tulaga taua, o le a le manuia le faʻapipiʻiina i se mea sese: pe a uma, o le mea moni o le lomiga fou e leʻi fausia.

Afai o tupulaga werf.yaml faʻalagolago i faʻamatalaga i fafo (mo se faʻataʻitaʻiga, o se lisi o lomiga o loʻo i ai nei, e pei o la tatou tulaga), ona faʻamauina lea o le tuufaatasiga ma le taua o ia faʻamaumauga i totonu o le paipa. E taua tele lenei mea pe a fai e fai si suiga i fafo.

Matou te maua ma faamaumau faamatalaga mai fafo i le laasaga muamua o le paipa i GitLab (mua'i fausia) ma fa'asalalau atili atu i le fomu GitLab CI meafaitino. Ole mea lea ole a fa'atagaina oe e tamo'e ma toe amata galuega paipa (fausia, fa'apipi'i, fa'amama) fa'atasi ai ma le fa'atulagaga tutusa i totonu werf.yaml.

Anotusi o le tulaga mua'i fausia faila .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

I le pu'eina o fa'amatalaga i fafo i totonu o le mea fa'apitoa, e mafai ona e fausia ma fa'apipi'i e fa'aaoga ai le tulaga masani GitLab CI pipeline stages: Fausia ma Fa'asoa. Matou te faʻalauiloaina le paipa lava ia e faʻaaoga ai matau mai le werf GitHub repository (ie, pe a iai suiga i le GitHub repository). O faʻamatalaga mo i latou e mafai ona maua i le GitLab project properties i le vaega CI/CD Seti -> Pipeline fa'aoso, ona fai lea o le Webhook talafeagai i GitHub (Fa'atonu -> Webhooks).

O le tulaga o le fausiaina o le a pei o lenei:

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 o le a faʻaopoopoina ni mea faʻapitoa se lua mai le tulaga i le tulaga faufale mua'i fausia, o lea matou te auina atu i fafo fesuiaiga ma faʻamatalaga faʻapipiʻi saunia e faʻaaoga ai le fausiaina source common_envs.sh. Matou te amataina le fausiaina o tulaga i tulaga uma, sei vagana ai le faʻalauiloaina o le paipa e tusa ai ma se faʻatulagaga. E tusa ai ma le faʻatulagaga, o le a matou faʻatautaia se paipa mo le faʻamamaina - i lenei tulaga e leai se manaʻoga e faia faʻapotopotoga.

I le tulaga faʻapipiʻi, o le a matou faʻamatalaina galuega e lua - eseese mo le faʻapipiʻiina i le gaosiga ma faʻataʻitaʻiga, e faʻaaoga ai se mamanu 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

O galuega e matua'i ese lava i le fa'ailoaina o le fa'asologa o le fuifui lea e tatau ona fa'atino ai e le werf le fa'atinoina (WERF_KUBE_CONTEXT), ma le setiina o suiga o le siosiomaga matasele (environment.name и environment.url), ona fa'aaogaina lea i fa'ata'ita'iga siata o Helm. Matou te le tuʻuina atu mea o loʻo i totonu o faʻataʻitaʻiga, aua ... e leai se mea manaia iina mo le autu o loʻo fesiligia, ae e mafai ona e mauaina i totonu fale teu oloa mo le tusiga.

pa'i mulimuli

Talu ai e faʻasalalau faʻasalalauga faʻasalalau, o ata fou o le a fausia soo, ma o le Docker Registry o le a faʻatupulaia pea. O le mea lea, e taua tele le faʻapipiʻi otometi faʻamamaina ata e faʻavae i luga o faiga faʻavae. E matua faigofie lava ona fai.

Ina ia faʻatinoina e te manaʻomia:

  • Fa'aopoopo se laasaga fa'amama i .gitlab-ci.yml;
  • Fa'aopoopo le fa'atinoina o galuega fa'amama;
  • Seti se suiga o le si'osi'omaga ma se fa'ailoga avanoa e tusitusi ai.

Fa'aopoopoina se vaega fa'amamā i .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

Ua uma ona matou vaʻaia toetoe o nei mea uma e sili atu le maualuga - naʻo le faʻamamaina e te manaʻomia muamua e te ulufale i le Docker Registry ma se faʻailoga e iai le aia tatau e tape ai ata i le Docker Registry (o le faʻailoga otometi na tuʻuina atu GitLab CI galuega faʻailoga e le e iai ia aia tatau). O le faailoga e tatau ona faia i le GitLab muamua ma o lona tau e tatau ona faʻamaonia i le fesuiaiga o le siosiomaga WERF_IMAGES_CLEANUP_PASSWORD le poloketi (CI/CD Seti -> Fesuiaiga).

O le fa'aopoopoina o se galuega fa'amamā ma le fa'atulagaga mana'omia ua faia i totonu CI/CD ->
Faamatalaga
.

O le mea lena: o se poloketi i le Docker Registry o le a le toe tupu i taimi uma mai ata e leʻi faʻaaogaina.

I le faaiuga o le vaega aoga, sei ou faamanatu atu ia te oe o lisi atoa mai le tusiga o loʻo avanoa i totonu Git:

iʻuga

  1. Na matou mauaina se fausaga faʻapipiʻi talafeagai: tasi mea faʻapitoa i le lomiga.
  2. O le faʻapotopotoga e lautele ma e le manaʻomia ni suiga i le tusi lesona pe a faʻasalalau lomiga fou o le werf: o faʻamaumauga i luga o le upega tafaʻilagi e otometi ona faʻafouina.
  3. E lua ata o lo'o fa'apipi'iina mo ta'aloga eseese.
  4. E galue vave, aua E fa'aogaina le fa'aoga i le tele e mafai ai - pe a fa'amatu'u se fa'amatalaga fou o le werf po'o le fa'amau GitHub e vala'au mo se toe iloiloga, na'o le mea fa'atusa e fetaui ma le suiga ua toe fausia.
  5. Leai se manaʻoga e mafaufau i le tapeina o ata e leʻi faʻaaogaina: faʻamamaina e tusa ai ma faiga faʻavae werf o le a faʻatumauina ai le Docker Registry i le faasologa.

sailiiliga

  • O le fa'aogaina o le werf e mafai ai e le fa'apotopotoga ona galue vave ona o le fa'aogaina o le fa'apotopotoga lava ia ma le fa'aogaina pe a galue ma fale teu oloa i fafo.
  • O le galue i fafo Git repositories e faŹ»aumatia ai le manaŹ»oga e faŹ»apipiŹ»i le faleteuoloa atoa i taimi uma pe toe faŹ»afouina le uili ma le faŹ»aogaina o mafaufauga faŹ»apitoa. werf fa'aoga se fa'aoga ma fai le fa'a-cloning na'o le tasi, ona fa'aaoga lea fetch ma na'o le taimi e tatau ai.
  • Malosiaga e faŹ»aoga Go templates i le faŹ»atulagaina o faila werf.yaml fa'atagaina oe e fa'amatala se fa'apotopotoga o lona taunu'uga e fa'alagolago i fa'amatalaga mai fafo.
  • O le faŹ»aaogaina o le mount in werf e faŹ»avaveina ai le aoina o mea taua - ona o le cache, lea e masani ai i paipa uma.
  • werf fa'afaigofie ona fa'atulaga le fa'amama, lea e sili ona taua pe a fau fau.

SALA

Faitau foi i la matou blog:

puna: www.habr.com

FaŹ»atau talimalo faŹ»atuatuaina mo nofoaga ma DDoS puipuiga, VPS VDS servers šŸ”„ Fa'atau le 'upega tafa'ilagi talimalo fa'atuatuaina ma le puipuiga DDoS, 'au'aunaga VPS VDS | ProHoster