Kusonkhana kwamphamvu ndi kutumiza zithunzi za Docker ndi werf pogwiritsa ntchito chitsanzo cha tsamba lazolemba

Talankhula kale za chida chathu cha GitOps kangapo. werf, ndipo nthawi ino tikufuna kugawana zomwe takumana nazo pakusonkhanitsa malowa ndi zolemba za polojekitiyo - werf.io (mtundu wake waku Russia ndi en.werf.io). Awa ndi malo wamba osasunthika, koma msonkhano wake ndi wosangalatsa chifukwa umamangidwa pogwiritsa ntchito zinthu zambiri zakale.

Kusonkhana kwamphamvu ndi kutumiza zithunzi za Docker ndi werf pogwiritsa ntchito chitsanzo cha tsamba lazolemba

Lowani m'mapangidwe amasamba: kupanga menyu wamba wamitundu yonse, masamba omwe ali ndi chidziwitso chotulutsa, ndi zina zambiri. - sitidzatero. M'malo mwake, tiyeni tiyang'ane pa nkhani ndi mawonekedwe a gulu lamphamvu komanso pang'ono panjira zotsagana ndi CI/CD.

Mau oyamba: momwe tsamba limagwirira ntchito

Poyamba, zolemba za werf zimasungidwa limodzi ndi code yake. Izi zimakhazikitsa zofunikira zina zachitukuko zomwe nthawi zambiri sizingaganizidwe ndi nkhaniyi, koma pang'ono tinganene kuti:

  • Ntchito zatsopano za werf siziyenera kutulutsidwa popanda kukonzanso zolembazo ndipo, mosiyana, kusintha kulikonse muzolemba kumatanthauza kutulutsidwa kwa mtundu watsopano wa werf;
  • Pulojekitiyi ili ndi chitukuko chozama: mitundu yatsopano imatha kutulutsidwa kangapo patsiku;
  • Ntchito zamanja zilizonse zotumizira tsamba ndi zolemba zatsopano ndizotopetsa;
  • Pulojekitiyi imagwiritsa ntchito njira ya semantic kumasulira, yokhala ndi njira 5 zokhazikika. Njira yotulutsira imaphatikizapo magawo otsatizana a matembenuzidwe kudzera mumayendedwe kuti achuluke kukhazikika: kuchokera ku alpha kupita ku rock-solid;
  • Tsambali lili ndi chilankhulo cha Chirasha, chomwe "chimakhala ndikukula" (mwachitsanzo, zomwe zasinthidwa) molingana ndi mtundu waukulu (ie, Chingerezi).

Kuti tibise "khitchini yamkati" yonseyi kwa wogwiritsa ntchito, kumupatsa chinachake chomwe "chimagwira ntchito", tinachita osiyana werf unsembe ndi update chida Ndi multiwerf. Mukungoyenera kufotokoza nambala yotulutsidwa ndi njira yokhazikika yomwe mwakonzeka kugwiritsa ntchito, ndipo multiwerf idzayang'ana ngati pali mtundu watsopano pa tchanelo ndikutsitsa ngati kuli kofunikira.

Muzosankha zosankhidwa patsamba lawebusayiti, mitundu yaposachedwa ya werf ikupezeka munjira iliyonse. Mwa kusakhulupirika, ndi adilesi werf.io/documentation mtundu wa njira yokhazikika kwambiri yotulutsidwa kwaposachedwa imatsegulidwa - imayikidwanso ndi injini zosakira. Zolemba za tchanelo zimapezeka pamaadiresi osiyana (mwachitsanzo, werf.io/v1.0-beta/documentation kumasulidwa kwa beta 1.0).

Pazonse, tsambali lili ndi mitundu iyi:

  1. root (amatsegula mwachisawawa),
  2. pa tchanelo chilichonse chosinthira chotulutsa chilichonse (mwachitsanzo, werf.io/v1.0-beta).

