Kopano e matla le ho tsamaisoa ha litšoantšo tsa Docker tse nang le werf ho sebelisa mohlala oa sebaka sa marang-rang sa litokomane

Re se re buile ka sesebelisoa sa rona sa GitOps ho feta hang. werf, 'me lekhetlong lena re rata ho arolelana phihlelo ea rona ea ho bokella sebaka sa marang-rang ka litokomane tsa morero ka boeona - werf.io (phetolelo ea eona ea Serussia ke en.werf.io). Ena ke sebaka se tloaelehileng sa static, empa kopano ea eona e thahasellisa hobane e hahiloe ho sebelisoa palo e matla ea lintho tsa khale.

Kopano e matla le ho tsamaisoa ha litšoantšo tsa Docker tse nang le werf ho sebelisa mohlala oa sebaka sa marang-rang sa litokomane

Kena ho li-nuances tsa sebopeho sa sebaka sa marang-rang: ho hlahisa menyu e tloaelehileng bakeng sa liphetolelo tsohle, maqephe a nang le tlhahisoleseling mabapi le litokollo, joalo-joalo. - re ke ke. Ho e-na le hoo, a re tsepamiseng maikutlo litabeng le likarolo tsa kopano e matla le ho se hokae ka mekhoa e tsamaeang le CI/CD.

Selelekela: kamoo setša se sebetsang kateng

Ho qala, litokomane tsa werf li bolokiloe hammoho le khoutu ea eona. Sena se beha litlhoko tse itseng tsa nts'etsopele tseo ka kakaretso li fetang boholo ba sengoloa sena, empa bonyane ho ka boleloa hore:

  • Mesebetsi e mecha ea werf ha ea lokela ho lokolloa ntle le ho ntlafatsa litokomane, 'me, ka lehlakoreng le leng, liphetoho life kapa life litokomaneng li bolela ho lokolloa ha mofuta o mocha oa werf;
  • Morero o na le nts'etsopele e matla haholo: liphetolelo tse ncha li ka lokolloa makhetlo a 'maloa ka letsatsi;
  • Ts'ebetso efe kapa efe ea matsoho ea ho tsamaisa sebaka sa marang-rang se nang le mofuta o mocha oa litokomane bonyane ea tena;
  • Morero o sebelisa mokhoa oa semantic phetolelo, e nang le likanale tse 5 tsa botsitso. Ts'ebetso ea tokollo e kenyelletsa phetiso e latellanang ea liphetolelo ka likanale e le ho eketsa botsitso: ho tloha ho alpha ho ea ho rock-solid;
  • Sebaka sena se na le phetolelo ea puo ea Serussia, e "phelang le ho ntlafatsa" (ke hore, litaba tsa eona li nchafalitsoe) ka ho tsamaisana le phetolelo e kholo (ke hore, puo ea Senyesemane).

Ho pata "kichineng e ka hare" ho mosebelisi, ho mo fa ntho e "sebetsang feela", re entse joalo karohano ea ho kenya werf le sesebelisoa sa ntlafatso - sena ke multiwerf. U hloka feela ho hlakisa nomoro ea tokollo le mocha oa botsitso oo u ikemiselitseng ho o sebelisa, 'me multiwerf e tla hlahloba hore na ho na le mofuta o mocha mocha ebe o e jarolla ha ho hlokahala.

Lenaneng la khetho ea mofuta sebakeng sa Marang-rang, mefuta ea morao-rao ea werf e fumaneha mocha o mong le o mong. Ka kamehla, ka aterese werf.io/documentation phetolelo ea mocha o tsitsitseng ka ho fetisisa bakeng sa tokollo ea morao-rao ea bula - e boetse e ngotsoe ke lienjineri tsa ho batla. Litokomane tsa seteishene li fumaneha liatereseng tse arohaneng (mohlala, werf.io/v1.0-beta/documentation bakeng sa tokollo ea beta 1.0).

Ka kakaretso, sebaka sena se na le liphetolelo tse latelang tse fumanehang:

  1. motso (e bula ka ho sa feleng),
  2. bakeng sa mocha o mong le o mong o sebetsang oa tokollo ka 'ngoe (mohlala, werf.io/v1.0-beta).

