ααΎαααΆααα·ααΆααα½α α αΎαα’αααΈα§ααααα GitOps ααααααΎαα αααΎαααΆαααααα α αΎαααΎαααα ααΎαα ααα ααααααααααα·αααααααααααΎααααα»αααΆααααααΌααααα»αααα αααααααΆαα½αααΉαα―αααΆαααααααααααααααα½αα―α - (ααααααΆααΆααΆαα»ααααΈααΊ ) αααααΊααΆααα ααααααα·αα·ααααααααααΆ ααα»ααααααΆααα½αααααα»αααααΆααααααΆαα½αα±ααα αΆααα’αΆαααααααααααΆααααΌαααΆαααΆαααααααααααΎα ααα½αααααα»αα»ααΆαααΆαααααα

α
αΌααα
αααα»αααΆααα»ααααααααααΆαααα
ααΆααααααααααα αααααα ααΆααααααΎααααΊαα»αααΌαα
αααααΆααααααααααα ααααααααααΆαααααααΆαα’αααΈααΆαα
ααααααΆαααα - ααΎαβααΉαβαα·αα αααα»ααα
αα·α α
αΌαααΎααααααααΎαααα αΆ αα·ααααααααα·αααααααΆααα½αααααα»αααααΆααΆααααα αα·αααααα·α
ααΎααααΎαααΆα CI/CD αααα’αααααΆαα½αα
ααα ααααΈααααΎαα αααααααααα αααααααααΎαααΆα
ααΎααααΈα αΆααααααΎαααΆαα½αα―αααΆα werf ααααΌαααΆααααααΆαα»ααα½αααΆαα½ααααααΌαααααααΆα αααααααααααααΌαααΆαα’αα·αααααααα½αα ααα½ααααααΆααΌαα α α½αααΈαα·ααΆαααΆαααα’αααααααα ααα»αααααααΆαα αα ααΆααααΆα’αΆα αα·ααΆαααΆαααΆ:
- αα»αααΆα werf ααααΈαα·ααα½αααααΌαααΆαα ααααααΆααααααααΆαααΆαααααΎαα αα α»ααααααααΆαα―αααΆααα α αΎααααα»ααα αα·α ααΆαααααΆααααααΌαααΆαα½ααα αααα»αα―αααΆααααα αΆαααΈααΆαα ααααααΆαααααααααΈαα werf α
- αααααααααααΆαααΆαα’αα·αααααααααααΉαααα’ααααααΆααα ααααααααΈα’αΆα ααααΌαααΆαα ααααααΆαααΆα αααΎααααααα»ααα½αααααα
- ααααα·ααααα·ααΆααααααααΆαα½αααΎααααΈααΆαααααααΆαααα ααααααααααΆαααααααααΈααα―αααΆαααΊαααΆαα αα ααΆαααα»αααααΆααα
- ααααααααααααααΆααααααΆααααΌααα·ααΈααΆααααα semantic ααΆαα½αααΉα 5 ααα»αααα·ααααααααΆαα ααααΎαααΆαα ααααααΆαααΆαααααααααΉαααΆαα’αα»αααααΆαααααααααΆααααααααααΆααααααΆααααααα»αααααΆαααααααΎααααααααΆα: ααΈα’αΆααα αααΆαα ααα-ααΉα;
- ααα ααααααααααΆαααααααΆααΆααΆαα»ααααΈ ααα "ααααα αα·αα’αα·αααα" (α§. ααΆαα·ααΆαααααααΌαααΆαα’αΆααααα) ααααααΆαα½αααΉαααααα αααα (α§. ααΆααΆα’ααααααα)α
ααΎααααΈααΆαα "ααααααΆαααΆααααα»α" ααΆααα’αααααααΈα’αααααααΎααααΆααααααααααα±ααααΆααααΌαα’αααΈαα½αααα "ααΎαααααααΎαααΆα" ααΎαααΆαααααΎ ααΆαααα‘αΎα werf ααΆα ααααα‘αα αα·αα§αααααααααΎαα αα α»ααααααααΆα - αααβααΊααΆ . α’αααααααΆααααααααΌααααααΆαααααα ααααααΆα αα·αααα»αααα·ααααααααΆααααα’ααααα½α ααΆαααααα»αααΆαααααΎααααΆαα α αΎα multiwerf ααΉααα·αα·αααααΎαααΆααΎααΆαααααααααΈαα ααΎααΆαααα αΎαααΆαααααΆααααα·αααΎα αΆαααΆα αα
αα αααα»ααααΊαα»αααααΎαααΎααααααα ααΎααα ααααα ααααα α»αααααααααα»ααααα werf ααΆααα αααα»αααΆαααααΈαα½ααα ααΆαααααΆαααΎα ααΆαα’αΆααααααΆα ααααααααΆααααααααΆααααααααΆααααα»ααααααΆααααΆαα ααααααΆαα α»αααααααααα»αααΆαααΎα - ααΆααααααΌαααΆαααΆαααα·αα·ααααααααααΆαααΈαααααααααααααα α―αααΆααααααΆααααΆαααααΆααα α’αΆααααααΆαααΆα ααααα‘αα (α§ααΆα ααα αααααΆααααααααααΆ 1.0) α
ααα»ααα ααα ααααααααααΆαααααααΌα ααΆααααααα
- root (ααΎαααΆαααααΆαααΎα),
- αααααΆααααΆαααα’αΆααααααααααααααΆαα ααααααΆαααΈαα½αα (α§ααΆα ααα ).
ααΎααααΈαααααΎαααααααΆααααΆααααααα ααααααα½α ααΆααΌαα
ααΆαααααααααΆαααααα»αααΆαα
αααααααΆαααααααΎ αααααααΎαααΆααα
αααα»ααα /docs ααΆααααααααΆαααααααΌαααααΆααααααΆαα werf (jekyll build) αααααΆααααΈααααΌααα
ααααΆα Git αααααααααααααΌαααΆαα
ααΆαα αααααααααααααΆ:
- α§αααααααααΎααααΆαααααα½αααΆ (werf) ααααΌαααΆαααααΎαααααΆααααΆααα½αααααα»αααααΆ;
- ααααΎαααΆα CI/CD ααααΌαααΆααααααΎαα‘αΎααααααα’ααααΎ GitLab CI α
- α αΎαααΆααα’ααααα αα·αααΆααααααΎαααΆααα αααα»α Kubernetesα
ααΆααα·α αα
α₯α‘αΌαααα α αΌαααΎααααααΎααα·α αα ααΆαααααα·αααΌαααΈααΆαααΆααααΆαααααααΆααα·αααααΆααΆααα’ααα
- αααααΆααααΈααααΆααααααΌααααα werf αα ααΎααΆαααα’αΆαααααααΆαα½αα α―αααΆααα ααΎααα ααααααα½αααααααΌαααΆαααααΎαα αα α»ααααααααΆααααααααααααααααα·.
- αααααΆααααΆαα’αα·αααααα α’αααααααΌαααΆαααααααα ααΎαααααααΎαααΆαα»αααααα ααααα.
ααα αααααααααΌαααααααΌαααΆαα αααααα‘αΎααα·ααααααΆααααΈααααΆααααααΌααααααα ααΎααΆαααααΆαα½αααΈααααΆα Git αααααααΌαααααΆ ααα»αααααα αααα»αααααΎαααΆαααααΆααααααΎαααΌαααΆα ααΎαααΉαααα½αααΆααααααααα·αααααΌα ααΆααααααα
- α αΆααααΆααααΈαααααΈαααααα ααΎααα»αααα·αααααΆααααααΌα ααΆααααΆααααααΆααΆαα αΆαααΆα ααααα»αααΆααααΆαα―αααΆαα‘αΎααα·ααααααΆααααα»αααα·ααααααααααΆαααααΆααααααΌαα αααΆαααΆαα·α ααΆαβαααΆαβα’αααΈαβα‘αΎαβαα·αβααααβαααβααΊβαα·αβααα’βααα»ααααΆαβααα
- αααα»αααααΆααααααααΆααααΆαα ααααααΆαα’αΆα ααααΆααααααΌαα ααΆα§ααΆα ααα αααα»ααααααΆαα½α αααα ααααΆαα·αααΆααααααα ααΎαααααΆααααααΆααααααααΆαααΆαααΆαα ααααααΆαααααΌα 1.1 ααα»ααααααΌα α αα αα½αααααΉαααα α‘αΎα - αααα»αααααΈαααα’ααααα·ααα½αααααΆααααααΌαααΆααα½αααααα»αααααΆααααααα?
ααΆααααααΆ ααΆααα½αααααα»αααααΆα’αΆαααααααΎααΆαααααΆααααααΌααα·ααααααααΆααααα .
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
ααΆαααααΎαααΎααα·ααΈααΆααααα
ααΆαααααΎα α’αααα’αΆα ααααΎαααΆααααααααααααΌαααΆαααΈαα½ααααΆααααΆα ααααα‘αααα αααα»α Kubernetesα αααααΎαααααααααααααα ααα½αααΆααααα αααΎαααααααα»αα αααα»αα ααααα αααααΉαααΎαα‘αΎαααΆαα½αααΉαααΆαααΎαα‘αΎαααα ααα½αααααΆαα ααααααΆα werf αααααΆααααααααΆαα α αΎαααα, αα αααα»αααα, αααααααααααΆααααααααΆαααα»αααααααΆαααααααααα: ααααααΈαα½ααααΆααααΆαααΈααα HTTP ααααΆαααααα½αααααααΆα αΎαααΆαα½αααΉαααααα»αααΌα αα½αα ααΆααΆααα·αααΆαα ααααααα½ααααα αΌαααΆαα αααΆαααααΆαααΆααααα αααΎααααααα
ααΎαααΆαααΎαααΆαααααΌαααΌα ααααΆα ααΆααααααΌααααα»αααααα αΆαααΆα αααΆααα’αααα αααα»αααΌαααΆααα½αα. αα·αα·αααααααααΆαα αααααααααααααΆααα’ααααααα αααααααΆαααΈααΆαααα αααα»ααα»αααΊααααααααΆα NGINX α αΎαα ααΆα ααααα ααΆααααΆαααΆαααααααΆααααααααΌαααααΆααΎαα‘αΎαααΆαααα NGINX Ingress α αα ααΆααααααααααΆαααα - αααααα·ααΈααααΆααααα - α’αα»ααααΆαα±ααα’αααααΆααααα½αααααΎααΆαααααααΆαααΆαααΆαααααααΆα (α’αΆαααααααΎααααα»α) αααααααΎ Kubernetes αααα½αααΆααααΆααα
ααΎααααΈα±ααααΆααααα αααΆααααΆαα ααΎααααα»ααααααΌαααΌαααΆαααΈαα αα½ααααααΆααααααααΈααα·ααααα ααΈααΈαααΊααΆααΌαααΆααααααααααααΆααααααααΈα’αα·ααααααα ααΌαααΆαααααααααααΌαααΆαααααΎααααΆαα (ααΎαααααΎαααΆα) αααα ααΎααααααΈ dev αα½αααΆαα½αααΉαααΌααα αα·αααΆαααααααα ααααααααααΆαααααΈααΆααα·αα·αααα‘αΎααα·α α αΎαααΆααααααΌααααΆααα½αααΆααααΌαααΆαα’αα»αααααααααααΎααααΆα Ingress α
werf vs git ααααΌα αα·αααααα»αα»ααΆα
ααΌα αααααΆααααααΆαααα½α ααα αΎα ααΎααααΈαααααΎααα·αα·ααααααααα ααααααααααΆααααααααΆααααΆααααα―αααΆα α’αααααααΌααααααΎααααααααΌααα ααααΆαααααΆαααααααααααα α’αααααα’αΆα ααααΎααΌα αααααΆααααααΆαααααΌαααααΆααααΆααααααααα’ααααααααΎα αααααααΎαααΎαααααΆααααααααααααΈαααααΈαα½αα αααααΆαααΆαααΆααααα αααααΊααΆααααα·ααααα·ααΆααααααΉαααα’ααααααΆααααΎααααΆα α αΎαααΎαααΈααααα ααα ααΆαααΆαααΆααααααααΆαααααΆαααααα·ααααααΆααΏαααΌα ααΆα ... αα»ααα·ααααα·ααααααααααααα½αααααααααΊααΆ ααΆαα½αααΉααα·ααΈααΆαααααααα ααΆαα·αααΆααα·ααΈααΎααααΈααΆααα’αααΈαα½αααα‘α»ααααααα‘αΎααααααα
αα
ααΈαααα§αααααααααΎααααΆαα werf αααα½αααΆααααααααα½αααααααΎα αααα’αα»αααα ααααΆαααααααΆααααααΆααα αα·αα’αα»ααααΆαα±ααα’αααααααΎ . ααΆαααααΎ werf ααΎααααΈααααααααΌαααΈααααΆααααΉααααααΎαααααΏαααΆααααΆααααΆαααααΆαα ααΈααααα werf ααααΆααααααΌαααααΆαααααα α αΎααααααΆααααααααα·ααααα· αα fetch ααΎα
αΆαααΆα
αα ααΎαααΈααα αα
ααααααααααα·ααααααααΈααααΆαα ααΎαα’αΆα
ααααΎαααΎαααΆαααααα
αΆαααΆα
αααα»ααααα (αααα»αααααΈααααααΎααααααΊααΆααα―αααΆα docs) αααααΉαααΆαααααααααα·ααΆααα·ααααααααααααα
αααααΆα Jekyll ααΊααΆα§ααααααααααααΌαααΆααα ααΆα‘αΎααααααΆααααΆαα ααααααα·αααααααα·αα·αααα α αΎααα·αααααΌαααΆααα αααα»αααΌαααΆαα α»αααααα ααΆααΉαααα ααα»αααααα»αααΆαα ααααααα αααα»α α αΎαα αΌααα αααα»αααΌαααΆαα α»αααααα ααΆαα αΌαααααααααα αααααααα»αααααα.
ααΎαααααα werf.yaml
ααΌα αααα ααΎαααΆααααααα α α·αααααΆααΎαααΉαα αααααααααααΈαα½αααα αααα»αααααα»αα»ααΆα werf ααΆα ααααα‘αααα½αα ααααααΆαααΆαααααααΎα ααΎαβαα·αβααΉαβααΆβααΎβααααα»βαα»ααΆαβααΆααβαααβααΉαβααΆαβααα»ααααΆαβαααα»αβαααβαα½αβαα»αβααααΆβαααβαααααΌα αααα ααΎαβαα·αβα’αΆα βαααααβααΆαβαααααβαα ααΆααααααααβααααΆαααΆβααΆαβαα (αα·ααΆαβαααΆαβααΉααααΉα ααΎαβαα βααβα’αΆα ααα»ααααβααΆβααΉαβαα·αβααΆαβααααα·αααααΆαβααΆααβαααα»α)α
werf α’αα»ααααΆαα±ααα’αααααααΎ αα
αααα»αα―αααΆαααααααα
ααΆααααααααααααα’ααα (werf.yaml) α αΎααααααααΎα±ααααΆα’αΆα
αα
αα½α
αααααΎα config ααααΆαα α’αΆαααααααΎαα·ααααααααΆααααα
(α’αααΈαααα’αααααααΌαααΆα!) αα·ααααααααΆααααα
αα
αααα»αααααΈααααααΎαααΊααΆααααααΆαα’αααΈαααα αα·αααΆαα
ααααααΆα αααααα’ααααΎααΌαααααΆααααααΎααααααΌαα
ααα½αααααα»αα»ααΆααααααααΌαααΆα α αΎαααΆααααααααΎαααα½αααΆαααΌαααΆαααΈαα 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β ααααα ααααααΆααααα werf ααααΌαααΆααααα αΆαααΆαααααΆαααΎααα ααΎααα ααααα (ααΆαα·ααααααα αΆαααΆα αααΎααααΈαααα αΆαα―αααΆαααααααα ααααααΆαααααααααα»ααα) α α§ααΆα ααααv1.0.4-beta.20 -
REVIEW_SHA- hash ααβααΆαβαα·αα·αααβα‘αΎαβαα·αβαααβα’αααβααααΌαβααΆαβααΎααααΈβαααααΎαβααααβαααααΆααβααααα·ααα»αβααΆαααααα
α’αααααΆαααααααΉαααααΌαααΆαααααααα αααα»α GitLab CI pipeline αα·ααααααα·αααααΆααααααΌαααΆααααααααΆααααααα
ααΆααααΌαααααΆαααΆααα’ααααΎααααΈααΆαααΆααααα½αααΎαααααααα
αααα»α werf.yaml αα
βα’αααβααααΌ αααβαααααβαααααβαα½αααΆβααΈβα’αααβααα·ααααΆαα
{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }} ααΆααα·αααααΆα’αααΈααααα»αα»ααΆααααααΆααααΆαα
ααααααααααα·αα·ααααααααα ααααα ααΆααΌαα
ααΊααΌα
ααααΆαααααΆαααααααααααΈαααααΎαααααΌαααΆα (αα½αααΆααααΆααααααΎαααααααΆ root ααααΌα
ααΆαααααααααΆααααααααΈα’αα·αααααα)α ααΌα
ααααααΎαααΉαααααΆααααΈααΆαα
αααα»ααααα»αααΆα
ααααα‘αααααααααΎαα»αααΆα define - αααααΆααααΆαααααΎααααΆααα‘αΎααα·αααΆαααααααααΆαα include. ααΎαααΉααααααΌαα’αΆαα»αααααααΆαααααααα
ααΆααααααΌα
-
Version- αααααααααΆααααααΎα (αααααααααΆα); -
Channel- αααααααααΆαααα’αΆααααααααααααα»αα»ααΆαααααΌαααΆααααααΎαα -
Commit- αααααααΉααα hash ααααα·αααΎααααα»αα»ααΆαααααΌαααΆααααααΎααααααΆααααΆααα·αα·αααα‘αΎααα·αα - ααα·ααα
ααΆααα·αααααΆα’αααΈααααΌααααα»αα»ααΆα
{{- 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 α’αα»ααααΆαα±ααα’ααααααααΆαα»αααααΆαααααααΆαα Jekyll αααΆαααααΎαααΆαααααα αααααΎαααααΏααααΆαααααΆαααααα»αααΆααααααΌααααα»αα‘αΎααα·α.
α’αααβααβαααα ααβααΆβααΆαβαααβαααααΆααβααΆαβααααΎβα―αααΆαβαααα releases.yml ααΊααΆα―αααΆα YAML αααααΆααα·ααααααα
ααααααΆααααααΆαααααΎαα»αααΈ (ααααα»αα»ααΆααααααα½αααΆααα
αααααααΎαααΆαααααααααα αΌαααααα) α ααΆα
αΆαααΆα
ααα
αααα
αααααααα ααααα ααα»αααααα
αααα»αααα·ααααα’αααααααΆαα½αα±ααα
αΆααα’αΆααααααα
ααααααΎααααααααΆα’αΆαααααααΎααααΆαααΆαααααααΆ αααααΌααααα»αααααα»αα»ααΆααααα½αααα - ααααα»αα»ααΆαααααααα«αααααα ααααα (ααΆαα·αααααΌαααΆααα
αααα»αααααα»αα»ααΆααααααααααα) α
ααΆααααΌαααΆαα’αα»αααααααααααΎααα
ααααΈαααααααΆαααααΆααααααααα if α
αΌααα
ααΆααααααΌ αα·αααΆααα
ααΆ {{ $Root.Files.Get "releases.yml" | sha256sum }} αα
αααα»αααααΆααααΆα . ααΆααααΎαααΆαααΌα
ααΆαααααα: αα
ααααααααΎαααααα»αα»ααΆααααααΆααααααααΆ root (α’ααα .Channel ααααΎ root) α―αααΆα hash releases.yml αααααΆαααααα αααααααΆααααααΆααααΆαααΆααααΌα αααααααΆααΆααααααα½αααααααααααα·α
αα
ααΆα Ansible (αααΆαααΆαααααα 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 -}} αααααΆααα ααααα·ααα»αααΉααααααΎαααααα»αα»ααΆαααΆα
αααΎα (ααΎααααααΉαααΌα
αααα) ααΆα
αΆαααΆα
ααααα»αααΆααα·αααΌαααΈαααααΆααααααααΆααα½αααΆ - ααααΆααα --- (αααααΆααααααααΆαααααααα’αααΈααΆαααααααααααα―αααΆαααααααα
ααΆαααααααα ααΌαααΎα ) ααΌα
αααααΆααααααααΈαα»α αα
αααα α
ααααΌαααα»αααααα·ααα»α ααΎαααααααΆαααααΆαααΆαααααααααα URL αα·αααα·ααα«αα
ααααααααααΆαααααα ααα»αααααααααααΆαααααα·ααα»α ααΎαα α ααααΌααααα»αα»ααΆααααααΆαα "ααααΈαα·ααα"α αααααΆααααααααΆ root ααααΌα ααΆαααααααααΆαααααΈααΆααα·αα·αααα‘αΎααα·αα
{{ 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.
ααααα»αα»ααΆαααΆαααααααα½α ααΆααα αΎα - ααααααα αΆααααααΎαααΆαα αΌαα αΎα!
ααΌαααΆαα
α»αααααααααααααΌαααΆααα
ααΆα‘αΎαααΎααααΈααααΎαααΆαααΎ Kubernetes ααΊααΆ NGINX ααααααΆαααααΆαα―αααΆαααααααα
ααΆαααααααααααΆαααΈαααααααΌαααΆααααααα nginx.conf αα·ααα·αα·ααααααΈααααα»αα»ααΆαα ααααααααΈααΎααααα»αα»ααΆααααααα root ααααα αααααααΎαααααΌαααααΎααααα·ααα»αααααααααα
ααΎα’ααα .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 -}}ααΌαααΆααααααα ααααα½αααΆαα½αααΉαααΌαααααΆααααααΌαααΆαααΆααα±ααααααΎαααΆααα ααΎααααααΈ dev ααΆαααααααααΈαααααα αααααααα»αααααα αααααααααΆαααααΈααΆααα·αα·αααααΎαα‘αΎααα·α αα·αααααα«αααααα ααααα (ααΆααααααααααααααα·ααΌαα α αΎαααααα·αααΎα’αααα αΆα αα·ααααααα ααααααΆα) α ααΌα αααα ααΌαααΆαααααααααΉααα»αααΈααΌαααααΆαααααα αααα»ααααααααΆαα αΌαααα»ααααα (α αΎαααΆααΆααα·αααΆαααααα»αααααα)α
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ααα»ααααααΎααααΈ ααΌαααΆα Docker αααα»α werf ααααΎαααΆααααααΆααααΌαααΆα werf-dev ααΎαααΉααα»αααΆα±ααααΆααααααααΆαα½αααααα»αα»ααΆαααααααΆ root (ααΆααααΌαααΆαααΆαααααα½α
α αΎααααΆαααΆααααα) ααΎααααΈααααα½ααα
ααΆαααααααααααααα
ααααα·ααΆαααΆαααααααα½α ααΆαα! α αΌααααααα CI/CD αα·αααΆα nuances ααααΆαααα
ααααααα αααα»α GitLab CI αα·ααααααααα·αααααααΆαααααΆαααΆααΆααααα
αα
αααααααΎαααΆα build ααΎαααααΌααααααα’αααααα·ααααΆααααααααΎαααα»α werf.yaml. ααααα·αα’αα»ααααα
ααααα’ααα REVIEW_SHA αααααΎαααΉαααααααα
αααα α
αααααααΈααααα GitHub α
ααΎαααΉααααααΎααα·ααααααααΆααααα
α
αΆαααΆα
ααα
αααα»αααααααΈα Bash 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' α’αααα’αΆα
ααααΎααααααααααααααΈααααααα ααΆα§ααΆα ααα αααααααΎαα»αααΆα Bash 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 pipelineα Build αα·α Deployα ααΎαααΎαααααΎαααΆααααααααααααα½αααΆαααααααΎαααααααΈααααΆαα GitHub werf (α§. αα ααααααααΆαααΆαααααΆααααααΌααα αααα»αααααΆαααα ααΎ GitHub)α αα·αααααααααααΆαααα½αααΆα’αΆα ααααΆααα αααα»ααααααααααααααα·αααααα GitLab αα αααα»αααααα ααΆαααααα CI/CD -> ααααααααα αΎααααααΆαααααααααΎα Webhook αααααααΌαααααΆαα αααα»α GitHub (ααΆαααααα -> Webhooks).
ααααΆααααΆαααΆααααααΉαααΎααα ααΌα αααα
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 αα½αααα’αα»ααααααΆαααΆαααααααΆα (WERF_KUBE_CONTEXT) αα·ααααααα’αααααα·ααααΆαααααα·ααα»α (environment.name ΠΈ environment.url) ααααααααΆααααααααΌαααΆαααααΎαα
αααα»αααααΌααααΌαααΆα Helm α ααΎαβααΉαβαα·αβαααααβααααΉαααΆαβααβααααΌβαα αααααβ... αα·αααΆαα’αααΈαα½αα±ααα
αΆααα’αΆαααααααα
ααΈααααααααΆαααααααΆααααα
αααα»ααααα½αααααα ααα»ααααα’αααα’αΆα
ααααααααα½ααααα
αααα»α .
ααΆααααα α»αααααα
α αΆααααΆααααΈαααα werf ααααΌαααΆαα ααααααΆαααΆααΉαααΆαα ααΌαααΆαααααΈααΉαααααΌαααΆααααααΎαα‘αΎαααΆααΉαααΆαα α αΎα Docker Registry ααΉαααΈαα ααααΎαα₯ααααααα ααΌα αααα ααΆααΆααΆαα αΆαααΆα ααααα»αααΆαααααααα ααΆααααααααααΆααααα’αΆαααΌαααΆααααααααααααααααα·αααααα’ααααΎαααααΆαααα ααΆααΆααααα½αααααΎααΆααα
ααΎααααΈα’αα»ααααα’αααααΉαααααΌαααΆαα
- ααααααααα αΆααααα’αΆααα
.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
ααΎαααΆαααΎαααααΎαααααΆααα’ααααααααΆαααααααΆαααααα·α
- ααααΆααααααΎααααΈαααα’αΆαααΆ α’αααααααΌαα
αΌααα
Docker Registry ααΆααααΌααααααααΎαααααΆαααααΆαααααααΆααα·αααα·αα»αααΌαααΆααα
αααα»α Docker Registry (αα·αα·ααααααααΆααΆααα·α
αα
GitLab CI αααα
αααααααααααααααααα·αα·αααΆα ααΆααα·αααα·αααααα)α αα·αα·ααααααααΆααααΌαααααααΌαααΆααααααΎααα
αααα»α GitLab ααΆαα»α α αΎααααααααααααΆααααΌααααααααΆαααα
αααα»αα’αααααα·ααααΆα WERF_IMAGES_CLEANUP_PASSWORD αααααα (ααΆαααααα CI/CD -> α’ααα).
ααΆααααααααα·α
αα
ααΆααααα’αΆαααΆαα½αααΉαααΆααα·ααΆααααααααΌαααΆαααΊαα½α
ααΆαα CI/CD ->
ααΆααα·ααΆα.
αααα αΎαααΆααΆα αααααααα½ααα αααα»α Docker Registry ααΉααααααΈαα ααααΎαα₯ααααααααΈααΌαααΆαααααα·αααααΎα
αα α α»ααααα αααααααααααΆααααααα αααα»αααΌαααααΉαα’αααααΆ αααααΈααααααααΈα’αααααααΆααα αααα»α :
- ;
- .
αααααα
- ααΎαααΆαααα½ααα ααΆααααααααααΆααααα»αα‘αΌααΈααα ααααα»αα»ααΆααα½ααααα»ααα½αααααα
- ααΆααα½αααααα»αααααΆααΆαααααααααΆααα α αΎααα·ααααααΌαα±ααααΆαααΆαααααΆααααααΌαααααααα ααααααααααααααΈαα werf ααααΌαααΆαα ααααααΆαα α―αααΆααα ααΎααα αααααααααΌαααΆαααααΎαα αα α»ααααααααΆααααααααααααααααα·α
- ααΌαααΆαααΈαααααΌαααΆααααα»αα‘αΎααααααΆαααααααααααααααααααΆα
- ααΆααααΎαααΆααααΆαααΆαααα αα, αααααΆααα ααααΆαααααααΆααααααΌαααΆαααααΎααΆααααα’αΆα ααααΎαα ααΆα - αα ααααααααααααααΈαα werf ααααΌαααΆαα ααααααΆα α¬ααααα GitHub ααααΌαααΆαα α α±ααααααΎααΆααα·αα·αααα‘αΎααα·α ααΆαααααααα»αα»ααΆααααααααΌαααααΆααΆαα½αααΉααααααααααΆαααααΆααααααΌαααα»ααααααααααααΌαααΆαααΆααααα‘αΎααα·αα
- αα·αα αΆαααΆα ααα·αα’αααΈααΆααα»αααΌαααΆαααααα·αααααΎααα ααΆααααα’αΆαααΆααααααΆααα werf ααΉααααααΆ Docker Registry α²ααααΆααααααΆααααααΆααα
ααΆαααααΎα
- ααΆαααααΎααααΆαα werf α’αα»ααααΆαα±ααααΆααα½αααααα»αααααΆααααΎαααΆαααΆααααΆαααΆαααα αααααααΆαααααΆααααααΆαα»αααΆααααΆααα½αααααα»αααααΆααααααα½αα―α αα·αααααΆαααααααΆαααα αααααααΎααΆαααΆαα½αααααΆααααΆααααα α
- ααΆαααααΎααΆαααΆαα½αααααΆαα Git ααΆααααα
αα»αααααΆαααααααΌαααΆααααα»αααΆαααααΌαααααΆααααΆααααΌαααΆααααα α¬αααααΎααααα‘αΎααα·αααΆαα½αααΉααααααα·ααααΆαααααΎαααααα·αααααΆαααααααΆαα werf ααααΎααααΆαααααααΆαα α αΎαααααΎααΆαααααΌαααααααααα»ααααα α αΎααααααΆααααααααΎ
fetchα αΎααα αααα αΆαααΆα αααααα»αααααα - αααααααΆααααα»αααΆαααααΎααααΌ Go αα
αααα»αα―αααΆαααααααα
ααΆααααααααααααα
werf.yamlα’αα»ααααΆαα±ααα’ααααα·αααααΆα’αααΈααΆααα½αααααα»αααααΆαααααααααααααααΆα’αΆαααααααΎαα·ααααααααΆααααα α - ααΆαααααΎααααΆαααααααα αααα»α werf αααααΎαααααΏαααΆααααααΌααααα»αααααα»αα»ααΆααααΆαααααΆαα - αααααΆαααααααΆαααααααΆαααααααΆααΏαααααααΆαααααΆαααααααααΆααα’ααα
- werf ααααΎα±ααααΆααΆααααα½ααααα»αααΆαααααααα ααΆααααααααααΆααααα’αΆα αααααΆαααΆααααααΆααααΆαα·ααααα αααααΆααααααΆαααααα
PS
ααΌαα’αΆαααααααα ααΎαααααααααααΎαα
- «»
- «»
- «»
- Β«"α
ααααα: www.habr.com