Kuti mupange tsamba linalake, nthawi zambiri, ndikwanira kuliphatikiza pogwiritsa ntchito Jekyllpothamanga mu chikwatu /docs lamulo lolingana ndi werf repository (jekyll build), mutasinthira ku tag ya Git ya mtundu wofunikira.

Ingotsala pang'ono kuwonjezera kuti:

  • chida chokha (werf) chimagwiritsidwa ntchito popanga;
  • Njira za CI/CD zimamangidwa pamaziko a GitLab CI;
  • ndipo zonsezi, ndithudi, zimayenda ku Kubernetes.

ntchito

Tsopano tiyeni tipange ntchito zomwe zimaganizira zonse zomwe zafotokozedwa:

  1. Pambuyo posintha mtundu wa werf pa njira iliyonse yosinthira zolemba patsamba ziyenera kusinthidwa zokha.
  2. Kwa chitukuko muyenera kukhala okhoza nthawi zina onani zowonetseratu zamasamba.

Tsambali liyenera kubwerezedwanso mutasintha mtundu panjira iliyonse kuchokera pama tag ofananira a Git, koma pomanga chithunzicho tipeza izi:

  • Popeza mndandanda wa ma tchanelo akusintha, ndikofunikira kupanganso zolemba zamakanema pomwe mtunduwo wasintha. Kupatula apo, kumanganso zonse sikwabwino kwambiri.
  • Seti ya mayendedwe otulutsidwa ikhoza kusintha. Panthawi ina, mwachitsanzo, sipangakhale mtundu pamakanema okhazikika kuposa kutulutsidwa koyambirira kwa 1.1, koma pakapita nthawi adzawonekera - pakadali pano, simukuyenera kusintha msonkhano pamanja?

Izo zikutanthauza kuti kusonkhanitsa kumadalira kusintha deta yakunja.

РСализация

Kusankha Njira

Kapenanso, mutha kuyendetsa mtundu uliwonse wofunikira ngati poto yosiyana ku Kubernetes. Izi zikutanthawuza kuchuluka kwa zinthu zomwe zili mgululi, zomwe zidzakula ndi kuchuluka kwa kutulutsa kokhazikika kwa werf. Ndipo izi, zikutanthawuza kukonza zovuta kwambiri: mtundu uliwonse uli ndi seva yake ya HTTP, komanso ndi katundu wochepa. Zowona, izi zimaphatikizaponso ndalama zokulirapo.

Tinatenga njira yomweyo kuphatikiza mitundu yonse yofunikira mu chithunzi chimodzi. Ma statics ophatikizidwa amitundu yonse yatsambali ali mu chidebe chokhala ndi NGINX, ndipo magalimoto opita ku Deployment yofananira amabwera kudzera mu NGINX Ingress. Kapangidwe kosavuta - ntchito yopanda malire - imakupatsani mwayi wokulitsa Kutumiza (kutengera katundu) pogwiritsa ntchito Kubernetes palokha.

Kuti tikhale olondola, tikusonkhanitsa zithunzi ziwiri: imodzi ya dera lopangira, yachiwiri ndi yowonjezera ya dera la dev. Chithunzi chowonjezeracho chimagwiritsidwa ntchito (choyambitsidwa) kokha pa dera la dev limodzi ndi chachikulu ndipo chimakhala ndi mtundu wa tsambalo kuchokera pakuwunikanso, ndikuwongolera pakati pawo kumachitika pogwiritsa ntchito zida za Ingress.

werf vs git clone ndi zinthu zakale

Monga tanenera kale, kuti mupange ma statics atsamba pamtundu wina wa zolembazo, muyenera kumanga posinthira ku tag yoyenera. Mukhozanso kuchita izi mwa kupanga nkhokwe nthawi iliyonse yomwe mukumanga, ndikusankha ma tag oyenerera pamndandanda. Komabe, iyi ndi ntchito yogwiritsa ntchito zinthu zambiri ndipo, kuwonjezera apo, imafuna kulemba malangizo osakhala ang'onoang'ono ... Choyipa china chachikulu ndikuti ndi njira iyi palibe njira yosungira china chake panthawi ya msonkhano.