Ho hlahisa mofuta o itseng oa sebaka sa marang-rang, ka kakaretso, ho lekane ho se bokella ho sebelisoa Jekyllka ho matha bukeng /docs taelo e tsamaisanang le werf repository (jekyll build), ka mor'a ho fetohela ho Git tag ea mofuta o hlokahalang.

E sala feela ho eketsa hore:

  • sesebelisoa ka boeona (werf) se sebelisetsoa ho kopanya;
  • Mekhoa ea CI/CD e hahiloe motheong oa GitLab CI;
  • 'me sena sohle, ehlile, se sebetsa ho Kubernetes.

mesebetsi

Joale a re theheng mesebetsi e nahanang ka lintlha tsohle tse hlalositsoeng:

  1. Kamora ho fetola mofuta oa werf ho mocha ofe kapa ofe oa ntlafatso litokomane setšeng li lokela ho nchafatsoa ka bo eona.
  2. Bakeng sa ntshetsopele o hloka ho khona ka linako tse ling sheba mefuta ea ponelopele ea sebaka.

Sebaka sa marang-rang se tlameha ho tsosolosoa ka mor'a ho fetola phetolelo ho mocha leha e le ofe ho tloha ho li-tag tsa Git, empa ts'ebetsong ea ho haha ​​​​setšoantšo re tla fumana lintlha tse latelang:

  • Kaha lenane la liphetolelo tsa likanale le fetoha, ho hlokahala feela ho tsosolosa litokomane bakeng sa likanale moo phetolelo e fetohileng. Etsoe, ho tsosolosa ntho e 'ngoe le e' ngoe hape ha ho monate haholo.
  • Sete ea likanale tsa tokollo e ka fetoha. Ka nako e itseng, ka mohlala, ho ka 'na ha se ke ha e-ba le phetolelo ea liteishene tse tsitsitseng ho feta tokollo ea pele ea 1.1, empa ha nako e ntse e ea li tla hlaha - tabeng ee, na ha ua lokela ho fetola kopano ka letsoho?

E hlaha joalo kopano e itšetlehile ka ho fetola data ea kantle.

Ts'ebetsong

Ho Khetha Mokhoa

Ntle le moo, o ka tsamaisa mofuta o mong le o mong o hlokahalang joalo ka pod e arohaneng ho Kubernetes. Khetho ena e bolela palo e kholoanyane ea lintho tse ka har'a sehlopha, tse tla hola ka keketseho ea palo ea lihlahisoa tse tsitsitseng tsa werf. 'Me sena, ka lehlakoreng le leng, se bolela tlhokomelo e rarahaneng: mofuta o mong le o mong o na le seva sa oona sa HTTP, le ka mojaro o monyenyane. Ehlile, sena se boetse se kenyelletsa litšenyehelo tse kholo tsa lisebelisoa.

Re ile ra nka tsela e tšoanang ho bokella liphetolelo tsohle tse hlokahalang ka setšoantšo se le seng. Li-statics tse hlophisitsoeng tsa liphetolelo tsohle tsa sebaka sa marang-rang li fumaneha ka har'a setshelo se nang le NGINX, 'me sephethephethe se eang ho Deployment e lumellanang se tla ka NGINX Ingress. Sebopeho se bonolo - ts'ebeliso e se nang naha - e u lumella ho lekanya Deployment habonolo (ho ipapisitse le mojaro) u sebelisa Kubernetes ka boeona.

E le ho nepahala haholoanyane, re bokella litšoantšo tse peli: e 'ngoe bakeng sa potoloho ea tlhahiso, ea bobeli ke e 'ngoe e eketsehileng bakeng sa potoloho ea dev. Setšoantšo se eketsehileng se sebelisoa (se qalileng) feela ho potoloho ea dev hammoho le e ka sehloohong 'me e na le mofuta oa sebaka sa marang-rang ho tsoa boitlamo ba ho hlahloba,' me ho tsamaisana pakeng tsa bona ho etsoa ka lisebelisoa tsa Ingress.

