موږ دمخه زموږ د GitOps وسیلې په اړه له یو ځل څخه ډیر خبرې کړې دي.
د سایټ جوړښت باریکیو ته لاړشئ: د ټولو نسخو لپاره یو عام مینو رامینځته کول ، د خپرونو په اړه معلوماتو سره پا pagesې ، او داسې نور. - مونږ به نه. پرځای یې، راځئ چې د متحرک مجلس په مسلو او ځانګړتیاوو تمرکز وکړو او د CI/CD پروسو سره یو څه لږ تمرکز وکړو.
پیژندنه: سایټ څنګه کار کوي
د پیل کولو لپاره، د werf اسناد د دې کوډ سره ساتل کیږي. دا د پراختیا ځینې اړتیاوې رامینځته کوي چې عموما د دې مقالې له ساحې څخه بهر دي، مګر لږترلږه دا ویل کیدی شي چې:
- د نوي werf افعال باید د اسنادو له تازه کولو پرته خوشې نشي او په برعکس، په اسنادو کې هر ډول بدلون د werf نوې نسخه خوشې کول دي؛
- پروژه خورا پراخه پراختیا لري: نوې نسخې په ورځ کې څو ځله خوشې کیدی شي؛
- د اسنادو نوې نسخه سره د سایټ ځای پرځای کولو لپاره هر ډول لاسي عملیات لږترلږه ستړي دي؛
- پروژه یو سیمانټیک چلند غوره کوي
نسخه کول ، د 5 ثبات چینلونو سره. د خوشې کولو پروسه د ثبات د زیاتوالي لپاره د چینلونو له لارې د نسخو په ترتیب سره تیریږي: له الفا څخه راک - سالډ؛ - سایټ د روسیې ژبې نسخه لري، کوم چې "ژوند کوي او وده کوي" (د بیلګې په توګه، د هغې محتويات چې تازه شوي) د اصلي (یعنې انګلیسي ژبې) نسخې سره موازي.
د کارونکي څخه دا ټول "داخلي پخلنځي" پټولو لپاره، هغه ته یو څه وړاندیز کوي چې "یوازې کار کوي"، موږ وکړل جلا werf نصب او تازه کولو وسیله دی
په ویب پاڼه کې د نسخې انتخاب مینو کې، د werf وروستۍ نسخې په هر چینل کې شتون لري. په ترتیب سره، د پته په واسطه
په مجموع کې، سایټ لاندې نسخې شتون لري:
- روټ (د ډیفالټ په واسطه خلاصیږي)
- د هر ریلیز د هر فعال تازه چینل لپاره (د مثال په توګه،
werf.io/v1.0-beta ).
د یوې سایټ ځانګړي نسخه رامینځته کولو لپاره ، په عموم کې ، دا د دې کارولو تالیف کولو لپاره کافي دي /docs
د werf ذخیره اړونده کمانډ (jekyll build
)، د اړتیا وړ نسخه Git ټګ ته د بدلولو وروسته.
دا یوازې د دې اضافه کولو لپاره پاتې دي:
- پخپله ګټه (werf) د مجلس لپاره کارول کیږي؛
- د CI/CD پروسې د GitLab CI پر بنسټ جوړ شوي؛
- او دا ټول، البته، په Kubernetes کې تیریږي.
دندې
اوس راځئ هغه دندې رامینځته کړو چې ټول تشریح شوي مشخصات په پام کې ونیسي:
- په هر تازه چینل کې د werf نسخه بدلولو وروسته په سایټ کې اسناد باید په اوتومات ډول نوي شي.
- د پرمختګ لپاره تاسو اړتیا لرئ ځینې وختونه وړتیا ولرئ د سایټ مخکتنې نسخې وګورئ.
سایټ باید د اړونده ګیټ ټاګونو څخه په کوم چینل کې د نسخې بدلولو وروسته بیا تنظیم شي ، مګر د عکس جوړولو په پروسه کې به موږ لاندې ب featuresې ترلاسه کړو:
- له هغه وخته چې په چینلونو کې د نسخو لیست بدلیږي ، نو دا یوازې اړین دی چې د چینلونو لپاره سندونه بیا جوړ کړئ چیرې چې نسخه بدله شوې. په هرصورت، د هرڅه بیا رغول خورا ښه ندي.
- د خپرونو لپاره د چینلونو سیټ ممکن بدل شي. په یو وخت کې ، د مثال په توګه ، ممکن په چینلونو کې نسخه د لومړني لاسرسي 1.1 خوشې کیدو څخه ډیر مستحکم نه وي ، مګر د وخت په تیریدو سره به څرګند شي - پدې حالت کې ، ایا تاسو په لاسي ډول مجلس بدل نه کړئ؟
دا دا معلومه شوه مجلس د خارجي معلوماتو په بدلولو پورې اړه لري.
پلي کول
د چلند غوره کول
په بدیل سره ، تاسو کولی شئ هر اړین نسخه په کوبرنیټس کې د جلا پوډ په توګه پرمخ وړئ. دا اختیار په کلستر کې د شیانو لوی شمیر معنی لري، کوم چې به د مستحکم ویرف ریلیز شمیر زیاتوالي سره وده وکړي. او دا، په بدل کې، ډیر پیچلي ساتنه معنی لري: هره نسخه خپل HTTP سرور لري، او د کوچني بار سره. البته، دا د سرچینو لوی لګښتونه هم لري.
موږ ورته لاره خپله کړه په یو عکس کې ټولې اړینې نسخې راټولول. د سایټ د ټولو نسخو تالیف شوي احصایې د NGINX سره په کانټینر کې موقعیت لري، او اړونده ځای پرځای کولو ته ټرافيک د NGINX Ingress له لارې راځي. یو ساده جوړښت - یو بې ریاسته غوښتنلیک - تاسو ته اجازه درکوي په اسانۍ سره د کوبرنیټس په کارولو سره ځای پرځای کول (د بار پورې اړه لري) اندازه کړئ.
د ډیر دقیق کیدو لپاره ، موږ دوه عکسونه راټول کوو: یو د تولید سرکټ لپاره ، دوهم د دیو سرکټ لپاره اضافي دی. اضافي عکس یوازې د اصلي سره یوځای په دیو سرکټ کې کارول کیږي (پیل شوی) او د بیاکتنې ژمنې څخه د سایټ نسخه لري ، او د دوی ترمینځ روټینګ د انګریس سرچینو په کارولو سره ترسره کیږي.
werf vs git کلون او هنري آثار
لکه څنګه چې مخکې یادونه وشوه، د دې لپاره چې د اسنادو د یوې ځانګړې نسخې لپاره د سایټ احصایه تولید کړئ، تاسو اړتیا لرئ چې د مناسب ذخیره کولو ټګ ته د بدلولو له لارې جوړ کړئ. تاسو کولی شئ دا د ذخیره کولو کلون کولو سره هم ترسره کړئ هرکله چې تاسو جوړ کړئ، د لیست څخه مناسب ټاګونه غوره کړئ. په هرصورت، دا یو پر ځای د منابعو ژور عملیات دی او سربیره پردې، د غیر معمولي لارښوونو لیکلو ته اړتیا لري ... بل جدي نیمګړتیا دا ده چې د دې طریقې سره د غونډو په جریان کې د یو څه ذخیره کولو لپاره هیڅ لاره نشته.
دلته د ویرف افادیت پخپله زموږ مرستې ته راځي ، پلي کوي سمارټ کیشینګ او تاسو ته د کارولو اجازه درکوي fetch
که اړتیا وي. سربیره پردې ، کله چې د ذخیره کولو څخه ډیټا اضافه کول ، موږ کولی شو یوازې اړین لارښودونه وټاکو (زموږ په قضیه کې دا لارښود دی docs
)، کوم چې به د پام وړ د اضافه معلوماتو مقدار کم کړي.
څنګه چې جیکیل یوه وسیله ده چې د جامد معلوماتو راټولولو لپاره ډیزاین شوې او په وروستي عکس کې اړتیا نلري، نو دا به منطقي وي
موږ werf.yaml لیکو
نو، موږ پریکړه وکړه چې موږ به هره نسخه په جلا جلا هنر کې تالیف کړو. په هرصورت موږ موږ نه پوهیږو چې د دې اثارو څخه به د غونډې په جریان کې څومره وي، نو موږ نشو کولی د جوړونې ثابت ترتیب ولیکئ (په کلکه ووایو ، موږ لاهم کولی شو ، مګر دا به په بشپړ ډول مؤثره نه وي).
werf تاسو ته د کارولو اجازه درکوي werf.yaml
)، او دا دا ممکنه کوي په الوتنه کې ترتیب جوړ کړئ د بهرني معلوماتو پورې اړه لري (هغه څه چې تاسو ورته اړتیا لرئ!). زموږ په قضیه کې بهرني معلومات د نسخو او خپرونو په اړه معلومات دي، چې پر بنسټ یې موږ د اړتیا وړ شمیر اثار راټولوو او په پایله کې موږ دوه انځورونه ترلاسه کوو: werf-doc
и werf-dev
په مختلفو سرکیټونو چلولو لپاره.
بهرني معلومات د چاپیریال متغیرونو له لارې تیریږي. دلته د دوی ترکیب دی:
-
RELEASES
- د ریلیزونو لیست سره یوه کرښه او د werf اړوند اوسني نسخه، په بڼه کې د ارزښتونو د ځای جلا شوي لیست په بڼه<НОМЕР_РЕЛИЗА>%<НОМЕР_ВЕРСИИ>
. بېلګه:1.0%v1.0.4-beta.20
-
CHANNELS
- د چینلونو لیست سره یوه کرښه او د werf اړوند اوسني نسخه، په بڼه کې د ارزښتونو د ځای جلا شوي لیست په بڼه<КАНАЛ>%<НОМЕР_ВЕРСИИ>
. بېلګه:1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22
-
ROOT_VERSION
- د ویرف ریلیز نسخه باید په سایټ کې د ډیفالټ لخوا وښودل شي (دا تل اړین ندي چې د لوړې خوشې شمیرې لخوا اسناد ښکاره کړئ). بېلګه:v1.0.4-beta.20
-
REVIEW_SHA
- د بیاکتنې ژمنې هش له کوم څخه چې تاسو اړتیا لرئ د ازموینې لوپ لپاره نسخه جوړه کړئ.
دا متغیرونه به د GitLab CI پایپ لاین کې ډک شي، او څنګه چې په سمه توګه لاندې لیکل شوي.
لومړی، د اسانتیا لپاره، موږ تعریف کوو werf.yaml
د ټیمپلیټ متغیرونو ته لاړ شئ، دوی ته د چاپیریال متغیرونو څخه ارزښتونه وټاکئ:
{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }}
د سایټ د جامد نسخې تالیف کولو لپاره د هنري اثار توضیحات عموما د ټولو قضیو لپاره ورته وي چې موږ ورته اړتیا لرو (پشمول د ریښې نسخه رامینځته کول ، او همدارنګه د dev سرکټ نسخه). له همدې امله، موږ به دا د فنکشن په کارولو سره جلا بلاک ته واړوو define
- د بیا وروسته کارولو لپاره include
. موږ به لاندې دلیلونه ټیمپلیټ ته انتقال کړو:
-
Version
- تولید شوی نسخه (د ټګ نوم)؛ -
Channel
- د تازه چینل نوم چې د هغې لپاره هنري توکي تولید شوي؛ -
Commit
- کمیټ هش، که چیرې آثار د بیاکتنې ژمنې لپاره رامینځته شوي وي؛ - شرایط
د هنري کينډۍ توضیحات
{{- 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 }}
د هنر نوم باید ځانګړی وي. موږ کولی شو دا ترلاسه کړو، د بیلګې په توګه، د چینل نوم اضافه کولو سره (د متغیر ارزښت .Channel
) د اثار نوم ته د ضمیمې په توګه: artifact: doc-{{ .Channel }}
. مګر تاسو اړتیا لرئ پوه شئ چې کله د هنري اثارو واردول ، تاسو اړتیا لرئ ورته نومونو ته مراجعه وکړئ.
کله چې د هنري اثارو تشریح کول، لاندې werf ځانګړتیا کارول کیږي: build_dir
تاسو ته اجازه درکوي د پایپ لاین چلونو ترمینځ د جیکیل کیچ خوندي کړئ ، کوم چې د پام وړ د بیا راټولولو سرعت ګړندی کوي.
تاسو ممکن د فایل کارولو ته هم پام کړی وي releases.yml
د YAML فایل دی چې د خوشې کولو ډاټا سره غوښتل شوي
دا د مشروط بیان په کارولو سره پلي کیږي if
ټیمپلیټونه او ډیزاین ته لاړشئ {{ $Root.Files.Get "releases.yml" | sha256sum }}
په مرحله کې .Channel
سره مساوي ده root
) فایل هش releases.yml
د ټولې مرحلې لاسلیک اغیزه کوي ، ځکه چې دا د ځواب ورکونکي دندې نوم برخه ده (پیرامیټ name
). په دې توګه، کله چې بدلون ومومي منځپانګه دوتنه releases.yml
اړونده اثار به بیا یوځای شي.
مهرباني وکړئ د بهرني ذخیره سره کار کولو ته هم پاملرنه وکړئ. د یوې هنري اثار په عکس کې له /docs
، او د منظور شوي پیرامیټونو پورې اړه لري ، د اړین ټاګ یا بیاکتنې ژمنې ډاټا سمدلاسه اضافه کیږي.
د چینلونو او ریلیزونو د لیږدول شوي نسخو د هنري اثارو توضیحاتو رامینځته کولو لپاره د هنري نمونې کارولو لپاره ، موږ په متغیر کې لوپ تنظیم کوو .WerfVersions
в werf.yaml
:
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}}
ځکه لوپ به ډیری هنري اثار رامینځته کړي (موږ ورته امید لرو) ، دا اړینه ده چې د دوی ترمینځ جلا کوونکی په پام کې ونیول شي - ترتیب ---
(د ترتیب د فایل ترکیب په اړه د نورو معلوماتو لپاره، وګورئ
په ورته ډول، مګر پرته له لوپ، موږ د "ځانګړو قضیو" لپاره د هنري نمونې نمونه وایو: د ریښې نسخې لپاره، او همدارنګه د بیاکتنې ژمنې نسخه:
{{ 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 }}
مهرباني وکړئ په یاد ولرئ چې د بیاکتنې ژمنې لپاره اثار به یوازې هغه وخت رامینځته شي چې متغیر تنظیم شوی وي .WerfReviewCommit
.
اثار چمتو دي - دا د واردولو پیل کولو وخت دی!
وروستی عکس، په کوبرنیټس کې د چلولو لپاره ډیزاین شوی، یو منظم NGINX دی چې د سرور ترتیب کولو فایل اضافه شوی nginx.conf
او د هنري اثارو څخه جامد. د سایټ د ریښې نسخې د هنرونو سربیره، موږ اړتیا لرو په متغیر کې لوپ تکرار کړو .WerfVersions
د چینل اثار واردولو او نسخې خوشې کولو لپاره + د هنري آثارو نومولو قاعده تعقیب کړئ چې موږ دمخه تصویب کړی. څرنګه چې هر هنري اثار د دوه ژبو لپاره د سایټ نسخې ذخیره کوي، موږ هغه ځایونو ته واردوو چې د ترتیب لخوا چمتو شوي.
د وروستي عکس توضیحات 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 -}}
اضافي عکس ، کوم چې د اصلي سره یوځای په ډیو سرکټ کې پیل شوی ، د سایټ یوازې دوه نسخې لري: د بیاکتنې ژمنې نسخه او د سایټ ریډ نسخه (د عمومي شتمنیو شتون لري او که تاسو په یاد ولرئ. د معلوماتو خپرول). پدې توګه ، اضافي عکس به یوازې د وارداتو برخه کې له اصلي عکس څخه توپیر ولري (او البته په نوم کې):
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 }}
لکه څنګه چې پورته یادونه وشوه، د بیاکتنې ژمنې لپاره اثار به یوازې هغه وخت تولید شي کله چې د ټاکل شوي چاپیریال متغیر چلول کیږي REVIEW_SHA
. دا به ممکنه وي چې د werf-dev عکس په بشپړ ډول تولید نه کړي که چیرې د چاپیریال متغیر شتون ونلري REVIEW_SHA
، مګر د دې لپاره
مجلس چمتو دی! راځئ چې CI/CD او مهم باریکیو ته لاړ شو.
په GitLab CI کې پایپ لاین او د متحرک جوړونې ځانګړتیاوې
کله چې جوړونه پرمخ وړئ موږ اړتیا لرو د چاپیریال متغیرونه تنظیم کړو چې په کې کارول کیږي werf.yaml
. دا په REVIEW_SHA متغیر کې نه پلي کیږي، کوم چې موږ به د ګیټ هب هک څخه پایپ لاین زنګ وهلو پر مهال تنظیم کړو.
موږ به په باش سکریپټ کې اړین بهرني معلومات تولید کړو generate_artifacts
، کوم چې به د GitLab پایپ لاین دوه آثار تولید کړي:
- دوتنه
releases.yml
د خوشې معلوماتو سره، - دوتنه
common_envs.sh
د صادرولو لپاره د چاپیریال متغیرات لري.
د فایل منځپانګې generate_artifacts
تاسو به زموږ کې ومومئ common_envs.sh
زموږ لپاره مهم دی، ځکه د werf کار په دې پورې اړه لري. د هغې د منځپانګې یوه بیلګه:
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'
تاسو کولی شئ د داسې سکریپټ محصول وکاروئ ، د مثال په توګه ، د بش فنکشن کارول source
.
اوس د ساتیرۍ برخه راځي. د دې لپاره چې د غوښتنلیک جوړولو او پلي کولو دواړه په سمه توګه کار وکړي، دا اړینه ده چې ډاډ ترلاسه کړئ werf.yaml
و همدا شان لږترلږه د یوې پایپ لاین دننه. که دا شرط پوره نه شي، نو د مرحلې لاسلیکونه چې werf د مجلس په جریان کې محاسبه کوي او د بیلګې په توګه، ځای پرځای کول به توپیر ولري. دا به د ګمارنې تېروتنې لامل شي، ځکه چې ... د ځای پرځای کولو لپاره اړین عکس به ورک وي.
په بل عبارت ، که چیرې د سایټ عکس د غونډې په جریان کې د ریلیزونو او نسخو په اړه معلومات یو شان وي ، او د ځای په ځای کولو په وخت کې نوې نسخه خپره شوې او د چاپیریال متغیرونه مختلف ارزښتونه لري ، نو پلي کول به د غلطۍ سره ناکام شي: په هرصورت، د نوې نسخې اثار لا تر اوسه ندي جوړ شوي.
که نسل werf.yaml
په بهرني ډیټا پورې اړه لري (د مثال په توګه ، د اوسني نسخو لیست ، لکه څنګه چې زموږ په قضیه کې) ، نو د دې ډول معلوماتو ترکیب او ارزښتونه باید په پایپ لاین کې ثبت شي. دا په ځانګړي توګه مهم دی که چیرې بهرني پیرامیټونه ډیری وختونه بدل شي.
موږ به بهرنۍ ډاټا ترلاسه کول او ثبتول په GitLab کې د پایپ لاین په لومړي مرحله کې (مخکې جوړ) او نور یې په فورمه کې لیږدوي د GitLab CI آثار. دا به تاسو ته اجازه درکړي چې د ورته ترتیب سره د پایپ لاین دندې چلولو او بیا پیل کړئ (جوړول ، ځای په ځای کول ، پاکول) werf.yaml
.
د مرحلې محتويات مخکې جوړ دوتنه .gitlab-ci.yml
:
Prebuild:
stage: prebuild
script:
- bash ./generate_artifacts 1> common_envs.sh
- cat ./common_envs.sh
artifacts:
paths:
- releases.yml
- common_envs.sh
expire_in: 2 week
په هنري اثارو کې د بهرني معلوماتو ترلاسه کولو سره ، تاسو کولی شئ د معیاري GitLab CI پایپ لاین مرحلو په کارولو سره جوړ او ځای په ځای کړئ: جوړ او ځای په ځای کړئ. موږ پخپله پایپ لاین د GitHub werf ذخیره څخه د هکونو په کارولو سره پیل کوو (د مثال په توګه ، کله چې په GitHub کې ذخیره کې بدلونونه شتون ولري). د دوی لپاره ډاټا په برخه کې د GitLab پروژې ملکیتونو کې موندل کیدی شي د CI/CD ترتیبات -> پایپ لاین محرک، او بیا په GitHub کې ورته ویب بوک جوړ کړئ (ترتیبات -> ویب هکس).
د جوړولو مرحله به داسې ښکاري:
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 به له مرحلې څخه د جوړیدو مرحلې ته دوه هنري اثار اضافه کړي مخکې جوړ، نو موږ د جوړونې په کارولو سره د چمتو شوي ان پټ ډیټا سره متغیرونه صادروو source common_envs.sh
. موږ په ټولو قضیو کې د جوړولو مرحله پیل کوو، پرته له دې چې د مهال ویش سره سم پایپ لاین پیل کړو. د مهال ویش سره سم، موږ به د پاکولو لپاره پایپ لاین چلوو - پدې حالت کې د غونډې ترسره کولو ته اړتیا نشته.
د ګمارنې په مرحله کې، موږ به دوه دندې تشریح کړو - په جلا توګه د 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
دندې په اصل کې یوازې د کلستر شرایطو په ګوته کولو کې توپیر لري په کوم کې چې ویرف باید ګمارنه ترسره کړي (WERF_KUBE_CONTEXT
)، او د لوپ چاپیریال تغیرات ترتیب کول (environment.name
и environment.url
)، چې بیا د هیلم چارټ ټیمپلیټونو کې کارول کیږي. موږ به د ټیمپلیټ مینځپانګې چمتو نه کړو، ځکه چې ... دلته د پوښتنې موضوع لپاره په زړه پورې هیڅ شی شتون نلري، مګر تاسو یې موندلی شئ
وروستی لمس
څنګه چې د ویرف نسخې ډیری وختونه خپریږي ، نوي عکسونه به په مکرر ډول رامینځته شي ، او د ډاکر راجسټری به په دوامداره توګه وده وکړي. نو ځکه، دا اړینه ده چې د پالیسیو پراساس د اتوماتیک عکس پاکول تنظیم کړئ. دا کار کول خورا اسانه دي.
د پلي کولو لپاره تاسو اړتیا لرئ:
- د پاکولو یو ګام اضافه کړئ
.gitlab-ci.yml
; - د پاکولو دندې دوره ای اجرا کول شامل کړئ؛
- د لیکلو لاسرسي نښه سره د چاپیریال متغیر تنظیم کړئ.
د پاکولو مرحله اضافه کول .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
موږ دمخه دا ټول یو څه لوړ لیدلي دي - یوازې د دې پاکولو لپاره تاسو اړتیا لرئ لومړی د ډاکر راجسټری ته د نښه سره ننوتل چې د ډاکر راجسټری کې د عکسونو حذف کولو حق لري (په اوتومات ډول صادر شوی د GitLab CI ټاسک نښه نه کوي. داسې حقوق لري). نښه باید دمخه په GitLab کې رامینځته شي او ارزښت یې باید د چاپیریال متغیر کې مشخص شي WERF_IMAGES_CLEANUP_PASSWORD
پروژه (CI/CD ترتیبات -> تغیرات).
د اړین مهالویش سره د پاکولو دنده اضافه کول په کې ترسره کیږي CI/CD ->
شیډولونه.
دا دی: د ډاکر راجسټری کې یوه پروژه به نور په دوامداره توګه د نه کارول شوي عکسونو څخه وده وکړي.
د عملي برخې په پای کې ، اجازه راکړئ تاسو ته یادونه وکړم چې د مقالې بشپړ لیستونه په کې شتون لري
نتيجه
- موږ د منطقي مجلس جوړښت ترلاسه کړ: په هر نسخه کې یو هنر.
- مجلس نړیوال دی او د لاسي بدلونونو ته اړتیا نلري کله چې د werf نوې نسخه خپره شي: په ویب پا onه کې اسناد په اوتومات ډول تازه کیږي.
- دوه عکسونه د مختلف شکلونو لپاره راټول شوي.
- دا په چټکۍ سره کار کوي، ځکه کیشینګ د امکان تر حده کارول کیږي - کله چې د werf نوې نسخه خپره شي یا د ګیټ هب هک د بیاکتنې ژمنې لپاره ویل کیږي ، یوازې د بدل شوي نسخې سره ورته اثار بیا رغول کیږي.
- د نه کارول شوي عکسونو حذف کولو په اړه فکر کولو ته اړتیا نشته: د ویرف پالیسیو سره سم پاکول به د ډاکر راجسټري په ترتیب کې وساتي.
موندنو
- د werf کارول اسمبلۍ ته اجازه ورکوي چې پخپله د دواړو مجلسونو کیچ کولو او د بهرني ذخیره کولو سره کار کولو پر مهال د کیچ کولو له امله ګړندي کار وکړي.
- د بهرني Git ذخیره کولو سره کار کول هر ځل د ټول ذخیره کلون کولو اړتیا له مینځه وړي یا د پیچلي اصلاح کولو منطق سره ویل بیا ایجادوي. werf یو کیچ کاروي او یوازې یو ځل کلونینګ کوي، او بیا یې کاروي
fetch
او یوازې کله چې اړتیا وي. - د جوړونې ترتیب فایل کې د ګو ټیمپلیټ کارولو وړتیا
werf.yaml
تاسو ته اجازه درکوي یو مجلس تشریح کړئ چې پایله یې په بهرني معلوماتو پورې اړه لري. - په ویرف کې د ماونټ کارول د پام وړ د هنري اثارو راټولول ګړندي کوي - د کیچ له امله ، کوم چې په ټولو پایپ لاینونو کې عام دی.
- werf د پاکولو تنظیم کول اسانه کوي، کوم چې په ځانګړي ډول مهم دی کله چې په متحرک ډول جوړ شي.
PS
زموږ په بلاګ کې هم ولولئ:
- «
کوبرنیټس ته د نوي غوښتنلیک خوشې کولو پرمهال د امرونو چلول » - «
د ورته ډول مایکرو خدمتونه د werf او GitLab CI سره جوړ او ځای په ځای کړئ » - «
د پیچلي هیلم چارټونو د جوړولو لپاره د werf کارول » - «
د werf 1.0 مستحکم معرفي کول: GitOps د دې سره څه کوي ، وضعیت او پلانونه ".
سرچینه: www.habr.com