Nou te deja pale sou zouti GitOps nou an plis pase yon fwa. , ak fwa sa a nou ta renmen pataje eksperyans nou nan rasanble sit la ak dokiman an nan pwojè a li menm - (vèsyon Ris li a se ). Sa a se yon sit òdinè estatik, men asanble li yo enteresan nan ke li se bati lè l sèvi avèk yon nimewo dinamik nan zafè.

Ale nan nuans yo nan estrikti sit la: jenere yon meni komen pou tout vèsyon, paj ki gen enfòmasyon sou degaje, elatriye. - nou pa pral. Olye de sa, ann konsantre sou pwoblèm ak karakteristik asanble dinamik ak yon ti kras sou pwosesis CI/CD ki akonpaye yo.
Entwodiksyon: ki jan sit la ap travay
Pou kòmanse, dokiman werf yo estoke ansanm ak kòd li yo. Sa a enpoze sèten kondisyon devlopman ki jeneralman depase sijè ki abòde lan atik sa a, men nan yon minimòm li ka di ke:
- Nouvo fonksyon werf pa ta dwe lage san yo pa mete ajou dokiman an epi, kontrèman, nenpòt chanjman nan dokiman an vle di lage yon nouvo vèsyon werf;
- Pwojè a gen yon devlopman san patipri entansif: nouvo vèsyon yo ka lage plizyè fwa nan yon jounen;
- Nenpòt operasyon manyèl pou deplwaye yon sit ak yon nouvo vèsyon dokiman yo omwen fatigan;
- Pwojè a adopte yon apwòch semantik , ak 5 chanèl estabilite. Pwosesis lage a enplike nan pasaj sekans vèsyon nan chanèl yo nan lòd pou ogmante estabilite: soti nan alfa nan wòch-solid;
- Sit la gen yon vèsyon nan lang Ris, ki "viv epi devlope" (sa vle di, kontni an mete ajou) an paralèl ak vèsyon prensipal la (sa vle di, lang angle).
Pou kache tout bagay sa a "kizin enteryè" nan men itilizatè a, ofri l 'yon bagay ki "jis travay", nou te fè separe werf enstalasyon ak zouti ajou - Eske . Ou jis bezwen presize nimewo lage a ak chanèl estabilite ke ou pare pou itilize, ak multiwerf pral tcheke si gen yon nouvo vèsyon sou chanèl la epi telechaje li si sa nesesè.
Nan meni seleksyon vèsyon an sou sit entènèt la, dènye vèsyon werf yo disponib nan chak chanèl. Pa default, pa adrès vèsyon an nan chanèl ki pi estab pou dènye lage a ouvè - li se tou endis pa motè rechèch. Dokimantasyon pou kanal la disponib nan adrès separe (pa egzanp, pou beta lage 1.0).
An total, sit la gen vèsyon sa yo ki disponib:
- rasin (ouvè pa default),
- pou chak chanèl aktyalizasyon aktif nan chak lage (pa egzanp, ).
Pou jenere yon vèsyon espesifik nan yon sit, an jeneral, li se ase yo konpile li lè l sèvi avèk pa kouri nan anyè a /docs werf depo korespondan kòmand (jekyll build), apre yo fin chanje nan tag Git nan vèsyon ki nesesè yo.
Li sèlman rete pou ajoute ke:
- se sèvis piblik la li menm (werf) itilize pou asanble;
- Pwosesis CI/CD yo bati sou baz GitLab CI;
- ak tout bagay sa a, nan kou, kouri nan Kubernetes.
travay
Koulye a, an n fòme travay ki pran an kont tout spesifik ki dekri yo:
- Apre chanje vèsyon an werf sou nenpòt chanèl aktyalizasyon dokiman sou sit la ta dwe otomatikman mete ajou.
- Pou devlopman ou bezwen pou kapab pafwa wè vèsyon preview nan sit la.
Sit la dwe rekonpile apre chanje vèsyon an sou nenpòt chanèl soti nan tags Git korespondan yo, men nan pwosesis la nan bati imaj la nou pral jwenn karakteristik sa yo:
- Depi lis vèsyon sou chanèl yo chanje, li nesesè sèlman pou rebati dokimantasyon an pou chanèl kote vèsyon an chanje. Apre yo tout, rekonstwi tout bagay ankò se pa trè bèl.
- Ansanm chanèl pou degaje yo ka chanje. Nan kèk pwen nan tan, pou egzanp, ka pa gen yon vèsyon sou chanèl yo ki pi estab pase aksè bonè 1.1 lage, men apre yon tan yo pral parèt - nan ka sa a, ou pa ta dwe chanje asanble a manyèlman?
Li sanble ke asanble depann sou chanje done ekstèn.
Aplikasyon
Chwazi yon apwòch
Altènativman, ou ka kouri chak vèsyon ki nesesè yo kòm yon gous separe nan Kubernetes. Opsyon sa a implique yon pi gwo kantite objè nan gwoup la, ki pral grandi ak ogmantasyon nan kantite degaje werf ki estab. Lè sa a, nan vire, implique antretyen pi konplèks: chak vèsyon gen pwòp sèvè HTTP li yo, ak yon ti chaj. Natirèlman, sa a tou enplike nan pi gwo depans resous yo.
Nou pran menm chemen an rasanble tout vèsyon ki nesesè yo nan yon sèl imaj. Estatik yo konpile nan tout vèsyon nan sit la yo sitiye nan yon veso ki gen NGINX, ak trafik nan Deplwaman ki koresponn lan vini nan NGINX Ingress. Yon estrikti senp - yon aplikasyon apatrid - pèmèt ou fasilman echèl Deplwaman (ki depann sou chaj la) lè l sèvi avèk Kubernetes tèt li.
Pou pi presi, n ap kolekte de imaj: youn pou kous pwodiksyon an, dezyèm lan se yon lòt pou kous dev la. Imaj adisyonèl la itilize (lanse) sèlman sou kous dev la ansanm ak youn prensipal la epi li gen vèsyon an nan sit la ki soti nan komite revizyon an, ak routage ant yo fèt lè l sèvi avèk resous Ingress.
werf vs git klonaj ak zafè
Kòm deja mansyone, yo nan lòd yo jenere estatik sit pou yon vèsyon espesifik nan dokiman an, ou bezwen bati pa chanje nan tag nan repozitwa apwopriye. Ou ta ka fè sa tou pa klonaj depo a chak fwa ou bati, chwazi Tags ki apwopriye yo nan yon lis. Sepandan, sa a se yon operasyon olye resous-entansif epi, anplis, mande pou ekri enstriksyon ki pa trivial ... Yon lòt dezavantaj grav se ke ak apwòch sa a pa gen okenn fason yo kachèt yon bagay pandan asanble.
Isit la sèvis piblik la werf tèt li vini nan èd nou an, mete ann aplikasyon kachèt entelijan epi pèmèt ou itilize . Sèvi ak werf pou ajoute kòd ki soti nan depo a pral siyifikativman akselere bati a, paske werf esansyèlman klon repozitwa a yon fwa ak Lè sa a, egzekite sèlman fetch Si nesesè. Anplis de sa, lè w ajoute done ki soti nan depo a, nou ka chwazi sèlman repèrtwar ki nesesè yo (nan ka nou an sa a se anyè a. docs), ki pral siyifikativman redwi kantite done te ajoute.
Depi Jekyll se yon zouti ki fèt pou konpile done estatik epi li pa nesesè nan imaj final la, li ta lojik pou konpile nan , ak nan imaj final la enpòte sèlman rezilta konpilasyon an.
Nou ekri werf.yaml
Se konsa, nou deside ke nou ta konpile chak vèsyon nan yon asosye werf separe. Sepandan nou nou pa konnen konbyen nan zafè sa yo pral genyen pandan asanble a, Se konsa, nou pa ka ekri yon konfigirasyon bati fiks (fè egzateman pale, nou toujou kapab, men li pa pral totalman efikas).
werf pèmèt ou itilize nan dosye konfigirasyon ou a (werf.yaml), e sa fè li posib jenere konfigirasyon sou vole depann sou done ekstèn (sa ou bezwen!). Done ekstèn nan ka nou an se enfòmasyon sou vèsyon ak degaje, sou baz ki nou kolekte kantite nesesè nan zafè ak kòm yon rezilta nou jwenn de imaj: werf-doc и werf-dev kouri sou sikui diferan.
Done ekstèn yo pase nan varyab anviwònman an. Men konpozisyon yo:
-
RELEASES- yon liy ak yon lis degaje ak vèsyon aktyèl korespondan nan werf, nan fòm lan nan yon lis espas separe nan valè nan fòma a<ĐĐĐĐĐ _Đ ĐĐĐĐĐ>%<ĐĐĐĐĐ _ĐĐĐ ĐĄĐĐ>... Egzanp:1.0%v1.0.4-beta.20 -
CHANNELS- yon liy ki gen yon lis chanèl ak vèsyon aktyèl werf ki koresponn lan, nan fòm yon lis valè ki separe ak espas ki nan fòma a<ĐĐĐĐĐ>%<ĐĐĐĐĐ _ĐĐĐ ĐĄĐĐ>... Egzanp:1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22 -
ROOT_VERSIONâ vèsyon werf lage yo dwe parèt pa default sou sit la (li pa toujou nesesè yo montre dokiman pa nimewo lage ki pi wo a). Egzanp:v1.0.4-beta.20 -
REVIEW_SHAâ hash nan komèt revizyon ki soti nan ki ou bezwen bati vèsyon an pou bouk tès la.
Varyab sa yo pral ranpli nan tiyo GitLab CI a, ak ki jan egzakteman yo ekri anba a.
Premye a tout, pou konvenyans, nou defini nan werf.yaml Ale varyab modèl, bay yo valè nan varyab anviwònman an:
{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }} Deskripsyon nan zafè a pou konpile vèsyon an estatik nan sit la se jeneralman menm bagay la tou pou tout ka nou bezwen (ki gen ladan jenere vèsyon an rasin, osi byen ke vèsyon an pou kous dev la). Se poutèt sa, nou pral deplase li nan yon blòk separe lè l sèvi avèk fonksyon an define - pou itilize ankò ki vin apre include. Nou pral pase agiman sa yo nan modèl la:
-
Versionâ vèsyon pwodwi (non tag); -
Channelâ non chanèl aktyalizasyon pou ki asosye a te pwodwi; -
Commitâ komèt hash, si zafè a te pwodwi pou yon komèt revizyon; - kontèks.
Artifact Modèl Deskripsyon
{{- 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 }} Non zafè a dwe inik. Nou ka reyalize sa a, pou egzanp, lè nou ajoute non chanèl la (valè varyab la .Channel) kòm yon sifiks nan non asosye a: artifact: doc-{{ .Channel }}. Men, ou bezwen konprann ke lè enpòte soti nan zafè, w ap bezwen fè referans a menm non yo.
Lè w ap dekri yon zafè, yo itilize karakteristik werf sa a: . Mounting ki endike anyè sèvis la build_dir pèmèt ou sove kachèt Jekyll ant kouri tiyo, ki siyifikativman akselere remonte.
Ou ka remake tou itilizasyon dosye a releases.yml se yon fichye YAML ak done lage yo mande nan men (yon zafè jwenn lè w ap egzekite yon tiyo). Li nesesè lè w ap konpile sit la, men nan kontèks atik la li enteresan pou nou paske li depann de eta li. remonte yon sèl zafè â yon zafè nan vèsyon rasin nan sit la (li pa nesesè nan lòt zafè).
Sa a se aplike lè l sèvi avèk deklarasyon an kondisyonèl if Ale modèl ak desen {{ $Root.Files.Get "releases.yml" | sha256sum }} nan etap . Li travay jan sa a: lè bati yon zafè pou vèsyon rasin lan (varyab .Channel egal a root) file hash releases.yml afekte siyati etap la tout antye, paske li se yon pati nan non an nan travay la Ansible (paramèt name). Kidonk, lè w ap chanje kontni dosye releases.yml yo pral reyini ak korespondan an.
Tanpri tou peye atansyon sou travay ak yon depo ekstèn. Nan imaj la nan yon asosye soti nan , se sèlman anyè a te ajoute /docs, epi tou depann de paramèt yo pase, done yo nan tag obligatwa a oswa komèt revizyon yo ajoute imedyatman.
Pou itilize modèl asosye a pou jenere yon deskripsyon zafè nan vèsyon yo transfere nan chanèl ak degaje, nou òganize yon bouk sou varyab la. .WerfVersions в werf.yaml:
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}} Paske bouk la pral jenere plizyè zafè (nou espere sa), li nesesè pran an kont separasyon ki genyen ant yo - sekans lan. --- (Pou plis enfòmasyon sou sentaks fichye konfigirasyon, gade ). Jan sa defini pi bonè, lè w rele yon modèl nan yon bouk, nou pase paramèt vèsyon yo, URL ak kontèks rasin.
Menm jan an tou, men san yon bouk, nou rele modèl asosye pou "ka espesyal": pou vèsyon rasin lan, osi byen ke vèsyon an soti nan komèt revizyon an:
{{ 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 }} Tanpri sonje ke zafè pou komite revizyon an pral sèlman bati si yo tabli varyab la .WerfReviewCommit.
Afè yo pare - li lè yo kòmanse enpòte!
Imaj final la, ki fèt pou kouri sou Kubernetes, se yon NGINX regilye ak yon dosye konfigirasyon sèvè te ajoute nginx.conf ak estatik soti nan zafè. Anplis de sa nan zafè nan vèsyon an rasin nan sit la, nou bezwen repete bouk la sou varyab la .WerfVersions pou enpòte zafè nan chanèl ak lage vèsyon + swiv règ la non zafè ke nou te adopte pi bonè. Piske chak atik stocke vèsyon sit la pou de lang, nou enpòte yo nan kote konfigirasyon an bay yo.
Deskripsyon imaj final la 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 -}}Imaj la adisyonèl, ki, ansanm ak youn prensipal la, lanse sou kous la dev, gen sèlman de vèsyon nan sit la: vèsyon an soti nan komèt la revizyon ak vèsyon an rasin nan sit la (gen byen jeneral ak, si ou sonje , divilge done). Kidonk, imaj adisyonèl la pral diferan de prensipal la sèlman nan seksyon enpòte (ak, nan kou, nan non an):
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 }} Jan yo note sa pi wo a, zafè pou komite revizyon an pral pwodwi sèlman lè varyab anviwònman an mete yo ap kouri REVIEW_SHA. Li ta posib pou pa jenere imaj werf-dev la ditou si pa gen okenn varyab anviwònman an REVIEW_SHA, men yo nan lòd yo Imaj Docker nan werf te travay pou imaj la werf-dev, nou pral kite li yo dwe bati sèlman ak zafè vèsyon an rasin (li se deja bati de tout fason), senplifye estrikti nan tiyo.
Asanble a pare! Ann ale nan CI/CD ak nuans enpòtan.
Pipeline nan GitLab CI ak karakteristik nan bati dinamik
Lè w ap kouri bati a nou bezwen mete varyab anviwònman yo itilize nan werf.yaml. Sa a pa aplike nan varyab REVIEW_SHA, ke nou pral mete lè w ap rele tiyo soti nan zen an GitHub.
Nou pral jenere done ekstèn ki nesesè yo nan yon script Bash generate_artifacts, ki pral jenere de zafè tiyo GitLab:
- ŃаКН
releases.ymlak done lage, - ŃаКН
common_envs.sh, ki gen varyab anviwònman yo dwe ekspòte.
Fichye kontni generate_artifacts w ap jwenn nan nou . Resevwa done yo tèt li se pa sijè a nan atik la, men dosye a common_envs.sh enpòtan pou nou, paske travay werf la depann de li. Yon egzanp kontni li yo:
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' Ou ka itilize pwodiksyon an nan yon script konsa, pou egzanp, lè l sèvi avèk fonksyon an Bash source.
Koulye a, vini pati nan plezi. Nan lòd pou tou de bati ak deplwaman aplikasyon an travay kòrèkteman, li nesesè asire sa werf.yaml te menm bagay la tou omwen nan yon sèl tiyo. Si kondisyon sa a pa satisfè, Lè sa a, siyati yo nan etap yo ke werf kalkile pandan asanble ak, pou egzanp, deplwaman, yo pral diferan. Sa ap mennen nan yon erè deplwaman, paske... imaj ki nesesè pou deplwaman yo pral manke.
Nan lòt mo, si pandan asanble imaj sit la enfòmasyon sou degaje ak vèsyon yo se menm bagay la, epi nan moman deplwaman yo pibliye yon nouvo vèsyon epi varyab anviwònman yo gen valè diferan, lè sa a deplwaman an ap echwe ak yon erè: apre yo tout, asosye nan nouvo vèsyon an poko te bati.
Si jenerasyon werf.yaml depann sou done ekstèn (pou egzanp, yon lis vèsyon aktyèl, tankou nan ka nou an), Lè sa a, konpozisyon an ak valè done sa yo ta dwe anrejistre nan tiyo a. Sa a se espesyalman enpòtan si paramèt ekstèn chanje byen souvan.
Nou pral resevwa epi anrejistre done ekstèn nan premye etap tiyo a nan GitLab (Prekonstwi) epi transmèt yo pi lwen nan fòm lan GitLab CI asosye. Sa a pral pèmèt ou kouri ak rekòmanse travay tiyo (konstwi, deplwaye, netwaye) ak menm konfigirasyon an werf.yaml.
Sa ki nan etap la Prekonstwi dosye .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 weekLè w te kaptire done ekstèn yo nan zafè a, ou ka bati ak deplwaye lè l sèvi avèk etap estanda tiyo GitLab CI yo: Konstwi ak Deplwaye. Nou lanse tiyo nan tèt li lè l sèvi avèk kwòk ki soti nan depo GitHub werf la (sa vle di, lè gen chanjman nan depo GitHub la). Done pou yo ka jwenn nan pwopriyete yo pwojè GitLab nan seksyon an CI/CD Anviwònman -> Pipeline deklanche, ak Lè sa a, kreye Webhook ki koresponn lan nan GitHub (Anviwònman -> Webhooks).
Etap konstriksyon an pral sanble sa a:
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 pral ajoute de zafè soti nan etap nan etap nan bati Prekonstwi, kidonk nou ekspòte varyab ak done antre prepare lè l sèvi avèk konstriksyon an source common_envs.sh. Nou kòmanse etap nan konstriksyon nan tout ka, eksepte pou lanse tiyo a dapre yon orè. Dapre orè a, nou pral kouri yon tiyo pou netwaye - nan ka sa a pa gen okenn bezwen fè asanble.
Nan etap deplwaman an, nou pral dekri de travay - separeman pou deplwaman nan sikui pwodiksyon ak devlopman, lè l sèvi avèk yon modèl 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 Travay yo esansyèlman diferan sèlman nan endike kontèks gwoup la kote werf ta dwe fè deplwaman an (WERF_KUBE_CONTEXT), epi mete varyab anviwònman bouk yo (environment.name и environment.url), ki Lè sa a, yo itilize nan modèl tablo Helm. Nou pa pral bay sa ki nan modèl yo, paske... pa gen anyen ki enteresan la pou sijè a nan kesyon an, men ou ka jwenn yo nan .
manyen final la
Depi vèsyon werf yo lage byen souvan, nouvo imaj yo pral bati souvan, ak Rejis Docker a ap toujou ap grandi. Se poutèt sa, li enperatif konfigirasyon otomatik netwayaj imaj ki baze sou règleman yo. Li trè fasil fè.
Pou aplike w ap bezwen:
- Ajoute yon etap netwayaj nan
.gitlab-ci.yml; - Ajoute ekzekisyon peryodik nan yon travay netwayaj;
- Fikse yon varyab anviwònman ak yon siy aksè ekri.
Ajoute yon etap netwayaj nan .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
Nou te deja wè prèske tout bagay sa yo yon ti kras pi wo - sèlman pou netwaye li ou bezwen premye konekte nan Rejis Docker ak yon siy ki gen dwa pou efase imaj nan Rejis Docker (siy travay GitLab CI ki bay otomatikman pa fè sa. gen dwa sa yo). Token an dwe kreye nan GitLab davans epi valè li yo dwe espesifye nan varyab anviwònman an WERF_IMAGES_CLEANUP_PASSWORD pwojè a (CI/CD Anviwònman -> Varyab).
Ajoute yon travay netwayaj ak orè ki nesesè yo fè nan CI/CD ->
Orè.
Sa a se li: yon pwojè nan Rejis Docker p ap toujou ap grandi nan imaj ki pa itilize yo.
Nan fen pati pratik la, kite m 'fè ou sonje ke lis konplè nan atik la yo disponib nan :
- ;
- .
Rezilta
- Nou te resevwa yon estrikti asanble lojik: yon zafè pa vèsyon.
- Asanble a se inivèsèl epi li pa mande pou chanjman manyèl lè nouvo vèsyon werf yo lage: dokiman ki sou sit entènèt la otomatikman mete ajou.
- De imaj yo reyini pou diferan kontou.
- Li travay byen vit, paske Caching yo itilize otank posib - lè yo lage yon nouvo vèsyon werf oswa yo rele yon zen GitHub pou yon revizyon, se sèlman zafè ki koresponn lan ak vèsyon ki chanje a rebati.
- Pa bezwen reflechi sou efase imaj ki pa itilize yo: netwaye dapre règleman werf ap kenbe Rejis Docker la nan lòd.
Jwenn
- Sèvi ak werf pèmèt asanble a travay byen vit akòz kachèt tou de asanble a li menm ak kachèt lè w ap travay ak depo ekstèn.
- Travay ak depo Git ekstèn elimine nesesite pou klonaj tout depo a chak fwa oswa reenvante volan an ak lojik optimize difisil. werf sèvi ak yon kachèt epi fè klonaj la sèlman yon fwa, ak Lè sa a, sèvi ak
fetchepi sèlman lè sa nesesè. - Kapasite pou itilize modèl Go nan dosye konfigirasyon bati a
werf.yamlpèmèt ou dekri yon asanble ki gen rezilta depann sou done ekstèn. - Sèvi ak mòn nan werf anpil vitès moute koleksyon an nan zafè - akòz kachèt la, ki se komen nan tout tiyo.
- werf fè li fasil pou konfigirasyon netwayaj, ki se espesyalman enpòtan lè bati dinamik.
PS
Li tou sou blog nou an:
- ÂŤ";
- ÂŤ";
- ÂŤ";
- ÂŤ'.
Sous: www.habr.com