werf vs git clone le lintho tsa khale

Joalokaha ho se ho boletsoe, e le hore u hlahise li-statics tsa sebaka bakeng sa phetolelo e itseng ea litokomane, u lokela ho haha ​​​​ka ho fetola lebokose le nepahetseng la polokelo. U ka boela ua etsa sena ka ho kopanya polokelo nako le nako ha u haha, u khetha li-tag tse loketseng lethathamong. Leha ho le joalo, ena ke ts'ebetso e matla haholo ea lisebelisoa 'me, ho feta moo, e hloka ho ngola litaelo tse sa reng letho ... Phoso e 'ngoe e tebileng ke hore ka mokhoa ona ha ho na mokhoa oa ho boloka ntho e itseng nakong ea kopano.

Mona werf utility ka boeona e tla ho re thusa, ho kenya ts'ebetsong bohlale caching le ho u lumella ho e sebelisa bobolokelo ba kantle. Ho sebelisa werf ho eketsa khoutu ho tsoa sebakeng sa polokelo ho tla potlakisa moaho, hobane werf ha e le hantle e kopanya polokelo hang ebe e ea phetha feela fetch ha ho hlokahala. Ntle le moo, ha re eketsa data ho tsoa polokelong, re ka khetha feela li-directory tse hlokahalang (ho rona ena ke bukana ea polokelo. docs), e tla fokotsa haholo palo ea data e ekelitsoeng.

Kaha Jekyll ke sesebelisoa se etselitsoeng ho bokella data e tsitsitseng mme ha e hlokehe setšoantšong sa ho qetela, ho ka ba ho utloahalang ho bokella werf artifact, le setšoantšong sa ho qetela kenya feela sephetho sa pokello.

Re ngola werf.yaml

Kahoo, re nkile qeto ea hore re tla bokella mofuta o mong le o mong ka mokhoa o ikhethileng oa werf artifact. Leha ho le joalo re ha re tsebe hore na li-artifact tsena li tla ba bokae nakong ea kopano, kahoo re ke ke ra ngola tlhophiso e tsitsitseng ea ho haha ​​(ha e le hantle, re ntse re ka khona, empa e ke ke ea sebetsa ka ho feletseng).

werf e u lumella ho e sebelisa E-ea li-templates faeleng ea hau ea tlhophiso (werf.yaml), 'me sena se etsa hore ho khonehe hlahisa config ka fofa ho ipapisitse le data ea kantle (seo u se hlokang!). Lintlha tsa kantle molemong oa rona ke tlhahisoleseling mabapi le liphetolelo le litokollo, motheong oo re bokellang palo e hlokahalang ea lintho tsa khale mme ka lebaka leo re fumana litšoantšo tse peli: werf-doc и werf-dev ho matha ka lipotoloho tse fapaneng.