Apa werf utility imabwera kudzatithandiza, kukhazikitsa smart caching ndi kukulolani kuti mugwiritse ntchito nkhokwe zakunja. Kugwiritsa ntchito werf kuwonjezera kachidindo kuchokera kunkhokwe kumathandizira kwambiri kumanga, chifukwa werf kwenikweni amatengera chosungirako kamodzi kenako ndikumaliza okha fetch ngati kuli kofunikira. Kuphatikiza apo, powonjezera deta kuchokera kunkhokwe, titha kusankha zolemba zofunikira zokha (kwa ife iyi ndi chikwatu. docs), zomwe zidzachepetsa kwambiri kuchuluka kwa deta yowonjezeredwa.

Popeza Jekyll ndi chida chopangidwira kusonkhanitsa deta yosasunthika ndipo sichifunikira pachithunzi chomaliza, zingakhale zomveka kuti muphatikizepo. werf artifact, ndi m’chifaniziro chomaliza lowetsani zotsatira zophatikiza zokha.

Timalemba werf.yaml

Chifukwa chake, tidaganiza kuti tiphatikize mtundu uliwonse muzojambula za werf. Komabe ife sitikudziwa kuti zingati mwazinthu izi zomwe zidzakhale panthawi yosonkhanitsa, kotero sitingathe kulemba kukhazikitsidwa kokhazikika kokhazikika (kunena, tingathebe, koma sikungakhale kothandiza kwathunthu).

werf amakulolani kugwiritsa ntchito Pitani ma templates mufayilo yanu yosinthira (werf.yaml), ndipo izi zimatheka kupanga config pa ntchentche kutengera deta yakunja (zomwe mukufuna!). Zambiri zakunja m'malo mwathu ndizambiri zamasinthidwe ndi kutulutsidwa, kutengera zomwe timatolera kuchuluka kwazinthu zakale ndipo chifukwa chake timapeza zithunzi ziwiri: werf-doc ΠΈ werf-dev kuthamanga pazigawo zosiyanasiyana.

Deta yakunja imadutsa pazosintha zachilengedwe. Nayi mapangidwe awo:

  • RELEASES - mzere wokhala ndi mndandanda wazotulutsa ndi mtundu waposachedwa wa werf, mu mawonekedwe a mndandanda wazinthu zomwe zimasiyana ndi malo <ΠΠžΠœΠ•Π _Π Π•Π›Π˜Π—Π>%<ΠΠžΠœΠ•Π _Π’Π•Π Π‘Π˜Π˜>. Chitsanzo: 1.0%v1.0.4-beta.20
  • CHANNELS - mzere wokhala ndi mndandanda wamakanema ndi mtundu wofananira wa werf, mu mawonekedwe a mndandanda wazinthu zosiyanitsidwa ndi malo <ΠšΠΠΠΠ›>%<ΠΠžΠœΠ•Π _Π’Π•Π Π‘Π˜Π˜>. Chitsanzo: 1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22
  • ROOT_VERSION - mtundu womasulidwa wa werf kuti uwonetsedwe mwachisawawa patsamba (sikofunikira nthawi zonse kuwonetsa zolemba ndi nambala yotulutsidwa kwambiri). Chitsanzo: v1.0.4-beta.20
  • REVIEW_SHA - hashi yakubwereza komwe mukufunikira kuti mupange mtundu woyeserera.

Zosinthazi zidzadzazidwa mupaipi ya GitLab CI, ndi momwe zalembedwera pansipa.

Choyamba, kuti zikhale zosavuta, timafotokozera mu werf.yaml Pitani zosinthika za ma template, kuwapatsa zomwe zimafunikira kuchokera kumitundu yosiyanasiyana:

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

