Mun riga mun yi magana game da kayan aikin mu na GitOps fiye da sau ɗaya. , kuma a wannan lokacin muna so mu raba kwarewarmu wajen haɗa shafin tare da takardun aikin da kansa - (Sigarsa ta Rasha ita ce ). Wannan rukunin yanar gizo ne na yau da kullun, amma taronsa yana da ban sha'awa domin an gina shi ta amfani da adadi mai ƙarfi na kayan tarihi.

Shiga cikin nuances na tsarin rukunin yanar gizon: samar da menu na gama gari don duk nau'ikan, shafuka tare da bayani game da sakewa, da sauransu. - ba za mu yi ba. Madadin haka, bari mu mai da hankali kan batutuwa da fasalulluka na taro mai ƙarfi da ɗan kan hanyoyin CI/CD masu rakiyar.
Gabatarwa: yadda shafin ke aiki
Don farawa, ana adana takaddun werf tare da lambar sa. Wannan yana sanya wasu buƙatun ci gaba waɗanda gabaɗaya suka wuce iyakar wannan labarin, amma aƙalla ana iya cewa:
- Sabbin ayyukan werf bai kamata a saki ba tare da sabunta takaddun ba kuma, akasin haka, duk wani canje-canje a cikin takaddun yana nuna sakin sabon sigar werf;
- Aikin yana da ingantaccen ci gaba: ana iya fitar da sabbin sigogi sau da yawa a rana;
- Duk wani aiki na hannu don tura rukunin yanar gizo tare da sabon nau'in takaddun shaida yana da aƙalla m;
- Aikin yana ɗaukar hanyar ma'ana , tare da tashoshi na kwanciyar hankali 5. Tsarin sakewa ya ƙunshi jerin juzu'ai ta hanyar tashoshi don haɓaka kwanciyar hankali: daga alpha zuwa dutsen-m;
- Shafin yana da nau'in harshen Rashanci, wanda "rayuwa kuma yana haɓaka" (watau, abin da ke ciki ya sabunta) a layi daya tare da ainihin (watau, Turanci).
Don ɓoye duk wannan "dakin ciki" daga mai amfani, yana ba shi wani abu wanda "kawai yana aiki", mun yi raba werf shigarwa da sabunta kayan aiki Shin . Kuna buƙatar kawai saka lambar sakin da tashar kwanciyar hankali da kuke shirye don amfani, kuma multiwerf zai bincika idan akwai sabon sigar akan tashar kuma zazzage shi idan ya cancanta.
A cikin menu na zaɓin sigar akan gidan yanar gizon, ana samun sabbin nau'ikan werf a kowace tasha. Ta hanyar tsoho, ta adireshin sigar tashar da ta fi karɓuwa don sabon saki yana buɗewa - ana kuma ƙididdige shi ta injunan bincike. Ana samun takaddun tashar tashar a adireshi daban-daban (misali, don sakin beta 1.0).
Gabaɗaya, rukunin yanar gizon yana da nau'ikan iri masu zuwa:
- tushen (buɗe ta tsohuwa),
- ga kowane tashar sabuntawa mai aiki na kowane saki (misali, ).
Don samar da takamaiman sigar rukunin yanar gizon, gabaɗaya, ya isa a haɗa shi ta amfani da shi ta hanyar gudu a cikin directory /docs werf ma'ajiyar umarni daidai (jekyll build), bayan canzawa zuwa Git tag na sigar da ake buƙata.
Ya rage kawai don ƙara cewa:
- ana amfani da mai amfani da kanta (werf) don haɗuwa;
- An gina matakan CI / CD akan GitLab CI;
- kuma duk wannan, ba shakka, yana gudana a Kubernetes.
ayyuka
Yanzu bari mu tsara ayyuka waɗanda ke la'akari da duk ƙayyadaddun da aka bayyana:
- Bayan canza sigar werf akan kowane tashar sabuntawa ya kamata a sabunta takaddun da ke shafin ta atomatik.
- Don ci gaba kuna buƙatar samun damar wani lokaci duba sigar samfoti na rukunin yanar gizon.
Dole ne a sake tattara rukunin yanar gizon bayan canza sigar akan kowane tashoshi daga alamun Git masu dacewa, amma yayin gina hoton za mu sami fasali masu zuwa:
- Tun da jerin sigogin akan tashoshi suna canzawa, kawai dole ne a sake gina takaddun don tashoshi inda sigar ta canza. Bayan haka, sake gina duk abin ba shi da kyau sosai.
- Saitin tashoshi don sakewa na iya canzawa. A wani lokaci a cikin lokaci, alal misali, ƙila ba za a sami sigar tashoshi mafi kwanciyar hankali fiye da sakin farko na 1.1 ba, amma bayan lokaci za su bayyana - a wannan yanayin, shin bai kamata ku canza taron da hannu ba?
Sai dai itace cewa taro ya dogara da canza bayanan waje.
Aiwatarwa
Zabar Hanya
A madadin, zaku iya gudanar da kowane sigar da ake buƙata azaman keɓaɓɓen kwafsa a Kubernetes. Wannan zaɓin yana nuna mafi girman adadin abubuwa a cikin tari, wanda zai yi girma tare da haɓaka adadin bargawar sakin werf. Kuma wannan, bi da bi, yana nufin ƙarin kulawa mai rikitarwa: kowane nau'in yana da sabar HTTP ta kansa, kuma tare da ƙaramin kaya. Tabbas, wannan kuma yana haifar da ƙarin farashin albarkatun ƙasa.
Muka dauki hanya daya harhada duk sigogin da suka dace a hoto daya. Ƙididdigar da aka haɗa na duk nau'ikan rukunin yanar gizon suna cikin akwati tare da NGINX, kuma zirga-zirga zuwa ƙayyadaddun ƙaddamarwa yana zuwa ta hanyar NGINX Ingress. Tsari mai sauƙi - aikace-aikacen da ba ta da ƙasa - yana ba ku damar sauƙaƙe ƙaddamarwa (dangane da kaya) ta amfani da Kubernetes kanta.
Don zama madaidaici, muna tattara hotuna guda biyu: ɗaya don da'irar samarwa, na biyu shine ƙarin ƙarin don da'irar dev. Ana amfani da ƙarin hoton (wanda aka ƙaddamar) kawai akan da'irar dev tare da babban ɗaya kuma yana ƙunshe da sigar rukunin yanar gizon daga aikin bita, kuma ana yin zirga-zirga tsakanin su ta amfani da albarkatun Ingress.
werf vs git clone da kayan tarihi
Kamar yadda aka riga aka ambata, don samar da kididdigar rukunin yanar gizo don takamaiman sigar takaddun, kuna buƙatar ginawa ta hanyar canzawa zuwa alamar ma'ajiyar da ta dace. Hakanan zaka iya yin haka ta hanyar rufe ma'ajiyar duk lokacin da ka gina, zaɓi alamun da suka dace daga jerin. Duk da haka, wannan aiki ne mai mahimmancin albarkatu kuma, haka ma, yana buƙatar rubuta umarni marasa mahimmanci ... Wani babban hasara shi ne cewa tare da wannan hanya babu wata hanya ta cache wani abu yayin taro.
Anan werf mai amfani da kansa ya zo don taimakonmu, yana aiwatarwa smart caching da kuma ba ka damar amfani . Yin amfani da werf don ƙara lamba daga ma'ajiyar kayan aiki zai ƙara saurin ginin, saboda werf da gaske yana rufe ma'ajin sau ɗaya sannan ya aiwatar kawai fetch idan ya cancanta. Bugu da ƙari, lokacin ƙara bayanai daga ma'ajiyar, za mu iya zaɓar kawai kundayen adireshi (a cikin yanayinmu wannan shine kundin adireshi). docs), wanda zai rage yawan adadin bayanan da aka ƙara.
Tunda Jekyll kayan aiki ne da aka ƙera don tattara bayanai masu mahimmanci kuma ba a buƙata a hoto na ƙarshe, zai zama ma'ana a haɗa a ciki. , kuma cikin hoton ƙarshe shigo da sakamakon tattarawa kawai.
Muna rubuta werf.yaml
Don haka, mun yanke shawarar cewa za mu tattara kowace siga a cikin kayan aikin werf daban. Duk da haka mu ba mu san adadin waɗannan kayan tarihi nawa za su kasance yayin taro ba, don haka ba za mu iya rubuta ƙayyadaddun ƙayyadaddun ginin ginin ba (a zahiri magana, har yanzu muna iya, amma ba zai zama gaba ɗaya tasiri ba).
werf yana ba ku damar amfani a cikin fayil ɗin daidaitawa (werf.yaml), kuma wannan ya sa ya yiwu haifar da config akan tashi dangane da bayanan waje (abin da kuke buƙata!). Bayanan waje a cikin yanayinmu shine bayanai game da sigogi da sakewa, akan abin da muke tattara adadin kayan tarihi da ake buƙata kuma a sakamakon haka muna samun hotuna guda biyu: werf-doc и werf-dev don gudanar da ayyuka daban-daban.
Ana wuce bayanan waje ta hanyar masu canjin yanayi. Ga abubuwan da suka yi:
-
RELEASES- layi mai jerin abubuwan da aka sakewa da kuma daidaitaccen nau'in werf na yanzu, a cikin nau'i na jerin ƙimar sararin samaniya a cikin tsari.<НОМЕР_РЕЛИЗА>%<НОМЕР_ВЕРСИИ>... Misali:1.0%v1.0.4-beta.20 -
CHANNELS- layi tare da jerin tashoshi da kuma daidaitaccen sigar werf na yanzu, a cikin nau'i na jerin ƙimar sararin samaniya a cikin tsari.<КАНАЛ>%<НОМЕР_ВЕРСИИ>... Misali:1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22 -
ROOT_VERSION- sigar sakin werf don nunawa ta tsohuwa akan rukunin yanar gizon (ba koyaushe yana zama dole a nuna takaddun ta mafi girman lambar sakin ba). Misali:v1.0.4-beta.20 -
REVIEW_SHA- hash na aikin bita wanda daga ciki kuke buƙatar gina sigar don madauki na gwaji.
Za a cika waɗannan masu canji a cikin bututun GitLab CI, da kuma yadda aka rubuta daidai a ƙasa.
Da farko, don dacewa, mun ayyana a werf.yaml Jeka masu canjin samfuri, sanya musu ƙima daga masu canjin yanayi:
{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }} Bayanin kayan tarihi don tattara sigar rukunin rukunin yanar gizon gabaɗaya iri ɗaya ne ga duk lamuran da muke buƙata (ciki har da samar da tushen sigar, da kuma sigar da'irar dev). Don haka, za mu matsar da shi zuwa wani shinge na daban ta amfani da aikin define - don sake amfani da na gaba include. Za mu ƙaddamar da mahawara masu zuwa ga samfur:
-
Version- halitta version (tag sunan); -
Channel- sunan tashar sabuntawa wanda aka samar da kayan tarihi; -
Commit- yi zanta, idan an ƙirƙira kayan aikin don yin bita; - mahallin.
Bayanin Samfurin Kayan Aikin Gaggawa
{{- 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 }} Dole ne sunan kayan aikin ya zama na musamman. Za mu iya cimma wannan, alal misali, ta ƙara sunan tashar (darajar madaidaicin .Channel) a matsayin kari ga sunan kayan tarihi: artifact: doc-{{ .Channel }}. Amma kuna buƙatar fahimtar cewa lokacin shigo da kayayyaki daga kayan tarihi, kuna buƙatar komawa zuwa sunaye iri ɗaya.
Lokacin da aka kwatanta kayan tarihi, ana amfani da fasalin werf mai zuwa: . Hauwa yana nuna jagorar sabis build_dir yana ba ku damar adana cache Jekyll tsakanin bututun mai, wanda mahimmanci yana hanzarta sake haɗuwa.
Wataƙila ka lura da amfani da fayil ɗin releases.yml fayil ne na YAML tare da bayanan sakin da aka nema daga (wani kayan tarihi da aka samu lokacin aiwatar da bututun). Ana bukatan lokacin da ake hada rukunin yanar gizon, amma a mahallin labarin yana da ban sha'awa a gare mu domin ya dogara da yanayinsa. sake haɗa kayan tarihi guda ɗaya kawai - wani kayan tarihi na tushen sigar rukunin yanar gizon (ba a buƙatar shi a cikin sauran kayan tarihi).
Ana aiwatar da wannan ta amfani da bayanin sharadi if Je samfuri da ƙira {{ $Root.Files.Get "releases.yml" | sha256sum }} a mataki . Yana aiki kamar haka: lokacin gina kayan tarihi don sigar tushen (mai canzawa .Channel daidai da root) fayil hash releases.yml yana rinjayar sa hannun dukkan matakin, tun da yake yana daga cikin sunan aikin Mai yiwuwa (parameter name). Don haka, lokacin canzawa abun ciki fayil releases.yml za a sake haɗa kayan tarihi da suka dace.
Da fatan za a kuma kula da aiki tare da wurin ajiyar waje. A cikin hoton kayan tarihi daga , directory kawai aka ƙara /docs, kuma ya danganta da sigogin da aka wuce, ana ƙara bayanan alamar da ake buƙata ko aikin bita nan da nan.
Don amfani da samfurin kayan tarihi don samar da kwatancen kayan aikin da aka canjawa wuri na tashoshi da sakewa, muna tsara madauki akan mai canzawa. .WerfVersions в werf.yaml:
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}} Domin madauki zai haifar da kayan tarihi da yawa (muna fatan haka), wajibi ne a yi la'akari da mai raba tsakanin su - jerin. --- (Don ƙarin bayani kan daidaitawar fayil ɗin daidaitawa, duba ). Kamar yadda aka bayyana a baya, lokacin kiran samfuri a cikin madauki, muna wuce sigogin sigar, URL da mahallin tushen.
Hakazalika, amma ba tare da madauki ba, muna kiran samfurin kayan tarihi don "lambobi na musamman": don sigar tushen, da kuma sigar daga aikin bita:
{{ 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 }} Lura cewa kayan aikin aikin bita za a gina su ne kawai idan an saita m .WerfReviewCommit.
An shirya kayan tarihi - lokaci yayi da za a fara shigo da kaya!
Hoton ƙarshe, wanda aka ƙera don gudana akan Kubernetes, NGINX ne na yau da kullun tare da ƙara fayil ɗin saitin uwar garken nginx.conf kuma a tsaye daga kayan tarihi. Baya ga kayan tarihi na tushen sigar rukunin yanar gizon, muna buƙatar maimaita madauki akan madaidaicin .WerfVersions don shigo da kayan tarihi na tashar da sigar saki + bi ka'idar sanya sunan kayan tarihi da muka karɓa a baya. Tun da kowane kayan tarihi yana adana nau'ikan rukunin yanar gizon don harsuna biyu, muna shigo da su cikin wuraren da tsarin ya tanadar.
Bayanin hoton ƙarshe 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 -}}Ƙarin hoton, wanda, tare da babban, an ƙaddamar da shi a kan tsarin dev, ya ƙunshi nau'i biyu na rukunin yanar gizon: sigar daga aikin bita da kuma tushen shafin (akwai dukiyar gabaɗaya kuma, idan kun tuna). , bayanan saki). Don haka, ƙarin hoton zai bambanta da babba kawai a cikin sashin shigo da kaya (kuma, ba shakka, a cikin sunan):
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 }} Kamar yadda aka ambata a sama, kayan aikin aikin bita za a samar da su ne kawai lokacin da aka saita canjin yanayi REVIEW_SHA. Zai yuwu a ƙi samar da hoton werf-dev kwata-kwata idan babu canjin yanayi REVIEW_SHA, amma domin Hotunan Docker a cikin werf sun yi aiki don hoton werf-dev, za mu bar shi don gina shi kawai tare da tushen kayan tarihi (an riga an gina shi ta wata hanya), don sauƙaƙe tsarin bututun.
An shirya taron! Bari mu matsa zuwa CI/CD da mahimman nuances.
Bututun bututu a GitLab CI da fasalulluka na gini mai ƙarfi
Lokacin gudanar da ginin muna buƙatar saita masu canjin yanayi da ake amfani da su werf.yaml. Wannan baya shafi madaidaicin REVIEW_SHA, wanda zamu saita lokacin kiran bututun daga GitHub ƙugiya.
Za mu samar da mahimman bayanan waje a cikin rubutun Bash generate_artifacts, wanda zai samar da kayan aikin bututun GitLab guda biyu:
- fayil
releases.ymltare da bayanan fitarwa, - fayil
common_envs.sh, dauke da masu canjin yanayi da za a fitar dashi.
Abubuwan da ke cikin fayil generate_artifacts za ku samu a cikin mu . Karɓar bayanan da kansa ba batun labarin ba ne, amma fayil ɗin common_envs.sh yana da mahimmanci a gare mu, saboda aikin werf ya dogara da shi. Misalin abun cikinsa:
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' Kuna iya amfani da fitowar irin wannan rubutun, misali, ta amfani da aikin Bash source.
Yanzu ya zo sashin nishaɗi. Domin duka ginawa da ƙaddamar da aikace-aikacen suyi aiki daidai, wajibi ne a tabbatar da hakan werf.yaml ya kasance duk daya mafi ƙarancin cikin bututun daya. Idan wannan yanayin bai cika ba, sa hannu na matakan da werf ke ƙididdigewa yayin taro kuma, alal misali, ƙaddamarwa, zai bambanta. Wannan zai haifar da kuskuren turawa, saboda ... hoton da ake buƙata don turawa zai ɓace.
A wasu kalmomi, idan yayin taron hoton shafin bayanan game da sakewa da nau'ikan iri ɗaya ne, kuma a lokacin ƙaddamar da sabon sigar kuma masu canjin yanayi suna da ƙima daban-daban, to aikin zai gaza tare da kuskure: bayan haka, har yanzu ba a gina kayan aikin sabon sigar ba.
Idan tsararraki werf.yaml ya dogara da bayanan waje (alal misali, jerin nau'ikan yanzu, kamar yadda yake a cikin yanayinmu), sannan a rubuta abun da ke ciki da ƙimar irin waɗannan bayanan a cikin bututun. Wannan yana da mahimmanci musamman idan sigogi na waje suna canzawa sau da yawa.
Za mu karba da rikodin bayanan waje a matakin farko na bututun mai a GitLab (Gina) da kuma watsa su gaba a cikin tsari GitLab CI kayan tarihi. Wannan zai ba ku damar gudanar da sake kunna ayyukan bututun (gina, turawa, tsaftacewa) tare da tsari iri ɗaya a ciki. werf.yaml.
Abubuwan da ke cikin mataki Gina fayil .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 weekBayan kama bayanan waje a cikin kayan tarihi, zaku iya ginawa da turawa ta amfani da daidaitattun matakan bututun GitLab CI: Gina da Sanya. Muna ƙaddamar da bututun kanta ta amfani da ƙugiya daga ma'ajin GitHub na werf (watau, lokacin da akwai canje-canje a cikin ma'ajin GitHub). Ana iya samun bayanan su a cikin kayan aikin GitLab a cikin sashin Saitunan CI/CD -> Abubuwan bututun mai, sannan ƙirƙirar Webhook mai dacewa a GitHub (Saituna -> Webhooks).
Matakin ginawa zai yi kama da haka:
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 zai ƙara kayan tarihi guda biyu daga mataki zuwa matakin ginin Gina, don haka muna fitar da masu canji tare da bayanan shigar da aka shirya ta amfani da ginin source common_envs.sh. Mun fara matakin ginawa a duk lokuta, sai dai ƙaddamar da bututun bisa ga jadawalin. Bisa ga jadawalin, za mu gudanar da bututu don tsaftacewa - a cikin wannan yanayin babu buƙatar yin taro.
A matakin turawa, zamu bayyana ayyuka guda biyu - daban don turawa zuwa samarwa da da'irori, ta amfani da samfurin 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 Ayyukan da gaske sun bambanta kawai wajen nuna mahallin gungu wanda werf ya kamata ya yi aikin turawa (WERF_KUBE_CONTEXT), da kuma saita madaidaicin mahallin madauki (environment.name и environment.url), wanda sannan ana amfani da su a cikin samfuran ginshiƙi na Helm. Ba za mu samar da abubuwan da ke cikin samfuran ba, saboda... Babu wani abu mai ban sha'awa a can don batun da ake tambaya, amma zaka iya samun su a ciki .
Taɓawar ƙarshe
Tunda ana fitar da nau'ikan werf sau da yawa, za a gina sabbin hotuna akai-akai, kuma Docker Registry zai ci gaba da girma. Sabili da haka, yana da mahimmanci don saita tsabtace hoto ta atomatik bisa manufofi. Yana da sauƙin yi.
Don aiwatarwa kuna buƙatar:
- Ƙara matakin tsaftacewa zuwa
.gitlab-ci.yml; - Ƙara aiwatar da aikin tsaftacewa lokaci-lokaci;
- Saita canjin yanayi tare da alamar samun damar rubuta.
Ƙara matakin tsaftacewa zuwa .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
Mun riga mun ga kusan duk waɗannan a sama - kawai don tsaftace shi kuna buƙatar fara shiga cikin Docker Registry tare da alamar da ke da haƙƙin share hotuna a cikin rajistar Docker (tambarin aikin GitLab CI da aka bayar ta atomatik ba shi da shi. haqqoqin haka). Dole ne a ƙirƙiri alamar a GitLab a gaba kuma dole ne a ƙayyade ƙimarta a cikin ma'aunin yanayi WERF_IMAGES_CLEANUP_PASSWORD aikin (Saitunan CI/CD -> Sauye-sauye).
Ƙara aikin tsaftacewa tare da jadawalin da ake buƙata ana yin shi a ciki CI/CD ->
Jadawali.
Shi ke nan: wani aiki a cikin Docker Registry ba zai ci gaba da girma daga hotunan da ba a yi amfani da su ba.
A ƙarshen ɓangaren aiki, bari in tunatar da ku cewa ana samun cikakkun bayanai daga labarin :
- ;
- .
sakamakon
- Mun sami tsarin taro mai ma'ana: kayan tarihi ɗaya a kowace sigar.
- Taro na duniya ne kuma baya buƙatar canje-canje na hannu lokacin da aka fitar da sabbin nau'ikan werf: ana sabunta takaddun akan gidan yanar gizon ta atomatik.
- Hotuna biyu an haɗa su don kwane-kwane daban-daban.
- Yana aiki da sauri, saboda Ana amfani da caching gwargwadon yiwuwa - lokacin da aka fitar da sabon sigar werf ko kuma aka kira ƙugiya ta GitHub don yin bita, kawai abin da ya dace tare da canjin sigar ya sake ginawa.
- Babu buƙatar yin tunani game da share hotunan da ba a yi amfani da su ba: tsaftacewa bisa ga manufofin werf zai kiyaye Docker Registry cikin tsari.
binciken
- Yin amfani da werf yana ba da damar taro don yin aiki da sauri saboda caching na duka taron kanta da caching lokacin aiki tare da wuraren ajiyar waje.
- Yin aiki tare da ma'ajin Git na waje yana kawar da buƙatar rufe dukkan ma'ajiyar kowane lokaci ko sake haifar da dabaran tare da dabaru na ingantawa. werf yana amfani da cache kuma yana yin cloning sau ɗaya kawai, sannan yana amfani da shi
fetchkuma kawai idan ya cancanta. - Ikon amfani da samfuran Go a cikin fayil ɗin daidaitawa
werf.yamlyana ba ku damar kwatanta taro wanda sakamakonsa ya dogara da bayanan waje. - Yin amfani da mount a cikin werf yana hanzarta tattara kayan tarihi - saboda cache, wanda ya zama ruwan dare ga dukkan bututun.
- werf yana sauƙaƙa don saita tsaftacewa, wanda ke da mahimmanci musamman lokacin ginawa da ƙarfi.
PS
Karanta kuma a kan shafinmu:
- «";
- «";
- «";
- «".
source: www.habr.com
