ααΎαααΆααα·ααΆααα½α
α αΎαα’αααΈα§ααααα GitOps ααααααΎαα
αααΎαααΆαααααα
α
αΌααα
αααα»αααΆααα»ααααααααααΆαααα
ααΆααααααααααα αααααα ααΆααααααΎααααΊαα»αααΌαα
αααααΆααααααααααα ααααααααααΆαααααααΆαα’αααΈααΆαα
ααααααΆαααα - ααΎαβααΉαβαα·αα αααα»ααα
αα·α α
αΌαααΎααααααααΎαααα αΆ αα·ααααααααα·αααααααΆααα½αααααα»αααααΆααΆααααα αα·αααααα·α
ααΎααααΎαααΆα CI/CD αααα’αααααΆαα½αα
ααα ααααΈααααΎαα αααααααααα αααααααααΎαααΆα
ααΎααααΈα αΆααααααΎαααΆαα½αα―αααΆα werf ααααΌαααΆααααααΆαα»ααα½αααΆαα½ααααααΌαααααααΆα αααααααααααααΌαααΆαα’αα·αααααααα½αα ααα½ααααααΆααΌαα α α½αααΈαα·ααΆαααΆαααα’αααααααα ααα»αααααααΆαα αα ααΆααααΆα’αΆα αα·ααΆαααΆαααΆ:
- αα»αααΆα werf ααααΈαα·ααα½αααααΌαααΆαα ααααααΆααααααααΆαααΆαααααΎαα αα α»ααααααααΆαα―αααΆααα α αΎααααα»ααα αα·α ααΆαααααΆααααααΌαααΆαα½ααα αααα»αα―αααΆααααα αΆαααΈααΆαα ααααααΆαααααααααΈαα werf α
- αααααααααααΆαααΆαα’αα·αααααααααααΉαααα’ααααααΆααα ααααααααΈα’αΆα ααααΌαααΆαα ααααααΆαααΆα αααΎααααααα»ααα½αααααα
- ααααα·ααααα·ααΆααααααααΆαα½αααΎααααΈααΆαααααααΆαααα ααααααααααΆαααααααααΈααα―αααΆαααΊαααΆαα αα ααΆαααα»αααααΆααα
- ααααααααααααααΆααααααΆααααΌααα·ααΈααΆααααα semantic
αααααααααα ααΆαα½αααΉα 5 ααα»αααα·ααααααααΆαα ααααΎαααΆαα ααααααΆαααΆαααααααααΉαααΆαα’αα»αααααΆαααααααααΆααααααααααΆααααααΆααααααα»αααααΆαααααααΎααααααααΆα: ααΈα’αΆααα αααΆαα ααα-ααΉα; - ααα ααααααααααΆαααααααΆααΆααΆαα»ααααΈ ααα "ααααα αα·αα’αα·αααα" (α§. ααΆαα·ααΆαααααααΌαααΆαα’αΆααααα) ααααααΆαα½αααΉαααααα αααα (α§. ααΆααΆα’ααααααα)α
ααΎααααΈααΆαα "ααααααΆαααΆααααα»α" ααΆααα’αααααααΈα’αααααααΎααααΆααααααααααα±ααααΆααααΌαα’αααΈαα½αααα "ααΎαααααααΎαααΆα" ααΎαααΆαααααΎ ααΆαααα‘αΎα werf ααΆα
ααααα‘αα αα·αα§αααααααααΎαα
αα
α»ααααααααΆα - αααβααΊααΆ
αα
αααα»ααααΊαα»αααααΎαααΎααααααα
ααΎααα ααααα ααααα
α»αααααααααα»ααααα werf ααΆααα
αααα»αααΆαααααΈαα½ααα ααΆαααααΆαααΎα ααΆαα’αΆααααααΆα
ααα»ααα ααα ααααααααααΆαααααααΌα ααΆααααααα
- root (ααΎαααΆαααααΆαααΎα),
- αααααΆααααΆαααα’αΆααααααααααααααΆαα
ααααααΆαααΈαα½αα (α§ααΆα ααα
werf.io/v1.0-beta ).
ααΎααααΈαααααΎαααααααΆααααΆααααααα ααααααα½α ααΆααΌαα
ααΆαααααααααΆαααααα»αααΆαα
αααααααΆαααααααΎ /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 αααα½αααΆααααααααα½αααααααΎα αααα’αα»αααα ααααΆαααααααΆααααααΆααα αα·αα’αα»ααααΆαα±ααα’αααααααΎ 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 }}
αα
αααα»αααααΆααααΆα .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 -}}
αααααΆααα ααααα·ααα»αααΉααααααΎαααααα»αα»ααΆαααΆα
αααΎα (ααΎααααααΉαααΌα
αααα) ααΆα
αΆαααΆα
ααααα»αααΆααα·αααΌαααΈαααααΆααααααααΆααα½αααΆ - ααααΆααα ---
(αααααΆααααααααΆαααααααα’αααΈααΆαααααααααααα―αααΆαααααααα
ααΆαααααααα ααΌαααΎα
ααααααααααΆαααααα ααα»αααααααααααΆαααααα·ααα»α ααΎαα α ααααΌααααα»αα»ααΆααααααΆαα "ααααΈαα·ααα"α αααααΆααααααααΆ 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
ααα»ααααααΎααααΈ
ααααα·ααΆαααΆαααααααα½α ααΆαα! α αΌααααααα 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
ααΌαα’αΆαααααααα ααΎαααααααααααΎαα
- Β«
αααα»αααααΎαααΆαααΆααααααααΆαααααααααα»ααααααααΆαα ααααααΆααααααα·ααΈααααΈαα Kubernetes Β» - Β«
αααααΎα αα·αααααΎααααΆααααααΆααααααααΆαααΌα αααααΆαααααααααΌα ααααΆααΆαα½α werf αα·α GitLab CI Β» - Β«
ααΆαααααΎααααΆαα werf ααΎααααΈααΆααα ααααΆααΆα Helm αααααα»αααααΆα Β» - Β«
ααΆαααααΆα werf 1.0 ααΆααααααααΆαα ααΎ GitOps ααααΌαααααΎαααΆαααΆααΆαα½αααΆ ααααΆαααΆα αα·ααααααΆα "α
ααααα: www.habr.com