Lintlha tsa kantle li fetisoa ka mefuta-futa ea tikoloho. Sebopeho sa bona ke sena:

  • RELEASES - mola o nang le lethathamo la litokollo le mofuta oa morao-rao oa werf, ka sebopeho sa lenane le arohaneng la sebaka sa boleng ka sebopeho. <НОМЕР_РЕЛИЗА>%<НОМЕР_ВЕРСИИ>. Mohlala: 1.0%v1.0.4-beta.20
  • CHANNELS - mola o nang le lethathamo la liteishene le mofuta oa morao-rao oa werf, ka sebopeho sa lenane le arohaneng la sebaka sa boleng ka sebopeho. <КАНАЛ>%<НОМЕР_ВЕРСИИ>. Mohlala: 1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22
  • ROOT_VERSION - mofuta oa tokollo oa werf o tla hlahisoa ka mokhoa o ikhethileng sebakeng sa marang-rang (ha se kamehla ho hlokahalang ho bonts'a litokomane ka nomoro e phahameng ka ho fetisisa ea tokollo). Mohlala: v1.0.4-beta.20
  • REVIEW_SHA - hash ea boitlamo ba tlhahlobo eo ho eona u hlokang ho theha mofuta oa loop ea liteko.

Liphetoho tsena li tla tlatsoa pompong ea GitLab CI, 'me hantle-ntle ho ngotsoe joang ka tlase.

Pele ho tsohle, bakeng sa boiketlo, re hlalosa ho werf.yaml E-ea mefuta e fapaneng ea litempele, u e abele boleng ho tsoa ho mefuta e fapaneng ea tikoloho:

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

Tlhaloso ea "artifact" bakeng sa ho bokella static version ea sebaka sa marang-rang hangata e tšoana le maemong ohle ao re a hlokang (ho kenyeletsoa ho hlahisa mofuta oa motso, hammoho le mofuta oa potoloho ea dev). Ka hona, re tla e fetisetsa sebakeng se arohaneng re sebelisa ts'ebetso define - bakeng sa tšebeliso e latelang include. Re tla fetisetsa likhang tse latelang ho template:

  • Version - mofuta o hlahisitsoeng (lebitso la tag);
  • Channel - lebitso la mocha oa ntlafatso oo artifact e etselitsoeng oona;
  • Commit - etsa hash, haeba artifact e etselitsoe boitlamo ba tlhahlobo;
  • moelelo oa taba.

Artifact Template Tlhaloso

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

Lebitso la maiketsetso le tlameha ho ikhetha. Re ka finyella sena, ka mohlala, ka ho eketsa lebitso la mocha (boleng ba ho feto-fetoha .Channel) joalo ka sehlomathiso sa lebitso la sehlahisoa: artifact: doc-{{ .Channel }}. Empa o hloka ho utloisisa hore ha o kenya thepa ho tsoa linthong tsa khale, o tla hloka ho bua ka mabitso a tšoanang.

Ha ho hlalosoa artifact, ho sebelisoa tšobotsi e latelang ea werf: ho phahamisa. Ho hlongoa ho bonts'a bukana ea litšebeletso build_dir e o lumella ho boloka cache ea Jekyll lipakeng tsa liphaephe tse tsamaeang, tse e potlakisa haholo ho kopanya hape.

E ka 'na eaba u hlokometse tšebeliso ea faele releases.yml ke faele ea YAML e nang le data ea tokollo e batloang ho eona Github.com (sesebedisoa se fumanoeng ha ho etsoa pipeline). Hoa hlokahala ha ho bokelloa setša, empa ho latela moelelo oa sehlooho hoa thahasellisa ho rona hobane ho itšetlehile ka boemo ba eona ho kopana hape hoa ntho e le nngwe feela - sebopeho sa mofuta oa motso oa sebaka (ha se hlokehe linthong tse ling tsa khale).

Sena se kengoa ts'ebetsong ho sebelisoa polelo ea maemo if E-ea ho li-templates le meralo {{ $Root.Files.Get "releases.yml" | sha256sum }} sethaleng mekhahlelo. E sebetsa ka tsela e latelang: ha o haha ​​​​artifact bakeng sa mofuta oa motso (ho feto-fetoha .Channel e lekana le root) faele hash releases.yml e ama ho saena ha sethala kaofela, kaha ke karolo ea lebitso la Ansible task (parameter name). Ka hona, ha e fetoha dikahare faele releases.yml ntho e tšoanang e tla kopanngoa hape.

Ka kopo ela hloko ho sebetsa le polokelo ea kantle. Setšoantšong sa ntho ea khale e tsoang ho werf polokelo, ke lenane feela le kenyelletsoeng /docs, mme ho ipapisitse le liparamente tse fetisitsoeng, data ea tag e hlokahalang kapa boitlamo ba tlhahlobo bo eketsoa hang-hang.

Ho sebelisa template ea artifact ho hlahisa tlhaloso ea li-artifact tsa mefuta e fetisitsoeng ea likanale le litokollo, re hlophisa loop ho feto-fetoha. .WerfVersions в werf.yaml:

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

Hobane loop e tla hlahisa lintho tse ngata tse entsoeng ka matsoho (re tšepa hore ho joalo), hoa hlokahala ho ela hloko karohano pakeng tsa bona - tatellano. --- (Bakeng sa tlhaiso-leseling e batsi mabapi le syntax ea faele ea tlhophiso, bona litokomane). Joalokaha ho hlalositsoe pejana, ha re bitsa template ka loop, re fetisa liparamente tsa mofuta, URL le moelelo oa motso.

Ka mokhoa o ts'oanang, empa ntle le loop, re bitsa template ea "artifact" bakeng sa "linyeoe tse khethehileng": bakeng sa mofuta oa motso, hammoho le mofuta oa boitlamo ba tlhahlobo:

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

Ka kopo hlokomela hore artifact bakeng sa boitlamo ba tlhahlobo e tla hahuoa feela haeba phetoho e setiloe .WerfReviewCommit.

Lintho tsa khale li se li lokile - ke nako ea ho qala ho reka kantle ho naha!

Setšoantšo sa ho qetela, se etselitsoeng ho sebetsa ho Kubernetes, ke NGINX e tloaelehileng e nang le faele ea tlhophiso ea seva e ekelitsoeng. nginx.conf le static ho tloha linthong tsa khale. Ho phaella ho artifact ea mofuta oa motso oa sebaka sa marang-rang, re hloka ho pheta loop ho feto-fetoha .WerfVersions ho kenya li-artifact tsa kanale le liphetolelo tsa tokollo + ho latela molao oa ho reha mabitso a maiketsetso oo re o amohetseng pejana. Kaha ntho e 'ngoe le e 'ngoe e boloka liphetolelo tsa sebaka sa marang-rang ka lipuo tse peli, re li kenya libakeng tse fanoeng ke tlhophiso.

Tlhaloso ea setšoantšo sa ho qetela 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 -}}