Malongosoledwe a zida zopangira tsamba latsambali nthawi zambiri amakhala ofanana pazochitika zonse zomwe timafunikira (kuphatikiza kupanga mtundu wa mizu, komanso mtundu wa dev dev). Chifukwa chake, tidzasuntha mu chipika chosiyana pogwiritsa ntchito ntchitoyi define - kuti mugwiritsenso ntchito motsatira include. Tidzapereka zifukwa zotsatirazi ku template:

  • Version - mtundu wopangidwa (dzina la tag);
  • Channel - dzina la njira yosinthira yomwe chinthucho chimapangidwira;
  • Commit - perekani hashi, ngati chopangidwacho chapangidwa kuti chiwunikenso;
  • nkhani.

Artifact Template Description

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

Dzina lachipangidwe liyenera kukhala lapadera. Titha kukwaniritsa izi, mwachitsanzo, powonjezera dzina lanjira (mtengo wakusintha .Channel) monga chowonjezera ku dzina lazopangidwazo: artifact: doc-{{ .Channel }}. Koma muyenera kumvetsetsa kuti poitanitsa kuchokera kuzinthu zakale, muyenera kutchula mayina omwewo.

Pofotokoza chinthu chopangidwa, mawonekedwe otsatirawa a werf amagwiritsidwa ntchito: kukwera. Kukwera kusonyeza chikwatu cha utumiki build_dir imakulolani kuti musunge posungira ya Jekyll pakati pa payipi yothamanga, yomwe kwambiri imafulumizitsa reassembly.

Mwinanso mwawona kugwiritsa ntchito fayilo releases.yml ndi fayilo ya YAML yokhala ndi zotulutsa zomwe zafunsidwa github.com (chinthu chopezeka popanga payipi). Ndikofunikira popanga tsambalo, koma m'nkhani yankhaniyo ndizosangalatsa kwa ife chifukwa zimadalira momwe zilili kugwirizanitsanso chinthu chimodzi chokha - chopangidwa ndi mizu ya tsambalo (sichifunikira muzinthu zina).

Izi zimayendetsedwa pogwiritsa ntchito mawu okhazikika if Pitani ma templates ndi mapangidwe {{ $Root.Files.Get "releases.yml" | sha256sum }} mu siteji magawo. Zimagwira ntchito motere: pomanga chojambula chamtundu wa mizu (zosinthika .Channel wofanana ndi root) fayilo hash releases.yml imakhudza siginecha yonse ya siteji, chifukwa ndi gawo la dzina la Ansible task (parameter name). Choncho, pamene kusintha zomwe zili fayilo releases.yml chinthu chofananiracho chidzalumikizidwanso.

Chonde samalaninso ndikugwira ntchito ndi malo akunja. Mu chifanizo cha chopangidwa kuchokera werf posungira, chikwatu chokha ndichomwe chawonjezeredwa /docs, ndipo kutengera magawo omwe adadutsa, zomwe zalembedwa kapena kubwereza zomwe zimafunikira zimawonjezedwa nthawi yomweyo.

Kuti tigwiritse ntchito template ya artefact kuti tifotokoze za zomwe zidasinthidwa za tchanelo ndi zotulutsidwa, timapanga lupu pakusintha. .WerfVersions Π² werf.yaml:

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

Chifukwa kuzungulira kudzapanga zinthu zingapo (tikukhulupirira), ndikofunikira kuganizira zolekanitsa pakati pawo - mndandanda --- (Kuti mumve zambiri pamasinthidwe amafayilo, onani zolemba). Monga tafotokozera kale, tikamayitana template mu loop, timadutsa magawo amtundu, URL ndi mizu.

Momwemonso, koma popanda kuzungulira, timatcha template ya "zochitika zapadera": pamtundu wa mizu, komanso mtundu wazomwe zawunikiranso:

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

