Peb twb tau tham txog peb lub cuab yeej GitOps ntau zaus lawm. , thiab lub sijhawm no peb xav qhia peb qhov kev paub txog kev tsim lub vev xaib nrog cov ntaub ntawv ntawm qhov project nws tus kheej - (nws cov lus Lavxias yog ). Qhov no yog ib qho chaw zoo li qub, tab sis nws qhov kev sib dhos yog qhov nthuav vim tias nws tau tsim los ntawm kev siv ntau yam khoom siv dynamic.

Peb yuav tsis tham txog qhov sib txawv ntawm lub xaib cov qauv - tsim cov ntawv qhia zaub mov rau txhua qhov version, nplooj ntawv tso tawm cov ntaub ntawv, thiab lwm yam - tab sis hloov chaw, peb yuav tsom mus rau cov teeb meem thiab cov ntsiab lus ntawm kev tsim kho dynamic thiab me ntsis ntawm cov txheej txheem CI / CD uas nrog.
Kev Taw Qhia: Yuav ua li cas lub xaib ua haujlwm
Cia peb pib nrog qhov tseeb tias cov ntaub ntawv ntawm werf khaws cia nrog nws cov lej. Qhov no ua rau muaj qee qhov kev xav tau kev txhim kho uas dhau ntawm qhov kev txwv ntawm tsab xov xwm no, tab sis tsawg kawg, nws tuaj yeem hais tias:
- Cov yam ntxwv tshiab ntawm werf yuav tsum tsis txhob raug tso tawm yam tsis tau hloov kho cov ntaub ntawv, thiab, ntawm qhov tod tes, txhua qhov kev hloov pauv hauv cov ntaub ntawv txhais tau tias kev tso tawm ntawm cov qauv tshiab ntawm werf;
- Qhov project no tab tom tsim kho kom zoo heev: cov version tshiab tuaj yeem tso tawm ntau zaus hauv ib hnub;
- Txhua yam kev ua haujlwm tes los xa tawm lub xaib nrog cov ntaub ntawv tshiab tsawg kawg yog qhov tsis yooj yim;
- Qhov project tau txais yuav ib txoj kev qhia txog lub ntsiab lus , nrog 5 txoj kev ruaj khov. Cov txheej txheem tso tawm suav nrog kev xa cov qauv mus rau hauv cov channel kom nce kev ruaj khov: los ntawm alpha mus rau pob zeb-khoom;
- Lub xaib muaj cov lus Lavxias, uas "nyob thiab txhim kho" (piv txwv li, cov ntsiab lus uas tau hloov kho tshiab) ua ke nrog cov lus tseem ceeb (piv txwv li, lus Askiv).
Yuav kom zais tag nrho cov "kev ua haujlwm sab hauv" no ntawm tus neeg siv, muab qee yam uas "ua haujlwm xwb", peb tau ua отдельный инструмент установки и обновления werf Yog Tsuas yog teev tus lej tso tawm thiab qhov channel ruaj khov uas koj npaj siv, thiab multiwerf yuav xyuas seb puas muaj qhov version tshiab ntawm qhov channel thiab rub tawm yog tias tsim nyog.
Cov qauv werf tshiab kawg muaj nyob rau hauv txhua txoj kev hauv cov ntawv qhia xaiv qauv ntawm lub vev xaib. Los ntawm lub neej ntawd, ntawm Qhov channel version ruaj khov tshaj plaws rau qhov kev tso tawm tshiab tshaj plaws tau qhib lawm—nws kuj tau indexed los ntawm cov cav tshawb nrhiav. Cov ntaub ntawv rau channel muaj nyob rau ntawm cov chaw nyob sib cais (piv txwv li, rau beta tso tawm 1.0).
Tag nrho, lub xaib muaj cov qauv hauv qab no:
- hauv paus (qhib los ntawm lub neej ntawd),
- rau txhua qhov channel hloov tshiab ntawm txhua qhov kev tso tawm (piv txwv li ).
Yuav kom tsim tau ib qho version tshwj xeeb ntawm lub website, feem ntau, nws txaus los compile nws siv , khiav hauv daim ntawv qhia /docs werf repository coj cov lus txib (jekyll build), tau hloov mus rau Git tag ntawm qhov version xav tau ua ntej.
Nws tsuas yog tseem ntxiv tias:
- lub cuab yeej siv nws tus kheej (werf) yog siv rau kev sib dhos;
- Cov txheej txheem CI/CD yog tsim los ntawm GitLab CI;
- thiab tag nrho cov no, tau kawg, khiav hauv Kubernetes.
paub tab
Tam sim no cia peb tsim cov haujlwm uas suav nrog txhua qhov kev piav qhia tshwj xeeb:
- Tom qab hloov qhov werf version ntawm txhua qhov hloov tshiab channel Cov ntaub ntawv ntawm lub vev xaib yuav tsum tau hloov kho tshiab yam tsis tas siv neeg.
- Yuav kom koj loj hlob tau koj yuav tsum muaj peev xwm ua tau qee zaum saib cov qauv ua ntej ntawm lub xaib.
Lub xaib yuav tsum tau rov ua dua tom qab hloov qhov version ntawm txhua channel los ntawm cov Git tags sib xws, tab sis thaum lub sijhawm sib dhos duab peb yuav ntsib cov yam ntxwv hauv qab no:
- Vim tias daim ntawv teev cov version ntawm cov channel hloov pauv, tsuas yog cov ntaub ntawv rau cov channel uas qhov version tau hloov pauv xwb thiaj li yuav tsum tau rov tsim dua. Tom qab tag nrho, kev tsim txhua yam los ntawm kos tsis zoo heev.
- Cov channel tso tawm lawv tus kheej tuaj yeem hloov pauv. Piv txwv li, thaum muaj ib lub sijhawm, tej zaum yuav tsis muaj ib qho version ruaj khov dua li qhov kev tso tawm 1.1 thaum ntxov uas muaj nyob rau ntawm cov channel, tab sis lawv yuav tshwm sim thaum kawg - koj yeej tsis tas yuav hloov qhov kev tsim kho manually hauv qhov xwm txheej ntawd?
Nws hloov tawm ntawd lub rooj sib txoos nyob ntawm kev hloov cov ntaub ntawv sab nraud.
Kev siv
Xaiv ib txoj kev
Xwb, txhua qhov version uas xav tau tuaj yeem tso tawm ua ib lub pod sib cais hauv Kubernetes. Qhov kev xaiv no xav tau ntau dua ntawm cov khoom hauv pawg, uas yuav loj hlob nrog tus lej ntawm cov werf tso tawm ruaj khov. Qhov no, ua rau, xav tau kev saib xyuas nyuaj dua: txhua qhov version xav tau nws tus kheej HTTP server, nrog rau lub nra hnyav dua. Tau kawg, qhov no kuj suav nrog cov nqi peev txheej siab dua.
Peb tau mus tib txoj kev tsim cov qauv uas xav tau hauv ib daim duabCov ntaub ntawv static uas tau muab tso ua ke rau txhua lub vev xaib versions tau khaws cia rau hauv lub thawv NGINX, thiab cov tsheb khiav mus rau Deployment sib xws tau txais los ntawm NGINX Ingress. Cov qauv yooj yim - daim ntawv thov tsis muaj xeev - tso cai rau kev yooj yim ntawm Deployment (nyob ntawm qhov load) siv Kubernetes nws tus kheej.
Yuav kom meej dua, peb tsim ob daim duab: ib daim rau qhov chaw tsim khoom, thiab daim duab thib ob, ntxiv rau qhov chaw tsim kho. Daim duab ntxiv tsuas yog siv (khiav) rau ntawm qhov chaw tsim kho, nrog rau daim duab tseem ceeb, thiab muaj cov version ntawm lub vev xaib los ntawm kev tshuaj xyuas. Kev xa mus rau lawv yog ua tiav los ntawm kev siv cov peev txheej Ingress.
werf vs. git clone thiab artifacts
Raws li tau hais lawm, txhawm rau tsim cov ntsiab lus ntawm lub xaib rau ib qho version ntawm cov ntaub ntawv tshwj xeeb, koj yuav tsum khiav ib qho kev tsim los ntawm kev hloov mus rau qhov cim npe repository. Qhov no kuj tseem tuaj yeem ua tiav los ntawm kev cloning lub repository txhua zaus koj tsim, xaiv cov cim npe tsim nyog los ntawm daim ntawv teev npe. Txawm li cas los xij, qhov no yog ib qho kev ua haujlwm uas siv ntau cov peev txheej thiab yuav tsum tau sau cov lus qhia tsis tseem ceeb. Lwm qhov tsis zoo yog tias txoj hauv kev no tsis tso cai rau caching thaum lub sijhawm tsim.
Ntawm no lub werf utility nws tus kheej tuaj rau peb pab, kev siv kev khaws cia ntse thiab tso cai rau siv Siv werf los ntxiv cov code los ntawm lub chaw cia khoom yuav ua kom lub tsev ceev dua, vim werf yeej clones lub chaw cia khoom ib zaug thiab tom qab ntawd khiav tsuas fetch yog tias tsim nyog. Tsis tas li ntawd, thaum ntxiv cov ntaub ntawv los ntawm lub chaw cia khoom, peb tsuas tuaj yeem xaiv cov npe tsim nyog (hauv peb qhov xwm txheej, qhov no yog daim ntawv qhia docs), uas yuav txo qhov ntau ntawm cov ntaub ntawv ntxiv.
Vim tias Jekyll yog ib lub cuab yeej tsim los rau kev sau cov ntaub ntawv zoo li qub thiab tsis tas yuav muaj nyob rau hauv daim duab kawg, nws yuav yog qhov tsim nyog los sau nws rau hauv , thiab nyob rau hauv daim duab kawg import tsuas yog cov txiaj ntsig ntawm kev sib sau ua ke.
Kev sau ntawv werf.yaml
Yog li, peb tau txiav txim siab tias peb yuav muab txhua qhov version tso ua ke rau hauv ib qho khoom siv sib cais. Txawm li cas los xij, peb Peb tsis paub tias yuav muaj pes tsawg yam khoom siv no thaum lub sijhawm sib sau ua ke., yog li peb tsis tuaj yeem sau ib qho kev teeb tsa kho kom ruaj khov (hais lus nruj me ntsis, peb ua tau, tab sis nws yuav tsis ua haujlwm zoo heev).
werf tso cai rau koj siv hauv koj cov ntaub ntawv teeb tsa (werf.yaml), thiab qhov no ua rau nws ua tau tsim cov config ntawm tus yoov Nyob ntawm cov ntaub ntawv sab nraud (yam peb xav tau!). Hauv peb qhov teeb meem, cov ntaub ntawv sab nraud yog cov ntaub ntawv hais txog cov qauv thiab cov ntawv tso tawm, raws li qhov peb sau cov khoom cuav uas xav tau thiab tau txais ob daim duab ua qhov tshwm sim: werf-doc и werf-dev khiav ntawm ntau lub voj voog sib txawv.
Cov ntaub ntawv sab nraud raug xa mus los ntawm cov hloov pauv ib puag ncig. Nov yog cov ntaub ntawv uas lawv muaj:
-
RELEASES- ib txoj hlua nrog daim ntawv teev cov kev tso tawm thiab cov qauv tam sim no ntawm werf, nyob rau hauv daim ntawv ntawm cov npe sib cais qhov chaw ntawm cov nqi hauv hom ntawv<НОМЕР_РЕЛИЗА>%<НОМЕР_ВЕРСИИ>... Piv txwv:1.0%v1.0.4-beta.20 -
CHANNELS- ib txoj hlua nrog cov npe ntawm cov channel thiab cov version tam sim no ntawm werf, nyob rau hauv daim ntawv ntawm cov npe sib cais qhov chaw ntawm cov nqi hauv hom ntawv<КАНАЛ>%<НОМЕР_ВЕРСИИ>... Piv txwv:1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22 -
ROOT_VERSION— qhov kev tso tawm ntawm werf kom tso tawm los ntawm lub neej ntawd ntawm lub xaib (nws tsis tas yuav tsum tso tawm cov ntaub ntawv raws li tus lej tso tawm siab tshaj plaws). Piv txwv li:v1.0.4-beta.20 -
REVIEW_SHA— tus hash ntawm qhov kev tshuaj xyuas cog lus uas qhov version rau lub voj voog kuaj yuav tsum tau tsim los ntawm.
Cov hloov pauv no yuav raug sau rau hauv GitLab CI pipeline, thiab yuav ua li cas piav qhia meej hauv qab no.
Ua ntej tshaj plaws, rau qhov yooj yim, cia peb txhais hauv werf.yaml Mus rau cov qauv hloov pauv los ntawm kev muab lawv cov nqi los ntawm cov hloov pauv ib puag ncig:
{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }} Cov lus piav qhia ntawm cov khoom siv rau kev sib sau ua ke cov qauv zoo li qub ntawm lub xaib feem ntau yog tib yam rau txhua qhov xwm txheej uas peb xav tau (suav nrog kev tsim cov hauv paus version, nrog rau cov version rau qhov chaw tsim kho). Yog li ntawd, peb yuav tsiv nws mus rau ib qho thaiv sib cais siv cov haujlwm. define - rau kev siv dua tom qab nrog kev pab los ntawm includePeb yuav xa cov lus sib cav hauv qab no mus rau tus qauv:
-
Version- qhov version tsim tawm (lub npe ntawm daim ntawv cim npe); -
Channel- lub npe ntawm cov channel hloov tshiab uas cov khoom cuav tau tsim; -
Commit— ua txhaum hash, yog tias qhov khoom cuav yog tsim los rau kev tshuaj xyuas kev cog lus; - cov ntsiab lus.
Kev piav qhia ntawm cov qauv khoom cuav
{{- 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 }} Lub npe khoom cuav yuav tsum tshwj xeeb. Peb tuaj yeem ua tiav qhov no, piv txwv li, los ntawm kev ntxiv lub npe channel (tus nqi hloov pauv .Channel) ua ib qho lus ntxiv rau lub npe khoom cuav: artifact: doc-{{ .Channel }}Tab sis nws yog ib qho tseem ceeb kom nkag siab tias thaum importing los ntawm artifacts, koj yuav tsum xa mus rau tib lub npe.
Thaum piav qhia txog ib yam khoom cuav, cov yam ntxwv werf hauv qab no yog siv: Mounting nrog ib daim ntawv qhia kev pabcuam uas tau teev tseg build_dir tso cai rau koj khaws cia Jekyll cache ntawm cov pipeline khiav, uas ua kom sai dua qhov rov sib dhos dua.
Tej zaum koj kuj tau pom tias siv cov ntaub ntawv no releases.yml — yog cov ntaub ntawv YAML nrog cov ntaub ntawv tso tawm, thov los ntawm (ib yam khoom qub uas tau txais thaum lub sijhawm ua tiav cov kav dej). Nws yog qhov tsim nyog rau kev sau ua ke hauv lub vev xaib, tab sis nyob rau hauv cov ntsiab lus ntawm tsab xov xwm no, nws yog qhov txaus siab rau peb vim nws lub xeev txiav txim siab kev rov sib sau ua ke ntawm ib qho khoom cuav xwb - ib qho khoom siv ntawm lub hauv paus (nws tsis xav tau hauv lwm yam khoom siv).
Qhov no yog ua tiav los ntawm kev siv tus neeg teb xov tooj conditional. if Mus rau cov qauv thiab cov qauv tsim {{ $Root.Files.Get "releases.yml" | sha256sum }} nyob rau theem Nws ua haujlwm zoo li no: thaum tsim ib qho khoom siv rau lub hauv paus version (variable .Channel sib npaug root) cov ntaub ntawv hash releases.yml cuam tshuam rau kos npe ntawm tag nrho theem, vim nws yog ib feem ntawm Ansible task name (parameter name). Yog li, thaum hloov pauv cov ntsiab lus ntaub ntawv releases.yml cov khoom cuav sib xws yuav raug sib sau ua ke dua.
Thov koj ua tib zoo saib xyuas kev ua haujlwm nrog lub chaw khaws ntaub ntawv sab nraud. Hauv daim duab khoom cuav los ntawm , tsuas yog ntxiv cov npe xwb /docs, thiab nyob ntawm cov kev cai dhau los, cov ntaub ntawv ntawm qhov yuav tsum tau tag lossis kev tshuaj xyuas kev cog lus raug ntxiv tam sim ntawd.
Yuav siv cov qauv artifact los tsim cov lus piav qhia txog cov channel versions thiab releases uas tau hloov pauv, peb npaj ib lub voj voog los ntawm variable .WerfVersions в werf.yaml:
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}} Vim tias lub voj voog yuav tsim ntau yam khoom cuav (peb vam tias yog li ntawd), nws yog qhov tsim nyog yuav tsum coj mus rau hauv tus account qhov sib cais ntawm lawv - qhov sib lawv liag --- (yog xav paub ntxiv txog cov ntaub ntawv teeb tsa, saib ). Raws li peb tau txhais ua ntej lawm, thaum hu rau ib daim template hauv ib lub voj voog, peb dhau cov version, URL, thiab cov ntsiab lus hauv paus.
Ib yam li ntawd, tab sis tsis muaj lub voj voog, peb hu cov qauv khoom cuav rau "cov xwm txheej tshwj xeeb": rau cov hauv paus version, nrog rau cov version los ntawm kev tshuaj xyuas cog lus:
{{ 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 }} Thov nco ntsoov tias qhov khoom siv rau kev tshuaj xyuas kev cog lus tsuas yog yuav raug tsim yog tias qhov hloov pauv tau teeb tsa. .WerfReviewCommit.
Cov khoom siv tau npaj txhij lawm - lub sijhawm pib xa khoom tuaj!
Daim duab kawg tsim los khiav ntawm Kubernetes yog NGINX ib txwm muaj nrog cov ntaub ntawv teeb tsa server ntxiv. nginx.conf thiab statics los ntawm artifacts. Ntxiv rau qhov root site version artifact, peb yuav tsum tau iterate hla qhov variable .WerfVersions Yuav kom import tau cov channel thiab tso tawm cov version artifacts, peb yuav ua raws li cov kev cai rau npe artifact uas peb tau txais ua ntej. Vim tias txhua yam artifact khaws cov website versions rau ob hom lus, peb yuav import lawv mus rau hauv qhov chaw uas tau teev tseg los ntawm qhov configuration.
Kev piav qhia ntawm daim duab kawg ntawm 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 -}}Daim duab ntxiv, uas khiav ua ke nrog daim duab tseem ceeb ntawm qhov chaw tsim kho, tsuas muaj ob qho version ntawm lub xaib: qhov version los ntawm kev tshuaj xyuas thiab qhov root version ntawm lub xaib (uas muaj cov khoom sib koom thiab, yog tias koj nco qab, tso tawm cov ntaub ntawv). Yog li ntawd, daim duab ntxiv yuav txawv ntawm daim duab tseem ceeb tsuas yog hauv ntu import (thiab, ntawm chav kawm, lub npe):
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 }} Raws li tau hais los saum toj no, qhov khoom siv rau kev tshuaj xyuas kev cog lus tsuas yog tsim tawm thaum khiav qhov hloov pauv ib puag ncig teeb tsa. REVIEW_SHAYog tias tsis muaj qhov hloov pauv ib puag ncig, ces yuav tsis tsim tau daim duab werf-dev li. REVIEW_SHA, tab sis txhawm rau kom Cov duab Docker hauv werf ua haujlwm rau cov duab werf-dev, peb yuav tso nws tsim tsuas yog nrog cov khoom siv hauv paus (nws twb tau tsim lawm), kom yooj yim rau cov qauv kav dej.
Lub tsev twb npaj tiav lawm! Cia peb mus rau CI/CD thiab qee cov ntsiab lus tseem ceeb.
GitLab CI Pipeline thiab Dynamic Build Nta
Thaum khiav qhov kev tsim kho, peb yuav tsum teeb tsa cov hloov pauv ib puag ncig siv rau hauv werf.yamlQhov no tsis siv rau REVIEW_SHA variable, uas peb yuav teeb tsa thaum hu rau lub pipeline los ntawm GitHub hook.
Peb yuav tsiv cov cim ntawm cov ntaub ntawv sab nraud tsim nyog rau hauv Bash script generate_artifacts, uas yuav tsim ob lub GitLab pipeline artifacts:
- cov ntaub ntawv
releases.ymlnrog cov ntaub ntawv tso tawm, - cov ntaub ntawv
common_envs.sh, muaj cov hloov pauv ib puag ncig kom raug xa tawm.
Cov ntaub ntawv txheem generate_artifacts koj yuav pom hauv peb lub Kev tau txais cov ntaub ntawv nws tus kheej tsis yog lub ntsiab lus ntawm tsab xov xwm, tab sis cov ntaub ntawv common_envs.sh Qhov no tseem ceeb rau peb vim tias werf txoj haujlwm nyob ntawm nws. Ib qho piv txwv ntawm nws cov ntsiab lus:
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' Cov zis ntawm cov ntawv sau zoo li no tuaj yeem siv tau, piv txwv li, siv Bash function source.
Tam sim no los txog qhov kev lom zem. Rau ob qho tib si kev tsim thiab kev xa tawm ntawm daim ntawv thov kom ua haujlwm kom raug, nws yog qhov tsim nyog los xyuas kom meej tias werf.yaml yog tib yam tsawg kawg nyob rau hauv ib lub raj xa dejYog tias qhov xwm txheej no tsis raug ua tiav, cov cim qhia theem uas werf xam thaum lub sijhawm tsim thiab, piv txwv li, kev xa tawm yuav txawv. Qhov no yuav ua rau muaj qhov yuam kev xa tawm, vim tias daim duab uas xav tau rau kev xa tawm yuav ploj lawm.
Hauv lwm lo lus, yog tias daim duab ntawm lub xaib muaj cov ntaub ntawv tso tawm thiab cov ntaub ntawv version tib yam, tab sis ib qho version tshiab raug tso tawm thaum lub sijhawm xa tawm thiab cov hloov pauv ib puag ncig muaj cov nqi sib txawv, qhov kev xa tawm yuav ua tsis tiav, vim tias cov khoom cuav ntawm qhov version tshiab tseem tsis tau tsim.
Yog tiam neeg werf.yaml Yog tias ib lub kav dej nyob ntawm cov ntaub ntawv sab nraud (piv txwv li, daim ntawv teev cov qauv tam sim no, zoo li hauv peb qhov teeb meem), cov khoom sib xyaw thiab cov nqi ntawm cov ntaub ntawv no yuav tsum tau sau tseg hauv lub kav dej. Qhov no tseem ceeb heev yog tias cov kev hloov pauv sab nraud hloov pauv ntau zaus.
Peb yuav txais thiab sau cov ntaub ntawv sab nraud ntawm thawj theem ntawm cov kav dej hauv GitLab (Ua ntej tsim) thiab xa lawv ntxiv rau hauv daim ntawv GitLab CI artifactQhov no yuav cia koj khiav thiab rov pib dua cov haujlwm pipeline (tsim, xa tawm, ntxuav) nrog tib qho kev teeb tsa hauv werf.yaml.
Cov ntsiab lus ntawm theem Ua ntej tsim ntaub ntawv .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 weekThaum cov ntaub ntawv sab nraud raug ntes hauv cov khoom cuav, koj tuaj yeem tsim thiab xa nws siv cov txheej txheem GitLab CI pipeline: Tsim thiab Deploy. Peb ua rau lub pipeline nws tus kheej siv hooks los ntawm werf GitHub repository (piv txwv li, thaum hloov pauv rau GitHub repository). Cov ntaub ntawv rau cov hooks no tuaj yeem pom hauv GitLab project properties seem. CI/CD Chaw -> Cov teeb meem ntawm cov kav dej, thiab tom qab ntawd tsim cov Webhook sib xws hauv GitHub (Cov Chaw -> Webhooks).
Theem kev tsim kho yuav zoo li no:
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 yuav ntxiv ob yam khoom qub los ntawm theem mus rau theem tsim kho Ua ntej tsim, yog li peb export cov variables nrog cov ntaub ntawv input uas tau npaj siv cov construct source common_envs.shPeb khiav theem tsim kho hauv txhua qhov xwm txheej tshwj tsis yog thaum khiav cov kav dej raws sijhawm. Qhov kev khiav teem sijhawm yuav yog rau kev ntxuav; hauv qhov no, tsis tas yuav khiav ib qho kev tsim kho.
Thaum lub sijhawm xa tawm, peb yuav piav qhia txog ob txoj haujlwm - ib qho rau kev xa mus rau kev tsim khoom thiab ib qho rau kev tsim cov chaw ib puag ncig - siv YAML template:
.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 Cov dej num yeej txawv tsuas yog nyob rau hauv qhov qhia txog cov ntsiab lus ntawm pawg uas werf yuav tsum ua qhov kev xa tawm (WERF_KUBE_CONTEXT), thiab teeb tsa cov hloov pauv ib puag ncig ntawm cov duab (environment.name и environment.url), uas tom qab ntawd siv rau hauv cov qauv ntawv qhia Helm. Peb yuav tsis teev cov ntsiab lus ntawm cov qauv, vim tias lawv tsis muaj dab tsi txaus siab rau lub ncauj lus uas tab tom xav txog, tab sis koj tuaj yeem nrhiav lawv hauv .
kov kawg
Vim tias cov qauv werf raug tso tawm ntau zaus, cov duab tshiab yuav raug tsim ntau zaus, thiab Docker Registry yuav loj hlob tas li. Yog li ntawd, nws yog ib qho tseem ceeb uas yuav tsum teeb tsa kev ntxuav duab tsis siv neeg raws li cov cai. Qhov no yooj yim heev ua.
Rau kev siv koj yuav tsum tau:
- Ntxiv ib kauj ruam ntxuav rau
.gitlab-ci.yml; - Ntxiv kev ua haujlwm tu vaj tse tsis tu ncua;
- Teem ib qho kev hloov pauv ib puag ncig nrog lub cim nkag mus sau ntawv.
Ntxiv ib theem ntxuav rau .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
Peb twb tau pom yuav luag txhua yam no saum toj no lawm—qhov txawv tsuas yog tias yuav kom ntxuav tau, koj yuav tsum xub nkag mus rau hauv Docker Registry nrog lub cim uas muaj kev tso cai rho tawm cov duab hauv Docker Registry (lub cim GitLab CI txoj haujlwm uas tau muab tawm tsis muaj cov kev tso cai no). Koj yuav tsum tsim lub cim hauv GitLab ua ntej thiab teev nws tus nqi hauv qhov hloov pauv ib puag ncig. WERF_IMAGES_CLEANUP_PASSWORD peb tes num (CI/CD Chaw -> Cov Hloov Pauv).
Ntxiv ib txoj haujlwm tu nrog lub sijhawm teem tseg uas xav tau yog ua tiav hauv CI/CD ->
Cov sijhawm.
Yog li ntawd: koj qhov project Docker Registry yuav tsis loj hlob ntxiv lawm los ntawm cov duab tsis siv.
Xaus lus ntawm qhov kev xyaum ua, kuv xav kom koj nco ntsoov tias cov npe tag nrho los ntawm tsab xov xwm muaj nyob rau hauv :
- ;
- .
tshwm sim
- Peb tau txais cov qauv sib dhos ua ke: ib qho khoom siv rau ib qho version.
- Qhov kev tsim kho yog thoob ntiaj teb thiab tsis tas yuav hloov pauv tes thaum cov qauv tshiab ntawm werf raug tso tawm: cov ntaub ntawv ntawm lub vev xaib tau hloov kho tshiab.
- Ob daim duab raug sau rau cov duab sib txawv.
- Nws ua haujlwm sai vim nws siv caching ntau tshaj plaws - thaum muaj ib qho version tshiab ntawm werf raug tso tawm lossis GitHub hook raug hu rau kev tshuaj xyuas, tsuas yog cov khoom cuav sib xws nrog cov version hloov pauv rov tsim dua.
- Tsis tas yuav txhawj txog kev rho tawm cov duab tsis siv: kev ntxuav raws li txoj cai werf yuav ua rau koj Docker Registry huv si.
tshawb pom
- Siv werf tso cai rau lub tsev kom khiav sai vim yog caching ntawm ob qho tib si lub tsev nws tus kheej thiab caching thaum ua haujlwm nrog cov chaw khaws ntaub ntawv sab nraud.
- Ua haujlwm nrog cov chaw khaws cia Git sab nraud tshem tawm qhov xav tau los clone tag nrho cov chaw khaws cia txhua lub sijhawm lossis rov tsim lub log nrog cov kev xav zoo tshaj plaws. werf siv lub cache thiab clones tsuas yog ib zaug xwb, thiab tom qab ntawd siv
fetchthiab tsuas yog thaum tsim nyog xwb. - Muaj peev xwm siv Go templates hauv cov ntaub ntawv teeb tsa tsim
werf.yamltso cai rau koj piav qhia txog kev sib dhos uas nws qhov tshwm sim nyob ntawm cov ntaub ntawv sab nraud. - Siv cov mounts hauv werf ua rau kev sau cov khoom cuav sai dua vim yog lub cache, uas tau sib koom thoob plaws txhua txoj kab ke.
- werf ua rau nws yooj yim rau kev teeb tsa kev ntxuav, uas yog qhov tseem ceeb tshwj xeeb rau cov qauv tsim dynamic.
PS
Nyeem kuj ntawm peb blog:
- «»;
- «»;
- «»;
- «".
Tau qhov twg los: www.hab.com