Setšoantšo se eketsehileng, seo, hammoho le sa mantlha, se hlahisoang potolohong ea dev, se na le mefuta e 'meli feela ea sebaka sa marang-rang: mofuta oa boitlamo ba tlhahlobo le mofuta oa motso oa sebaka sa marang-rang (ho na le thepa e akaretsang, haeba u hopola. , tokollo ya data). Kahoo, setšoantšo se eketsehileng se tla fapana le sa mantlha feela karolong ea ho kenya (le, ehlile, ka lebitso):

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

Joalokaha ho boletsoe ka holimo, artifact bakeng sa boitlamo ba tlhahlobo e tla hlahisoa feela ha phapang ea tikoloho e behiloeng e tsamaisoa REVIEW_SHA. Ho ka khoneha hore u se ke ua hlahisa setšoantšo sa werf-dev ho hang haeba ho se na phetoho ea tikoloho REVIEW_SHA, empa e le hore ho ho hloekisa ka maano Lits'oants'o tsa Docker ho werf li sebelitse setšoantšo sa werf-dev, re tla se tlohela hore se hahuoe feela ka mofuta oa motsoako oa motso (o se o ntse o hahiloe), ho nolofatsa sebopeho sa lipeipi.

Kopano e lokile! Ha re feteleng ho CI/CD le menahano ea bohlokoa.

Pipeline ho GitLab CI le likarolo tsa moaho o matla

Ha re tsamaisa moaho re hloka ho beha mefuta e fapaneng ea tikoloho e sebelisitsoeng ho eona werf.yaml. Sena ha se sebetse ho REVIEW_SHA e fapaneng, eo re tla e beha ha re letsetsa pipeline ho tsoa ho hook ea GitHub.

Re tla hlahisa lintlha tse hlokahalang tsa kantle ho script ea Bash generate_artifacts, e tla hlahisa lipeipi tse peli tsa GitLab:

  • file releases.yml ka data ea tokollo,
  • file common_envs.sh, e nang le mefuta e fapaneng ea tikoloho e lokelang ho romelloa kantle ho naha.

Likahare tsa faele generate_artifacts u tla e fumana ho rona polokelong ka mehlala. Ho fumana data ka boeona ha se taba ea sehlooho, empa faele common_envs.sh e bohlokoa ho rona, hobane mosebetsi oa werf o itšetlehile ka eona. Mohlala oa litaba tsa eona:

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'

U ka sebelisa tlhahiso ea script e joalo, mohlala, ho sebelisa mosebetsi oa Bash source.