Chonde dziwani kuti chopangira chowunikira chidzamangidwa kokha ngati kusinthako kwakhazikitsidwa .WerfReviewCommit.

Zinthu zakale zakonzeka - ndi nthawi yoti muyambe kuitanitsa!

Chithunzi chomaliza, chopangidwa kuti chiyendetse Kubernetes, ndi NGINX yokhazikika yokhala ndi fayilo yosinthira seva yowonjezeredwa. nginx.conf ndi static kuchokera kuzinthu zakale. Kuphatikiza pa chojambula cha mizu ya tsambalo, tiyenera kubwereza kuzungulira pakusintha .WerfVersions kuitanitsa zinthu zakale za tchanelo ndi kutulutsa mitundu + tsatirani lamulo lachidziwitso lachikale lomwe tidatengera kale. Popeza chinthu chilichonse chimasunga masamba awebusayiti m'zilankhulo ziwiri, timawalowetsa m'malo omwe aperekedwa ndi kasinthidwe.

Kufotokozera kwa chithunzi chomaliza 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 -}}

Chithunzi chowonjezera, chomwe, pamodzi ndi chachikulu, chimakhazikitsidwa pa dera la dev, chili ndi mitundu iwiri yokha ya tsambalo: mtundu wochokera ku ndemanga yobwereza komanso mtundu wamasamba (pali katundu wamba ndipo, ngati mukukumbukira , kutulutsa deta). Chifukwa chake, chithunzi chowonjezeracho chidzasiyana ndi chachikulu chokhacho mu gawo lolowera (ndipo, m'dzina):

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

Monga tafotokozera pamwambapa, chojambula cha kubwereza chidzapangidwa kokha pamene kusintha kwa chilengedwe kumayendetsedwa REVIEW_SHA. Zingakhale zotheka kusapanga chithunzi cha werf-dev ngati palibe kusintha kwa chilengedwe REVIEW_SHA, koma kuti kuyeretsa ndi ndondomeko Zithunzi za Docker mu werf zidagwiritsidwa ntchito pa chithunzi cha werf-dev, tisiya kuti chimangidwe kokha ndi mtundu wamtundu wamtundu (wamangidwa kale), kuti muchepetse kapangidwe ka mapaipi.

Msonkhanowu wakonzeka! Tiyeni tipitirire ku CI/CD ndi ma nuances ofunikira.

Pipeline mu GitLab CI ndi mawonekedwe amphamvu yomanga

Pamene tikugwira ntchito yomanga tiyenera kuyika zosintha zachilengedwe zomwe zimagwiritsidwa ntchito werf.yaml. Izi sizikugwira ntchito ku REVIEW_SHA kusinthika, komwe tidzakhazikitsa poyimba mapaipi kuchokera pa hook ya GitHub.

Tidzapanga zofunikira zakunja mu Bash script generate_artifacts, yomwe ipanga mapaipi awiri a GitLab:

  • fayilo releases.yml ndi data yotulutsidwa,
  • fayilo common_envs.sh, yokhala ndi zosintha zachilengedwe zomwe ziyenera kutumizidwa kunja.

Zomwe zili mufayilo generate_artifacts mudzapeza m'nkhani yathu nkhokwe ndi zitsanzo. Kulandira deta palokha si nkhani ya nkhaniyi, koma wapamwamba common_envs.sh ndi zofunika kwa ife, chifukwa ntchito ya werf imadalira pa izo. Chitsanzo cha zomwe zili:

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'

Mungagwiritse ntchito zotsatira za script yotere, mwachitsanzo, pogwiritsa ntchito ntchito ya Bash source.

Tsopano pakubwera gawo losangalatsa. Kuti zonse zomanga ndi kutumizidwa kwa pulogalamuyo zigwire ntchito moyenera, ndikofunikira kuwonetsetsa kuti werf.yaml anali momwemonso osachepera mkati mwa payipi imodzi. Ngati chikhalidwechi sichinakwaniritsidwe, ndiye kuti siginecha za magawo omwe werf amawerengera panthawi ya msonkhano ndipo, mwachitsanzo, kutumiza, kudzakhala kosiyana. Izi zitha kubweretsa vuto pakutumiza, chifukwa ... chithunzi chofunikira kuti atumizidwe chidzasowa.

Mwa kuyankhula kwina, ngati panthawi yosonkhanitsa chithunzi cha tsambalo zidziwitso za kutulutsidwa ndi kumasulira ndizofanana, ndipo panthawi yotumizira mtundu watsopano umatulutsidwa ndipo zosintha za chilengedwe zimakhala ndi makhalidwe osiyanasiyana, ndiye kuti kutumizidwa kudzalephera ndi cholakwika: pambuyo pa zonse, chojambula cha mtundu watsopano sichinamangidwebe.

Ngati m'badwo werf.yaml zimadalira deta kunja (mwachitsanzo, mndandanda wa Mabaibulo panopa, monga ifeyo), ndiye zikuchokera ndi mfundo za deta imeneyi ayenera kulembedwa mu payipi. Izi ndizofunikira makamaka ngati magawo akunja amasintha nthawi zambiri.

Tidzatero kulandira ndi kulemba deta yakunja pa gawo loyamba la payipi ku GitLab (Kumangatu) ndikuwatumiziranso mu mawonekedwe Zithunzi za GitLab CI. Izi zimakupatsani mwayi woyendetsa ndikuyambitsanso ntchito zamapaipi (kumanga, kutumiza, kuyeretsa) ndikusintha komweko mu werf.yaml.

Zamkatimu siteji Kumangatu fayilo .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

Mukajambula zakunja muzojambulazo, mutha kupanga ndi kutumiza pogwiritsa ntchito magawo a mapaipi a GitLab CI: Mangani ndi Kutumiza. Timakhazikitsa payipi yokhayo pogwiritsa ntchito mbedza kuchokera ku GitHub werf repository (ie, pakakhala zosintha pankhokwe pa GitHub). Zambiri za iwo zitha kupezeka muzinthu za projekiti ya GitLab mgawoli CI/CD Zokonda -> Zoyambitsa mapaipi, kenako pangani Webhook yofananira mu GitHub (Zokonda -> Webhooks).

Ntchito yomanga idzawoneka motere:

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 iwonjezera zinthu ziwiri zakale kuchokera pa siteji mpaka pomanga Kumangatu, kotero timatumiza zosintha zomwe zili ndi deta yokonzekera pogwiritsa ntchito zomangamanga source common_envs.sh. Timayamba gawo lomanga muzochitika zonse, kupatula poyambitsa payipi molingana ndi ndandanda. Malinga ndi ndondomekoyi, tidzayendetsa payipi yoyeretsera - pamenepa palibe chifukwa chochitira msonkhano.

Pagawo lotumiza, tifotokoza ntchito ziwiri - padera kuti zitumizidwe kumagulu opanga ndi ma dev, pogwiritsa ntchito template ya 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

Ntchitozo zimasiyana pongowonetsa masango omwe werf akuyenera kutumizira (WERF_KUBE_CONTEXT), ndikukhazikitsa zosinthika zachilengedwe (environment.name ΠΈ environment.url), zomwe zimagwiritsidwa ntchito mu Helm chart templates. Sitidzapereka zomwe zili mu ma templates, chifukwa ... palibe chosangalatsa pamenepo pamutu womwe ukufunsidwa, koma mutha kuwapeza nkhokwe za nkhaniyo.

Kukhudza komaliza

Popeza mitundu ya werf imatulutsidwa nthawi zambiri, zithunzi zatsopano zimamangidwa pafupipafupi, ndipo Docker Registry imakula mosalekeza. Chifukwa chake, ndikofunikira kukonza zoyeretsera zithunzi zokha potengera ndondomeko. Ndi zophweka kuchita.

Kuti mugwiritse ntchito muyenera:

  • Onjezani sitepe yoyeretsera ku .gitlab-ci.yml;
  • Onjezerani nthawi ndi nthawi ntchito yoyeretsa;
  • Konzani kusintha kwa chilengedwe ndi chizindikiro chofikira kulemba.

Kuwonjezera siteji yoyeretsa ku .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

Tawona kale pafupifupi zonsezi zitakwera pang'ono - kuti muziyeretsa muyenera kulowa mu Docker Registry ndi chizindikiro chomwe chili ndi ufulu wochotsa zithunzi mu Docker Registry (chizindikiro cha ntchito cha GitLab CI sichimatuluka. ali ndi ufulu wotere). Chizindikirocho chiyenera kupangidwa mu GitLab pasadakhale ndipo mtengo wake uyenera kufotokozedwa pazosintha zachilengedwe WERF_IMAGES_CLEANUP_PASSWORD ntchito (Zikhazikiko za CI/CD -> Zosintha).

Kuwonjezera ntchito yoyeretsa ndi ndondomeko yofunikira ikuchitika CI/CD ->
Ndandanda
.

Ndi momwemo: pulojekiti mu Docker Registry sidzakulanso kuchokera pazithunzi zosagwiritsidwa ntchito.

Pamapeto pa gawo lothandiza, ndiroleni ndikukumbutseni kuti mindandanda yonse ya nkhaniyi ikupezeka Giti:

chifukwa

  1. Tinalandira kamangidwe koyenera: chinthu chimodzi pamtundu uliwonse.
  2. Msonkhanowu ndi wapadziko lonse lapansi ndipo sufuna kusintha pamanja pomwe mitundu yatsopano ya werf imatulutsidwa: zolembedwa patsambali zimasinthidwa zokha.
  3. Zithunzi ziwiri zimasonkhanitsidwa kuti zikhale zosiyana.
  4. Zimagwira ntchito mwachangu, chifukwa Caching imagwiritsidwa ntchito momwe mungathere - mtundu watsopano wa werf ukatulutsidwa kapena mbedza ya GitHub itayitanidwa kuti iwunikenso, chojambula chofanana ndi chomwe chasinthidwa chimamangidwanso.
  5. Palibe chifukwa choganizira zochotsa zithunzi zosagwiritsidwa ntchito: kuyeretsa molingana ndi mfundo za werf kumasunga Docker Registry kukhala mwadongosolo.

anapezazo

  • Kugwiritsa ntchito werf kumalola msonkhanowo kuti ugwire ntchito mwachangu chifukwa cha kusungidwa kwa msonkhano womwewo komanso posungira pogwira ntchito ndi nkhokwe zakunja.
  • Kugwira ntchito ndi nkhokwe zakunja za Git kumathetsa kufunikira kophatikiza malo onse nthawi iliyonse kapena kubwezeretsanso gudumu ndi malingaliro okhathamira. werf amagwiritsa ntchito cache ndikupanga cloning kamodzi kokha, kenako amagwiritsa ntchito fetch ndipo pokhapokha pakufunika.
  • Kutha kugwiritsa ntchito ma template a Go mufayilo yosinthira yomanga werf.yaml amakulolani kufotokoza msonkhano umene zotsatira zake zimadalira deta yakunja.
  • Kugwiritsa ntchito mount in werf kumafulumizitsa kwambiri kusonkhanitsa zinthu zakale - chifukwa cha posungira, zomwe ndizofala pamapaipi onse.
  • werf imapangitsa kukhala kosavuta kukonza zoyeretsa, zomwe ndizofunikira kwambiri pomanga mwamphamvu.

PS

Werenganinso pa blog yathu:

Source: www.habr.com

Kuwonjezera ndemanga