ืืืจ ืืืืจื ื ืขื ืืื GitOps ืฉืื ื ืืืชืจ ืืคืขื ืืืช.
ืืืื ืกื ืื ืืืื ืกืื ืฉื ืืื ื ืืืชืจ: ืืฆืืจืช ืชืคืจืื ืืฉืืชืฃ ืืื ืืืจืกืืืช, ืืคืื ืขื ืืืืข ืขื ืืืืืจืืช ืืื'. - ืื ืื ื ืื. ืืืงืื ืืืช, ืืืื ื ืชืืงื ืื ืืฉืืื ืืืืืคืืื ืื ืฉื ืืจืืื ืืื ืืืช ืืงืฆืช ืืชืืืืื ื-CI/CD ืื ืืืืื.
ืืืื: ืืื ืืืชืจ ืขืืื
ืืืืชืืืื, ืชืืขืื werf ืืืืืกื ืืื ืขื ืืงืื ืฉืื. ืื ืืืื ืืจืืฉืืช ืคืืชืื ืืกืืืืืช ืฉืื ืืืจื ืืื ืืขืืจ ืืชืืื ืฉื ืืืืจ ืื, ืื ืืื ืืคืืืช ื ืืชื ืืืืจ ืื:
- ืืื ืืฉืืจืจ ืคืื ืงืฆืืืช werf ืืืฉืืช ืืื ืขืืืื ืืชืืขืื, ืืืืคื, ืื ืฉืื ืื ืืชืืขืื ืืจืื ืขื ืฉืืจืืจ ืืจืกื ืืืฉื ืฉื werf;
- ืืคืจืืืงื ืืฉ ืคืืชืื ืืื ืื ืกืืื ืืืื: ื ืืชื ืืฉืืจืจ ืืจืกืืืช ืืืฉืืช ืืกืคืจ ืคืขืืื ืืืื;
- ืื ืคืขืืื ืืื ืืช ืืคืจืืกืช ืืชืจ ืขื ืืจืกื ืืืฉื ืฉื ืชืืขืื ืืื ืืคืืืช ืืืืืขืช;
- ืืคืจืืืงื ื ืืงื ืืืืฉื ืกืื ืืืช
ื ืืืื ืืจืกืืืช , ืขื 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. ืืื ื ืคืฉืื - ืืคืืืงืฆืื ืืกืจืช ืืฆื - ืืืคืฉืจ ืื ืืฉื ืืช ืืงืืืช ืืช ื-Deployment (ืืืชืื ืืขืืืก) ืืืืฆืขืืช Kubernetes ืขืฆืื.
ืืืชืจ ืืืืง, ืื ื ืืืกืคืื ืฉืชื ืชืืื ืืช: ืืืช ืขืืืจ ืืขืื ืืืืฆืืจ, ืืฉื ืืื ืืื ืชืืื ื ื ืืกืคืช ืขืืืจ ืืขืื ืืคืืชืื. ืืชืืื ื ืื ืืกืคืช ืืฉืืฉืช (ืืืฉืงืช) ืจืง ืืืขืื ื-dev ืืื ืขื ืืจืืฉืืช ืืืืืื ืืช ืืจืกืช ืืืชืจ ืื- review commit, ืืื ืืชืื ืืื ืืื ืืชืืฆืข ืืืืฆืขืืช ืืฉืืื Ingress.
werf vs git clone ืืืคืฆืื
ืืคื ืฉืืืจ ืฆืืื ื, ืขื ืื ืช ืืืฆืืจ ืกืืืืงืช ืืชืจ ืขืืืจ ืืจืกื ืกืคืฆืืคืืช ืฉื ืืชืืขืื, ืขืืื ืืื ืืช ืขื ืืื ืืขืืจ ืืชื ืืืืืจ ืืืชืืื. ืืชื ืืืื ืื ืืขืฉืืช ืืืช ืขื ืืื ืฉืืืื ืืืืืจ ืืื ืคืขื ืฉืืชื ืืื ื, ืืืืจืช ืืชืืื ืืืชืืืืื ืืจืฉืืื. ืขื ืืืช, ืืืืืจ ืืคืขืืื ืขืชืืจืช ืืฉืืืื ืืืชืจื ืืื, ืืฆืจืืื ืืชืืืช ืืืจืืืช ืื ืืจืืืืืืืืืช... ืืืกืจืื ืจืฆืื ื ื ืืกืฃ ืืื ืฉืืืืฉื ืื ืืื ืืจื ืืืืกื ืืฉืื ืืืืืื ืืืืื ืืืจืืื.
ืืื, ืืื ืืฉืืจืืช werf ืขืฆืื ืื ืืขืืจืชื ื, ืืืืฉื ืืืืื ืืื ืืืืคืฉืจ ืื ืืืฉืชืืฉ fetch
ืื ื ืืืฅ. ืื ืืกืฃ, ืืขืช ืืืกืคืช ื ืชืื ืื ืืืืืืจ, ื ืืื ืืืืืจ ืจืง ืืช ืืกืคืจืืืช ืืืจืืฉืืช (ืืืงืจื ืฉืื ื ืื ืืกืคืจืืื docs
), ืื ืฉืืคืืืช ืืฉืืขืืชืืช ืืช ืืืืช ืื ืชืื ืื ืื ืืกืคืื.
ืืืืืื ืฉ-Jekyll ืืื ืืื ืืืืืขื ืืืืกืืฃ ื ืชืื ืื ืกืืืืื ืืืื ื ื ืืืฅ ืืชืืื ื ืืกืืคืืช, ืื ืืืื ืืืืื ื ืืงืืคื ื
ืื ืื ื ืืืชืืื 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
- ืืจืกืช ืฉืืจืืจ werf ืฉืชืืฆื ืืืจืืจืช ืืืื ืืืชืจ (ืื ืชืืื ืืฉ ืฆืืจื ืืืฆืื ืชืืขืื ืืคื ืืกืคืจ ืืืจืกื ืืืืื ืืืืชืจ). ืืืืื:v1.0.4-beta.20
-
REVIEW_SHA
- hash ืฉื ืืืืืืช ืืืืงืืจืช ืฉืืื ื ืืชื ืฆืจืื ืืื ืืช ืืช ืืืจืกื ืขืืืจ ืืืืืช ืืืืืงื.
ืืฉืชื ืื ืืื ืืืืืื ืืฆืื ืืจ 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
- 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 -}}
ืื ืืืืืื ืชืืฆืืจ ืืกืคืจ ืืคืฆืื (ืื ื ืืงืืืื ืฉืื), ืืฉ ืฆืืจื ืืงืืช ืืืฉืืื ืืช ืืืคืจืื ืืื ืืื - ืืจืฆืฃ ---
(ืืืืืข ื ืืกืฃ ืขื ืชืืืืจ ืงืืฆื ืชืฆืืจื, ืจืื
ืืืืคื ืืืื, ืื ืืื ืืืืื, ืื ื ืงืืจืืื ืืชืื ืืช ืืืคืฆืื ืขืืืจ "ืืงืจืื ืืืืืืื": ืขืืืจ ืืจืกืช ืืืกืืก, ืืื ืื ืืืจืกื ื-review commit:
{{ 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
ืืกืืื ืืืคืฆืื. ืื ืืกืฃ ืืืจืืืคืงื ืฉื ืืจืกืช ืืฉืืจืฉ ืฉื ืืืชืจ, ืขืืื ื ืืืืืจ ืขื ืืืืืื ืขื ืืืฉืชื ื .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, ืืืืื ืจืง ืฉืชื ืืจืกืืืช ืฉื ืืืชืจ: ืืืจืกื ืื- review commit ืืืจืกืช ืืืกืืก ืฉื ืืืชืจ (ืืฉื ื ื ืืกืื ืืืืืื ืืื ืืชื ืืืืจ , ืฉืืจืจ ื ืชืื ืื). ืืคืืื, ืืชืืื ื ืื ืืกืคืช ืชืืื ืฉืื ื ืืืจืืฉืืช ืจืง ืืงืืข ืืืืืื โโ(ืืืืืื ืืฉื):
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 ืืชืืื ืืช ืฉื ืื ืืื ืืื ืืืช
ืืขืช ืืคืขืืช ื-build ืขืืื ื ืืืืืืจ ืืช ืืฉืชื ื ืืกืืืื ืืื ื ืขืฉื ืฉืืืืฉ werf.yaml
. ืื ืื ืื ืขื ืืืฉืชื ื REVIEW_SHA, ืืืชื ื ืืืืจ ืืขืช ืงืจืืืช pipeline ืื-GitHub hook.
ืื ื ื ืืฆืืจ ืืช ืื ืชืื ืื ืืืืฆืื ืืื ืืืจืืฉืื ืืกืงืจืืคื ืฉื 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
ืืืืจ ืืืืืช ืื ืชืื ืื ืืืืฆืื ืืื ื-Artifact, ืืชื ืืืื ืืื ืืช ืืืคืจืืก ืืืืฆืขืืช ืฉืืื ืืฆืื ืืจ ืืกืื ืืจืืืื ืฉื GitLab CI: Build and 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: ืืชืืขืื ืืืชืจ ืืชืขืืื ืืืืืืืืช.
- ืฉืชื ืชืืื ืืช ืืืจืืืืช ืืงืืื ืืชืืจ ืฉืื ืื.
- ืื ืขืืื ืืืจ, ืื ื ืขืฉื ืฉืืืืฉ ื-Caching ืืื ืืืคืฉืจ - ืืืฉืจ ืืฉืืืจืจืช ืืจืกื ืืืฉื ืฉื werf ืื ืืืง ืฉื GitHub ื ืงืจื ืืืืฆืืข ืืืงืืจืช, ืจืง ืืืคืฅ ืืืชืืื ืขื ืืืจืกื ืฉืฉืื ืชื ื ืื ื ืืืืฉ.
- ืืื ืฆืืจื ืืืฉืื ืขื ืืืืงืช ืชืืื ืืช ืฉืืื ื ืืฉืืืืฉ: ื ืืงืื ืืคื ืืืื ืืืช werf ืืฉืืืจ ืขื ืืกืืจ ืฉื ื-Docker Registry.
ืืืฆืืื
- ืฉืืืืฉ ื-werf ืืืคืฉืจ ืืืืืื ืืขืืื ืืืืืจืืช ืขืงื ืฉืืืจื ืืืืืื ืื ืฉื ืืืืืื ืขืฆืื ืืื ืฉื ืืืืื ืืขืช โโืขืืืื ืขื ืืืืจืื ืืืฆืื ืืื.
- ืขืืืื ืขื ืืืืจื Git ืืืฆืื ืืื ืืืืืช ืืช ืืฆืืจื ืืฉืืคื ืืช ืื ืืืืืจ ืืื ืคืขื ืื ืืืืฆืื ืืืืฉ ืืช ืืืืื ืขื ืืืืืื ืืืคืืืืืืฆืื ืืกืืื. werf ืืฉืชืืฉ ืืืืืื ืืขืืฉื ืืช ืืฉืืืื ืคืขื ืืืช ืืืื, ืืืืืจ ืืื ืืฉืชืืฉ
fetch
ืืจืง ืืฉืฆืจืื. - ืืืืืช ืืืฉืชืืฉ ืืชืื ืืืช Go ืืงืืืฅ ืชืฆืืจืช ื-build
werf.yaml
ืืืคืฉืจ ืื ืืชืืจ ืืืืื ืฉืชืืฆืืชื ืชืืืื ืื ืชืื ืื ืืืฆืื ืืื. - ืฉืืืืฉ ื-mount ื-werf ืืืืฅ ืืืืคื ืืฉืืขืืชื ืืช ืืืกืฃ ืืืคืฆืื - ืืฉื ืืืืืื, ืืืฉืืชืฃ ืืื ืืฆืื ืืจืืช.
- werf ืืงื ืขื ืชืฆืืจืช ืื ืืงืื, ืืื ืืฉืื ืืืืืื ืืขืช ืื ืืื ืืื ืืืช.
ื .ื.
ืงืจื ืื ืืืืื ืฉืื ื:
- ยซ
ืืคืขืืช ืคืงืืืืช ืชืื ืืกืคืงืช ืืืืืจืช ืืคืืืงืฆืื ืืืฉื ื-Kubernetes "; - ยซ
ืื ื ืืคืจืืกื ืฉื ืฉืืจืืชื ืืืงืจื ืืืืชื ืกืื ืขื werf ื-GitLab CI "; - ยซ
ืฉืืืืฉ ื-werf ืืื ืืคืจืกื ืชืจืฉืืื Helm ืืืจืืืื "; - ยซ
ืืฆืืช werf 1.0 stable: ืื ืืงืฉืจ ืฉื GitOps ืืื, ืกืืืืก ืืชืืื ืืืช ".
ืืงืืจ: www.habr.com