Joale ho tla karolo e monate. E le hore ho aha le ho tsamaisoa ha kopo ho sebetsa ka nepo, hoa hlokahala ho netefatsa hore werf.yaml e ne e le e tšoanang bonyane ka har'a phaephe e le 'ngoe. Haeba boemo bona bo sa finyelloe, li-signature tsa mekhahlelo eo werf e e balang nakong ea kopano 'me, mohlala, ho tsamaisoa, e tla fapana. Sena se tla lebisa phosong ea ho tsamaisa, hobane ... setšoantšo se hlokahalang bakeng sa ho romelloa se tla be se le sieo.

Ka mantsoe a mang, haeba nakong ea kopano ea setšoantšo sa sebaka sa marang-rang tlhahisoleseling mabapi le litokollo le liphetolelo li ts'oana, 'me nakong ea phetisetso ho lokolloa mofuta o mocha mme mefuta e fapaneng ea tikoloho e na le litekanyetso tse fapaneng, joale phepelo e tla hloleha ka phoso: ka mor'a hore tsohle, artifact ea phetolelo e ncha ha e e-s'o hahoe.

Haeba moloko werf.yaml ho ipapisitse le data ea kantle (mohlala, lethathamo la liphetolelo tsa hajoale, joalo ka molemong oa rona), joale sebopeho le boleng ba data e joalo li lokela ho ngoloa ka har'a phaephe. Sena se bohlokoa haholo haeba li-parameter tsa kantle li fetoha hangata.

Re tla amohela le ho rekota data ea kantle mothating oa pele oa lipeipi tsa GitLab (Theha esale pele) ebe o li fetisetsa ho feta ka sebopeho GitLab CI ea maiketsetso. Sena se tla u lumella ho tsamaisa le ho qala mesebetsi ea lipeipi (ho haha, ho tsamaisa, ho hloekisa) ka tlhophiso e tšoanang ho werf.yaml.

Litaba tsa sethala Theha esale pele faele .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

Ha u se u hapile datha ea kantle ho artifact, u ka haha ​​​​le ho sebelisa methati e tloaelehileng ea liphaephe tsa GitLab CI: Haha 'me u E sebelise. Re qala liphaephe ka botsona re sebelisa lihakisi tse tsoang polokelong ea werf GitHub (ke hore, ha ho na le liphetoho sebakeng sa polokelo ea GitHub). Lintlha tsa bona li ka fumanoa ho thepa ea morero oa GitLab karolong Litlhophiso tsa CI/CD -> Lithahasello tsa Pipeline, ebe o theha Webhook e tsamaellanang ho GitHub (Litlhophiso -> Li-Webhooks).

Sethala sa ho haha ​​se tla shebahala tjena:

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 e tla eketsa lintho tse peli tsa khale ho tloha sethaleng ho ea sethaleng sa kaho Theha esale pele, kahoo re romela lintho tse fapaneng tse nang le lintlha tse lokiselitsoeng tsa ho kenya re sebelisa mohaho source common_envs.sh. Re qala sethala sa ho aha maemong ohle, ntle le ho qala phala ho latela kemiso. Ho ea ka kemiso, re tla tsamaisa pipeline bakeng sa ho hloekisa - tabeng ena ha ho hlokahale ho etsa kopano.

Mothating oa phepelo, re tla hlalosa mesebetsi e 'meli - ka thoko bakeng sa ho romelloa ho li-circuits tsa tlhahiso le tsa dev, re sebelisa template ea 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

Mesebetsi ha e le hantle e fapana feela ho bonts'a maemo a sehlopha ao werf e lokelang ho kenya tšebetsong ho ona (WERF_KUBE_CONTEXT), le ho beha mefuta-futa ea tikoloho ea loop (environment.name и environment.url), tse sebelisoang litempeleng tsa chate ea Helm. Ha re na ho fana ka litaba tsa litempele, hobane ... ha ho na letho le khahlisang moo bakeng sa sehlooho se potsoeng, empa u ka li fumana ho polokelo bakeng sa sengoloa.

Tšoaro ea ho qetela

