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

Re ke ke ra kena mefuteng ea sebopeho sa sebaka sa marang-rang: ho hlahisa menu e tloaelehileng bakeng sa liphetolelo tsohle, leqephe le nang le tlhahisoleseding e mabapi le ho lokolloa, joalo-joalo, ho e-na le hoo, re tla tsepamisa maikutlo litabeng le likarolo tsa kopano e matla le hanyenyane ka mekhoa e tsamaeang le CI / CD.
Selelekela: Kamoo setša se sebetsang kateng
Ha re qale ka taba ea hore litokomane tsa werf li bolokiloe hammoho le khoutu ea eona. Sena se beha litlhoko tse itseng ho nts'etsopele, tseo ka kakaretso li fetang boholo ba sengoloa sena, empa bonyane re ka re:
- 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 , 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 lejoe le tiileng;
- Sebaka sena se na le mofuta oa puo ea Serussia, e "phelang le ho nts'etsapele" (ke hore litaba tsa eona li nchafalitsoe) ka ho tsamaisana le mofuta oa mantlha (ke hore Senyesemane).
Ho pata "mesebetsi ea ka hare" ho mosebelisi, ho mo fa ntho e "sebetsang feela", re e entse sesebelisoa se arohaneng sa ho kenya le ho nchafatsa werf - sena ke . 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.
Mefuta ea morao-rao ea werf e fumaneha mocha o mong le o mong ho menu ea khetho ea mofuta setšeng. Ka kamehla, ho mofuta o tsitsitseng oa mocha oa tokollo ea morao-rao oa buloa - o boetse o thathamisitsoe ke lienjineri tsa ho batla. Litokomane tsa seteishene li fumaneha liatereseng tse arohaneng (mohlala, bakeng sa tokollo ea beta 1.0).
Ka kakaretso, sebaka sena se na le liphetolelo tse latelang tse fumanehang:
- motso (e bula ka ho sa feleng),
- bakeng sa mocha o mong le o mong o sebetsang oa tokollo ka 'ngoe (mohlala. ).
Ho hlahisa mofuta o itseng oa sebaka, ka kakaretso, ho lekane ho se bokella ho sebelisoa , e sebetsang bukeng /docs taelo e tsamaisanang le werf repository (jekyll build), kaha o se o fetetse ho tag ea Git 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:
- Kamora ho fetola mofuta oa werf ho mocha ofe kapa ofe oa ntlafatso litokomane setšeng li lokela ho nchafatsoa ka bo eona.
- Ho ntshetsa pele o hloka ho khona ka linako tse ling sheba ponelopele ea sebaka.
Sebaka sa marang-rang se tlameha ho khutlisetsoa morao ka mor'a ho fetola mofuta ho mocha ofe kapa ofe ho tsoa ho li-tag tsa Git tse tsamaellanang, empa nakong ea ts'ebetso ea ho bokella 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 ho tloha qalong ha ho monate haholo.
- Sete ea likanale tsa tokollo e ka fetoha. Ka nako e itseng ka nako, mohlala, ho ka 'na ha se ke ha e-ba le phetolelo ea liteishene tse tsitsitseng ho feta ho lokolloa ha 1.1 pele, empa li tla hlaha ka mor'a nako - u ke ke ua fetola mohaho ka letsoho tabeng ena, na?
E hlaha joalo kopano e itšetlehile ka ho fetola data ea kantle.
Ts'ebetsong
Ho khetha mokhoa oa ho atamela
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 haholoanyane: phetolelo e' ngoe le e 'ngoe e na le seva sa eona sa HTTP, se nang le mojaro o monyenyane. Ehlile, sena se boetse se kenyelletsa litšenyehelo tse kholo tsa lisebelisoa.
Re ile ra tsamaea ka tsela e tšoanang e haha liphetolelo tsohle tse hlokahalang setšoantšong se le seng. Li-statics tse hlophisitsoeng tsa mefuta eohle ea sebaka sa marang-rang li ka har'a sets'oants'o se nang le NGINX, 'me sephethephethe se eang ho Deployment e lumellanang se tla ka NGINX Ingress. Sebopeho se bonolo - sesebelisoa se se nang palo - se u lumella ho lekanya Deployment habonolo (ho latela mojaro) u sebelisa Kubernetes ka boeona.
E le ho nepahala haholoanyane, re haha litšoantšo tse peli: e 'ngoe bakeng sa potoloho ea tlhahiso, ea bobeli ke e eketsehileng, bakeng sa potoloho ea dev. Setšoantšo se eketsehileng se sebelisoa (run) feela ho potoloho ea dev hammoho le e kholo 'me e na le mofuta oa sebaka sa marang-rang ho tsoa boitlamo ba tlhahlobo,' me ho tsamaisa lipakeng ho etsoa ho sebelisoa lisebelisoa tsa Ingress.
werf vs git clone le lintho tsa khale
Joalo ka ha ho boletsoe, ho hlahisa li-statics tsa sebaka bakeng sa mofuta o itseng oa litokomane, o hloka ho aha ka ho fetohela ho tag ea polokelo e tsamaellanang. U ka boela ua etsa sena ka ho kopanya polokelo nako le nako ha u haha, u khetha li-tag tse tsamaellanang lethathamong. Leha ho le joalo, ena ke ts'ebetso e nepahetseng ea lisebelisoa 'me, ho phaella 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 leha e le efe nakong ea ho haha.
Mona werf utility ka boeona e tla ho re thusa, ho kenya ts'ebetsong bohlale caching 'me e u lumella ho e sebelisa . Ho sebelisa werf ho eketsa khoutu ho tsoa sebakeng sa polokelo ho tla potlakisa moaho, kaha werf ha e le hantle e kopanya polokelo hang ebe e matha. feela fetch ha ho hlokahala. Ntle le moo, ha re eketsa datha ho tsoa polokelong, re ka khetha feela li-directory tse hlokahalang (ho rona, ena ke bukana ea buka. docs), e tla fokotsa haholo palo ea data e ekelitsoeng.
Kaha Jekyll ke sesebelisoa se etselitsoeng ho bokella lifaele tse tsitsitseng mme ha se hlokehe setšoantšong sa ho qetela, ho tla ba ho utloahalang ho bokella , 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 nakong ea kopano ho tla ba le li-artifact tse kae, kahoo re ke ke ra ngola tlhophiso e tsitsitseng ea ho haha (ho bua ka mokhoa o hlakileng, re ka khona, empa e ke ke ea sebetsa hantle haholo).
werf e u lumella ho e sebelisa faeleng ea hau ea tlhophiso (werf.yaml), 'me sena se etsa hore ho khonehe hlahisa config "on the fly" ho ipapisitse le data ea kantle (seo re se hlokang!). Tabeng ea rona, data ea kantle ke tlhahisoleseling mabapi le liphetolelo le litokollo, ho latela hore na re bokella palo e hlokahalang ea lintho tsa khale mme ka lebaka leo re fumana litšoantšo tse peli: werf-doc и werf-dev bakeng sa ho qala lipotolohong 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, e le lethathamo la boleng bo arohaneng le sebaka 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 ho bonts'a ka mokhoa o ikhethileng sebakeng sa marang-rang (ha se kamehla ho hlokahalang ho hlahisa 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 ho lokelang ho hahuoa mofuta oa potoloho ea liteko.
Liphapang tsena li tla beoa pompong ea GitLab CI, le hore na hantle ho hlalosoa joang ka tlase.
Pele ho tsohle, bakeng sa boiketlo, a re hlaloseng werf.yaml E-ea mefuta e fapaneng ea litempele ka ho li abela 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 mofuta o tsitsitseng oa 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 dev-contour). Ka hona, re tla e isa sebakeng se arohaneng re sebelisa ts'ebetso define - bakeng sa tšebeliso e latelang ka thuso ea 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.
Tlhaloso ea template ea 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 }} Lebitso la maiketsetso le tlameha ho ikhetha. Re ka fihlela sena, mohlala, ka ho eketsa lebitso la mocha (boleng bo feto-fetohang .Channel) joalo ka sehlongoana sa lebitso la maiketsetso: 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 hlophisoa ka lethathamo la litšebeletso tse boletsoeng 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 (sesebedisoa se fumanoeng ha ho etsoa pipeline). Hoa hlokahala ha ho etsoa sebaka sa marang-rang, empa ho latela moelelo oa sehlooho, hoa thahasellisa ho rona hobane boemo ba eona bo itšetlehile ka eona ho kopana hape hoa ntho e le nngwe feela - artifact ea mofuta oa motso oa sebaka (ha e hlokehe linthong tse ling tsa khale).
Sena se etsoa ho sebelisoa opareitara e nang le maemo. if E-ea ho li-template le ho haha {{ $Root.Files.Get "releases.yml" | sha256sum }} sethaleng . E sebetsa ka tsela ena: ha o haha sebopeho 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 artifact ho tloha , 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 artifact ea liphetolelo tsa kanane tse fetisitsoeng le litokollo, re hlophisa loop ka ho feto-fetoha. .WerfVersions в werf.yaml:
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}} Kaha potoloho e tla hlahisa li-artifacts tse 'maloa (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 ). Joalokaha re hlalositse pejana, ha re bitsa template ka loop, re fetisa mekhahlelo ea phetolelo, URL le moelelo oa motso.
Ka mokhoa o ts'oanang, empa ntle le potoloho, 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 }} Hlokomela hore artifact bakeng sa boitlamo ba tlhahlobo e tla hahuoa feela haeba phapang 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 reretsoeng ho sebetsa ho Kubernetes ke NGINX e tloaelehileng e nang le faele ea tlhophiso ea seva e ekelitsoeng ho eona. nginx.conf le li-statics tse tsoang ho li-artifacts. Ho phaella ho artifact ea mofuta oa motso oa sebaka, re hloka ho pheta potoloho ka ho feto-fetoha .WerfVersions ho kenya mocha le ho lokolla li-artifacts tsa mofuta + 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 bakeng sa 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, se hlahisitsoeng ho "dev-circuit" hammoho le se ka sehloohong, 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 (e na le thepa e tloaelehileng mme, haeba u hopola, lokolla data). Kahoo, setšoantšo se eketsehileng se tla fapana le sa mantlha feela karolong ea ho kenya (le, ehlile, 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 ho hlahloba e tla hlahisoa feela ha ho etsoa phetoho ea tikoloho e behiloeng 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 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 motsoako (o se o ntse o hahiloe), ho nolofatsa sebopeho sa lipeipi.
Mohaho o se o 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 tloha hook ea GitHub.
Re tla fetisetsa sebopeho sa data e hlokahalang ea kantle ho script ea Bash generate_artifacts, e tla hlahisa lipeipi tse peli tsa GitLab:
- file
releases.ymlka data ea tokollo, - file
common_envs.sh, e nang le mefuta-futa ea tikoloho bakeng sa ho romelloa.
Likahare tsa faele generate_artifacts u tla e fumana ho rona . Ho fumana data ka boeona ha se taba ea sehlooho, empa faele common_envs.sh e bohlokoa ho rona, hobane ts'ebetso ea werf e 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' Sephetho sa script se joalo se ka sebelisoa, mohlala, ho sebelisa mosebetsi oa Bash source.
Joale ho tla karolo e khahlisang haholo. E le hore kopano le ho tsamaisoa ha kopo ho sebetsa ka nepo, hoa hlokahala ho etsa bonnete ba 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 sethala tseo werf e li balang nakong ea kopano, ka mohlala, ho tsamaisoa, li tla fapana. Sena se tla lebisa phosong ea ho tsamaisa, kaha 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 e mabapi le litokollo le liphetolelo e ts'oana, 'me nakong ea phetisetso e ncha e lokolloa' me mefuta e fapaneng ea tikoloho e na le litekanyetso tse fapaneng, joale phepelo e tla fela ka phoso: ka mor'a tsohle, sebopeho sa mofuta o mocha ha se e-so bokelloe.
Haeba moloko werf.yaml e itšetlehile ka data ea kantle (mohlala, lethathamo la liphetolelo tsa morao-rao, joalo ka rona), joale sebopeho le litekanyetso tsa data e joalo li lokela ho tlalehoa ka har'a pipeline. 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 Lintho tsa khale tsa GitLab CI. 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 weekHa u na le data e kentsoeng ka ntle ho artifact, u ka haha le ho sebelisa mekhahlelo e tloaelehileng ea phaephe ea GitLab CI: Haha 'me U E sebelise. Re qala liphaephe ka botsona re sebelisa lihokelo tse tsoang polokelong ea werf GitHub (ke hore, ha ho na le liphetoho sebakeng sa polokelo ho GitHub). Lintlha tsa bona li ka nkuoa ho thepa ea projeke ea GitLab karolong Litlhophiso tsa CI/CD -> Lithahasello tsa Pipeline, ebe o theha Webhook e tsamaellanang ho GitHub (Litlhophiso -> Li-webhooks).
Sekhahla 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 thakhola sethala sa kaho maemong ohle ntle le ho qala lipeipi ka kemiso. Ka kemiso, re tla qala lipeipi tsa ho hloekisa - ha ho hlokahale ho etsa mohaho tabeng ena.
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 e fapana feela ka sesupo sa maemo a sehlopha seo werf e lokelang ho kenya tšebetsong ho sona (WERF_KUBE_CONTEXT), le ho beha mefuta-futa ea tikoloho ea contour (environment.name и environment.url), tse sebelisoang litempeleng tsa chate ea Helm. Re ke ke ra fana ka litaba tsa litempele, kaha ha ho na letho le khahlisang bakeng sa sehlooho se ntseng se nahanoa, empa u ka li fumana ho .
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 hola khafetsa. Ka hona, hoa hlokahala ho theha ho hloekisa litšoantšo ka mokhoa o itekanetseng ka maano. Ho bonolo haholo ho e etsa.
Ho kenya ts'ebetsong o tla hloka:
- Kenya mohato oa ho hloekisa ho
.gitlab-ci.yml; - Eketsa ts'ebetso ea nako le nako ea mosebetsi oa ho hloekisa;
- Seta sebopeho sa tikoloho ka tokene ea phihlello ea ho ngola.
Kenya 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 batlang e le tsena tsohle tse ka holimo - ho e hloekisa feela, 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 (letšoao le fanoeng ka bo eona la mosebetsi oa GitLab CI ha le na 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 ea hau ea Registry ea Docker ha e sa tla hlola e hola khafetsa ho tsoa litšoantšong tse sa sebelisoeng.
Qetellong ea karolo e sebetsang, ke rata ho u hopotsa hore lintlha tse felletseng tsa sengoloa li fumaneha ho :
- ;
- .
sephetho
- Re na le sebopeho sa kopano se utloahalang: ntho e le 'ngoe ea maiketsetso ka phetolelo.
- Kopano ke ea bokahohleng 'me ha e hloke liphetoho tse etsoang ka letsoho ha mefuta e mecha ea werf e lokolloa: litokomane tse sebakeng sa marang-rang li nchafatsoa ka bohona.
- Litšoantšo tse peli li bokelloa bakeng sa li-contours tse fapaneng.
- E sebetsa ka potlako hobane caching e sebelisoa ho isa tekanyong e phahameng haholo - 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.
- Ha ho na lebaka la ho tšoenyeha ka ho hlakola litšoantšo tse sa sebelisoeng: hloekiso ea leano la werf e tla boloka Registry ea hau ea Docker e le makhethe.
fumanoeng ke
- Ho sebelisa werf ho lumella moaho hore o sebetse kapele ka lebaka la ho ts'oaroa ha moaho ka boyona le ho boloka caching ha o sebetsa le polokelo ea kantle.
- Ho sebetsa le polokelo ea kantle ea Git ho felisa tlhoko ea ho kopanya polokelo nako le nako ka botlalo kapa ho khutlisetsa lebili ka mokhoa o makatsang oa ho ntlafatsa. werf e sebelisa cache le clones hanngoe feela, ebe e sebelisa
fetchmme feela ha ho hlokahala. - Bokhoni ba ho sebelisa litempele tsa Go ho file ea tlhophiso
werf.yamleu lumella ho hlalosa kopano eo sephetho sa eona se itšetlehileng ka data ea kantle. - Ho sebelisa ho kenya 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 bakeng sa meaho e matla.
PES
Bala hape ho blog ea rona:
- «";
- «";
- «";
- «".
Source: www.habr.com