Kaha mefuta ea werf e lokolloa hangata, litšoantšo tse ncha li tla hahoa khafetsa, 'me Registry ea Docker e tla lula e hola. Ka hona, hoa hlokahala ho hlophisa tlhoekiso ea litšoantšo ka boiketsetso ho latela maano. Ho bonolo haholo ho e etsa.

Ho kenya ts'ebetsong o tla hloka:

  • Kenya mohato oa ho hloekisa ho .gitlab-ci.yml;
  • Kenya ts'ebetso ea nako le nako ea mosebetsi oa ho hloekisa;
  • Seta sebopeho sa tikoloho ka tokene ea phihlello ea ho ngola.

Ho eketsa sethala sa ho hloekisa ho .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

Re se re bone hoo e ka bang tsena tsohle li phahame hanyane - feela ho e hloekisa o hloka ho qala ho kena ho Registry ea Docker ka lets'oao le nang le litokelo tsa ho hlakola litšoantšo ho Registry ea Docker (tokene ea mosebetsi ea GitLab CI e fanoeng ka bo eona na le litokelo tse joalo). Letšoao le tlameha ho etsoa ho GitLab esale pele 'me boleng ba lona bo tlameha ho hlalosoa ho feto-fetoha ha tikoloho WERF_IMAGES_CLEANUP_PASSWORD morero (Litlhophiso tsa CI/CD -> Liphetoho).

Ho eketsa mosebetsi oa ho hloekisa ka kemiso e hlokahalang ho etsoa ka CI/CD ->
Litlhophiso
.

Ke phetho: projeke ho Registry ea Docker ha e sa tla hlola e hola khafetsa ho tsoa litšoantšong tse sa sebelisoeng.

Qetellong ea karolo e sebetsang, e re ke u hopotse hore lethathamo le felletseng la sengoloa le fumaneha ho Git:

sephetho

  1. Re ile ra fumana sebopeho sa kopano se utloahalang: ntho e le 'ngoe ea maiketsetso ka phetolelo.
  2. Kopano ke ea bokahohleng 'me ha e hloke liphetoho tse etsoang ka letsoho ha mefuta e mecha ea werf e lokolloa: litokomane tse teng sebakeng sa marang-rang li nchafatsoa ka bohona.
  3. Litšoantšo tse peli li bokelloa bakeng sa li-contours tse fapaneng.
  4. E sebetsa kapele, hobane Caching e sebelisoa ka hohle kamoo ho ka khonehang - ha mofuta o mocha oa werf o lokolloa kapa hook ea GitHub e bitsoa bakeng sa boitlamo ba tlhahlobo, ke ntho ea khale e lumellanang le mofuta o fetotsoeng e hahuoang bocha.
  5. Ha ho na tlhoko ea ho nahana ka ho hlakola litšoantšo tse sa sebelisoeng: ho hloekisa ho latela melaoana ea werf ho tla boloka Registry ea Docker e hlophisitsoe.

fumanoeng ke

  • Ho sebelisa werf ho lumella kopano hore e sebetse ka potlako ka lebaka la caching ea kopano ka boeona le caching ha e sebetsa le polokelo ea kantle.
  • Ho sebetsa le polokelo ea kantle ea Git ho felisa tlhoko ea ho kopanya polokelo eohle nako le nako kapa ho khutlisetsa lebili ka mokhoa o makatsang oa ho ntlafatsa. werf e sebelisa cache mme e etsa cloning hang feela, ebe e sebelisa fetch mme feela ha ho hlokahala.
  • Bokhoni ba ho sebelisa litempele tsa Go ho file ea tlhophiso ea moaho werf.yaml eu lumella ho hlalosa kopano eo sephetho sa eona se itšetlehileng ka data ea kantle.
  • Ho sebelisa mount in werf ho potlakisa haholo pokello ea lintho tsa khale - ka lebaka la cache, e tloaelehileng ho liphaephe tsohle.
  • werf e etsa hore ho be bonolo ho hlophisa tlhoekiso, e leng bohlokoa haholo ha o aha ka matla.

PES

Bala hape ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso