Huihuinga hihiko me te horahanga o nga whakaahua Docker me te werf ma te whakamahi i te tauira o te pae tuhinga kua oti te whakaputa

Kua korerohia e matou mo a maatau taputapu GitOps neke atu i te kotahi. werf, a i tenei wa ka hiahia matou ki te whakapuaki i o maatau wheako ki te whakahiato i te waahi me nga tuhinga o te kaupapa ake - werf.io (Ko tana putanga Russian en.werf.io). He waahi noa tenei, engari he mea whakamere tona huihuinga na te mea i hangaia ma te whakamahi i te maha hihiri o nga taonga.

Huihuinga hihiko me te horahanga o nga whakaahua Docker me te werf ma te whakamahi i te tauira o te pae tuhinga kua oti te whakaputa

Haere ki nga ahuatanga o te hanganga o te waahi: te whakaputa i te tahua noa mo nga putanga katoa, nga wharangi me nga korero mo nga tukunga, etc. - e kore matou e. Engari, kia arotahi tatou ki nga take me nga ahuatanga o te huihuinga hihiri me te iti ki nga tukanga CI/CD e whai ake nei.

Kupu Whakataki: pehea te mahi a te pae

Hei timata, ka penapena nga tuhinga werf me tana waehere. Ka tukuna e tenei etahi whakaritenga whanaketanga kei tua atu i te waahanga o tenei tuhinga, engari i te iti rawa ka taea te kii ko:

  • Kaua e tukuna nga mahi werf hou me te kore e whakahou i nga tuhinga, a, ko nga huringa i roto i nga tuhinga e whakaatu ana i te tukunga o te putanga hou o te werf;
  • He tino kaha te whakawhanaketanga o te kaupapa: ka taea te tuku putanga hou i etahi wa i ia ra;
  • Ko nga mahi a-ringa ki te hora i tetahi waahi me te putanga hou o nga tuhinga he tino hoha;
  • Ka whai te kaupapa i te huarahi ororongo whakaputanga, me nga hongere pumau e 5. Kei roto i te tukanga tuku he waahanga raupapa o nga putanga ma roto i nga hongere kia pai ake ai te pumau: mai i te alpha ki te toka-toka;
  • Ko te pae he putanga reo-Rusia, "e ora ana, e whakawhanake ana" (arā, ko nga mea e whakahoutia ana) i roto i te whakarara me te putanga matua (arā, te reo Ingarihi).

Hei huna i enei "kihini o roto" mai i te kaiwhakamahi, ka tuku ki a ia tetahi mea "mahi noa", i mahia e matou motuhake werf tāutanga me te taputapu whakahou Ko multiwerf. Me tohu noa koe i te nama tuku me te hongere pumau kua reri koe ki te whakamahi, ka tirohia e multiwerf mena he putanga hou kei runga i te hongere ka tango mena e tika ana.

I roto i te tahua whiriwhiri putanga i runga i te paetukutuku, kei te waatea nga putanga hou o te werf ki ia hongere. Ma te taunoa, ma te wahitau werf.io/documentation ka tuwhera te putanga o te hongere tino pumau mo te tukunga hou - kua tohua ano e nga miihini rapu. Kei te waatea nga tuhinga mo te hongere ki nga wahitau motuhake (hei tauira, werf.io/v1.0-beta/documentation mo te tuku beta 1.0).

I te katoa, kei te waahi nga waahanga e whai ake nei e waatea ana:

  1. pakiaka (tuwhera taunoa),
  2. mo ia hongere whakahou kaha o ia tukunga (hei tauira, werf.io/v1.0-beta).

Ki te whakaputa i tetahi putanga motuhake o te pae, i te nuinga o te waa, he nui ki te whakahiato ma te whakamahi Jekyllma te rere i roto i te whaiaronga /docs werf repository whakahau e rite ana (jekyll build), i muri i te huri ki te tohu Git o te putanga e hiahiatia ana.

Ko te mea anake hei taapiri:

  • Ko te taputapu ake (werf) ka whakamahia mo te huihuinga;
  • Ko nga tukanga CI / CD ka hangaia i runga i te GitLab CI;
  • a ko enei katoa, ko te tikanga, ka rere ki Kubernetes.

mahi

Inaianei me whakarite nga mahi e whai whakaaro ana ki nga korero katoa kua whakaahuatia:

  1. I muri i te huri i te putanga werf i runga i tetahi hongere whakahou me whakahou aunoa nga tuhinga i runga i te pae.
  2. Mo te whanaketanga me kaha koe i etahi wa tirohia nga putanga arokite o te pae.

Me whakahiato ano te papanga i muri i te whakarereketanga o te putanga i runga i tetahi hongere mai i nga tohu Git e rite ana, engari i roto i te hanga i te ahua ka whiwhi tatou i nga ahuatanga e whai ake nei:

  • I te mea ka huri te rarangi o nga putanga i runga i nga hongere, he mea tika kia hanga ano nga tuhinga mo nga hongere kua rereke te putanga. I muri i nga mea katoa, ko te hanga ano i nga mea katoa ehara i te mea tino pai.
  • Ka huri pea te huinga hongere mo nga whakaputanga. I etahi wa, hei tauira, kaore pea he putanga i runga i nga waahana e pai ake ana i te tukunga 1.1 moata, engari i te wa ka puta mai - i tenei keehi, me whakarereke koe i te huihuinga a-ringa?

Ka huri te reira Ko te huihuinga ka whakawhirinaki ki te whakarereke i nga raraunga o waho.

Реализация

Te whiriwhiri huarahi

Hei tauira, ka taea e koe te whakahaere i ia putanga e hiahiatia ana hei peera motuhake i Kubernetes. Ko tenei whiringa he nui ake te maha o nga mea kei roto i te tautau, ka tipu haere me te pikinga o te maha o nga tuku werf pumau. Na ko tenei, he mea nui ake te tiaki: kei ia putanga tana ake tūmau HTTP, me te utaina iti. Ko te tikanga, ka nui ake nga utu rauemi.

He rite tonu ta maua huarahi te whakaemi i nga putanga katoa e tika ana ki te ahua kotahi. Ko nga tatauranga kua whakahiato o nga putanga katoa o te papaanga kei roto i tetahi ipu me NGINX, a ko nga waka ki te Whakataunga e rite ana ka tae mai ma NGINX Ingress. He hanganga ngawari - he tono kore whenua - ka taea e koe te whakatika i te Whakamahinga (i runga i te kawenga) ma te whakamahi i a Kubernetes ake.

Kia tika ake, kei te kohia e matou nga whakaahua e rua: kotahi mo te ara iahiko whakaputa, ko te tuarua he taapiri mo te ara iahiko dev. Ko te ahua taapiri ka whakamahia (whakarewahia) anake i runga i te ara iahiko dev me te mea matua kei roto ko te putanga o te waahi mai i te arotake, ka mahia te ararere i waenga i a raatau ma te whakamahi i nga rauemi Ingress.

werf vs git clone me nga taonga

Ka rite ki te korero i mua ake nei, ki te whakaputa i nga tatauranga o te waahi mo tetahi putanga motuhake o nga tuhinga, me hanga e koe ma te huri ki te tohu putunga tika. Ka taea hoki e koe tenei ma te kati i te putunga ia wa e hanga ana koe, ma te kowhiri i nga tohu e tika ana mai i te raarangi. Heoi, he mahi tino kaha tenei, me te mea ano, me tuhi nga tohutohu kore-iti... Ko tetahi atu kino kino ko tenei huarahi kaore he huarahi ki te huna i tetahi mea i te wa e huihui ana.

I konei ko te werf whaipainga ake ka haere mai ki te awhina, ki te whakatinana keteroki atamai me te tuku ia koe ki te whakamahi nga putunga o waho. Ma te whakamahi i te werf ki te taapiri i te waehere mai i te putunga ka tino tere ake te hanga, na te mea Ko te werf ka kati i te putunga kotahi ka mahia anake fetch mehemea e tika ana. I tua atu, ka taapirihia nga raraunga mai i te putunga, ka taea e taatau te kowhiri i nga raarangi e tika ana (i roto i a maatau ko te raarangi tenei docs), ka tino whakaitihia te nui o nga raraunga taapiri.

I te mea he taputapu a Jekyll i hangaia mo te whakahiato raraunga pateko me te kore e hiahiatia i te ahua whakamutunga, he mea tika kia whakahiato werf taonga, a ki te ahua whakamutunga kawemai anake te hua whakahiato.

Ka tuhia e matou werf.yaml

Na, i whakatau matou ka whakahiato ia putanga ki tetahi taonga werf motuhake. Heoi ko tatou kaore matou e mohio e hia o enei taonga i te wa o te huihuinga, no reira kaore e taea e matou te tuhi i tetahi whirihoranga hanga hangai (me tino korero, ka taea tonu e matou, engari kaore e tino whai hua).

werf ka taea e koe te whakamahi Haere tauira i to kōnae whirihoranga (werf.yaml), na tenei ka taea whakaputa whirihora i runga i te rere i runga i nga raraunga o waho (he aha taau e hiahia ana!). Ko nga raraunga o waho i roto i ta maatau keehi ko nga korero mo nga putanga me nga tukunga, i runga i te kaupapa ka kohia e matou te maha o nga taonga toi me te hua ka whiwhi maatau e rua nga whakaahua: werf-doc и werf-dev ki te rere i runga iahiko rereke.

Ka tukuna nga raraunga o waho ma nga taurangi taiao. Anei ta ratou hanganga:

  • RELEASES — he raina me te rarangi o nga whakaputanga me te putanga o naianei o te werf, i roto i te ahua o te raarangi uara wehe mokowā i te whakatakotoranga <НОМЕР_РЕЛИЗА>%<НОМЕР_ВЕРСИИ>. He tauira: 1.0%v1.0.4-beta.20
  • CHANNELS — he raina me te rarangi o nga hongere me te putanga o naianei o te werf, i roto i te ahua o te raarangi kua wehea mokowhiti i roto i te whakatakotoranga <КАНАЛ>%<НОМЕР_ВЕРСИИ>. He tauira: 1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22
  • ROOT_VERSION — werf tuku putanga ki te whakaatu i te taunoa i runga i te pae (ehara i nga wa katoa e tika ana ki te whakaatu tuhinga e te tau tuku teitei). Tauira: v1.0.4-beta.20
  • REVIEW_SHA — Hash o te arotake commit e hiahia ana koe ki te hanga i te putanga mo te koropiko whakamātautau.

Ka whakakiia enei taurangi ki te paipa GitLab CI, me pehea te tuhi i raro nei.

Tuatahi, mo te waatea, ka tautuhia e matou i roto werf.yaml Haere ki nga taurangi tauira, tohua nga uara mai i nga taurangi taiao:

{{ $_ := set . "WerfVersions" (cat (env "CHANNELS") (env "RELEASES") | splitList " ") }}
{{ $Root := . }}
{{ $_ := set . "WerfRootVersion" (env "ROOT_VERSION") }}
{{ $_ := set . "WerfReviewCommit" (env "REVIEW_SHA") }}

He rite tonu te whakaahuatanga o te hanga toi mo te whakahiato i te putanga pateko o te pae mo nga keehi katoa e hiahiatia ana e matou (tae atu ki te whakaputa i te putanga pakiaka, me te putanga mo te ara iahiko dev). Na reira, ka nekehia e matou ki tetahi poraka motuhake ma te whakamahi i te mahi define - mo te whakamahi ano i muri mai include. Ka tukuna e matou nga tohenga e whai ake nei ki te tauira:

  • Version — putanga hangaia (ingoa tohu);
  • Channel — te ingoa o te hongere whakahou i hangaia ai te toi;
  • Commit — mahia hash, mena ka hangaia te toi mo te mahi arotake;
  • horopaki.

Whakaahuatanga Tauira Taonga

{{- 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 }}

Me ahurei te ingoa taonga. Ka taea e tatou tenei, hei tauira, ma te taapiri i te ingoa hongere (te uara o te taurangi .Channel) hei pimuri ki te ingoa o te taonga: artifact: doc-{{ .Channel }}. Engari me maarama koe i te wa e kawemai ana mai i nga taonga toi, me korero koe ki nga ingoa ano.

I te wa e whakaahua ana i tetahi taonga, ka whakamahia te waahanga werf e whai ake nei: whakapuru. Whakapuru e tohu ana i te raarangi ratonga build_dir ka taea e koe te tiaki i te keteroki Jekyll i waenga i nga rere paipa, e tino tere ake te whakahiato.

Kua kite pea koe i te whakamahinga o te konae releases.yml he kōnae YAML me nga raraunga tuku i tonoa mai github.com (he mea hanga i te wa e mahia ana he paipa). E hiahiatia ana i te wa e whakahiato ana i te pae, engari i roto i te horopaki o te tuhinga he mea pai ki a maatau na te mea kei runga i tona ahuatanga te whakahiatotanga o te mea kotahi anake — he toi o te putanga pakiaka o te pae (kaore e hiahiatia i etahi atu taonga).

Ka whakatinanahia tenei ma te whakamahi i te korero herenga if Haere ki nga tauira me nga hoahoa {{ $Root.Files.Get "releases.yml" | sha256sum }} i te atamira nga wahanga. Ka penei te mahi: i te wa e hanga ana he taonga mo te putanga pakiaka (taurangi .Channel he rite ki root) kōnae hash releases.yml ka pa ki te hainatanga o te atamira katoa, na te mea he wahanga o te ingoa o te mahi Ansible (tawhā name). Na, ka huri ihirangi konae releases.yml ka whakahiatotia ano te taonga toi.

Kia whai whakaaro ano koe ki te mahi me tetahi putunga o waho. I te ahua o tetahi taonga mai i werf putunga, ko te whaiaronga anake ka taapirihia /docs, a i runga i nga tawhā kua paahitia, ka taapirihia nga raraunga o te tohu e hiahiatia ana, te tuku arotake ranei.

Hei whakamahi i te tauira hanga toi ki te whakaputa whakaahuatanga mo te toi o nga putanga whakawhiti o nga hongere me nga whakaputanga, ka whakarite matou i tetahi kopae ki te taurangi .WerfVersions в werf.yaml:

{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ dict "Version" $VersionsDict._1 "Channel" $VersionsDict._0 "Root" $Root | include "doc_artifact" }}
---
{{ end -}}

No te mea ka whakaputahia e te kopae etahi taonga toi (e tumanako ana matou), me whai whakaaro ki te wehenga i waenganui i a raatau - te raupapa --- (Mo etahi atu korero mo te whakatakotoranga konae whirihoranga, tirohia tuhinga). Ka rite ki te korero i mua ake nei, i te wa e karanga ana i tetahi tauira i roto i te kohanga, ka tukuna e matou nga tawhā putanga, URL me te horopaki pakiaka.

Waihoki, engari kaore he kopae, ka karangahia e matou te tauira toi mo nga "take motuhake": mo te putanga pakiaka, me te putanga mai i te arotake ka mahia:

{{ 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 }}

Kia mahara ko te mahi toi mo te mahi arotake ka hangaia anake mena kua tautuhia te taurangi .WerfReviewCommit.

Kua reri nga taonga - kua tae ki te wa ki te kawemai!

Ko te ahua whakamutunga, i hangaia hei whakahaere i runga i te Kubernetes, he NGINX auau me te konae whirihoranga tūmau kua taapirihia nginx.conf me te pateko mai i nga taonga toi. I tua atu i te toi o te putanga pakiaka o te papanga, me whakahoki ano i te kopae i runga i te taurangi .WerfVersions ki te kawemai i nga taonga toi o te hongere me te tuku putanga + whai i te ture whakaingoa toi i tangohia e matou i mua. I te mea ka penapenahia e ia taonga nga putanga o te waahi mo nga reo e rua, ka kawemai e matou ki nga waahi i whakaratohia e te whirihoranga.

Whakaahuatanga o te ahua whakamutunga 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 -}}

Ko te ahua taapiri, me te mea matua, ka whakarewahia i runga i te riipene dev, e rua noa nga waahanga o te papanga: ko te putanga mai i te arotake commit me te putanga pakiaka o te papanga (he taonga whanui me, mena ka mahara koe , tuku raraunga). No reira, ka rere ke te ahua taapiri mai i te mea matua anake i te waahanga kawemai (me te tikanga, i te ingoa):

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 }}

Ka rite ki te korero i runga ake nei, ko te mea hanga mo te mahi arotake ka puta anake ka whakahaerea te taurangi taiao kua whakaritea REVIEW_SHA. Ka taea te kore e whakaputa i te ahua werf-dev mena karekau he taurangi taiao REVIEW_SHA, engari kia taea ai horoi ma nga kaupapa here Ko nga whakaahua Docker i roto i te werf i mahi mo te ahua werf-dev, ka waiho maatau kia hangaia me te ahua o te putanga pakiaka (kua oti kee te hanga), hei whakangawari i te hanganga paipa.

Kua rite te huihuinga! Me neke atu ki te CI/CD me nga ahuatanga nui.

Pipeline i GitLab CI me nga ahuatanga o te hanga hihiri

I te wa e whakahaerehia ana te hanga me tautuhi i nga taurangi taiao e whakamahia ana werf.yaml. Kaore tenei e pa ana ki te taurangi REVIEW_SHA, ka tautuhia e matou i te wa e waea ana i te paipa mai i te matau GitHub.

Ka whakaputahia e matou nga raraunga o waho e tika ana i roto i te tuhinga Bash generate_artifacts, ka whakaputa e rua nga taonga paipa GitLab:

  • Tuhinga releases.yml me nga raraunga tuku,
  • Tuhinga common_envs.sh, kei roto nga taurangi taiao hei kaweake.

Ihirangi kōnae generate_artifacts ka kitea e koe i roto i to maatau whare putunga me nga tauira. Ko te whiwhi i nga raraunga ake ehara i te kaupapa o te tuhinga, engari ko te konae common_envs.sh he mea nui ki a tatou, no te mea kei runga te mahi a te werf. He tauira o ona ihirangi:

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'

Ka taea e koe te whakamahi i te putanga o taua tuhinga, hei tauira, ma te whakamahi i te mahi Bash source.

Inaianei kua tae mai te wahanga ngahau. Kia tika ai te mahi o te hanga me te whakatakotoranga o te tono, me whakarite werf.yaml ko te taua iti rawa i roto i te paipa kotahi. Mena kaore i tutuki tenei ahuatanga, katahi ka rereke nga hainatanga o nga waahanga e tatauhia ana e te werf i te wa o te huihuinga, hei tauira, te tuku, ka rereke. Ma tenei ka puta he hapa tuku, na te mea ... ka ngaro te ahua e hiahiatia ana mo te horahanga.

I etahi atu kupu, mehemea i te wa o te huihuinga o te ahua o te waahi he rite tonu nga korero mo nga tukunga me nga putanga, a, i te wa o te tukunga ka tukuna he putanga hou me nga taurangi o te taiao he rereke nga uara, katahi ka kore te tukunga me te hapa: i muri i nga mea katoa, kaore ano kia hangaia te taonga o te putanga hou.

Ki te whakatipuranga werf.yaml ka whakawhirinaki ki nga raraunga o waho (hei tauira, he rarangi o nga putanga o naianei, pera i ta maatau keehi), katahi ka tuhia te hanganga me nga uara o aua raraunga ki roto i te paipa. He mea nui tenei mena ka huri nga tawhā o waho i nga wa maha.

Ka tatou whiwhi me te tuhi i nga raraunga o waho i te wahanga tuatahi o te paipa i GitLab (Hanga mua) me te tuku atu i roto i te ahua GitLab CI taonga. Ma tenei ka taea e koe te whakahaere me te whakaara ano i nga mahi paipa (hanga, tohatoha, horoi) me te whirihoranga ano i roto werf.yaml.

Nga korero o te atamira Hanga mua konae .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

I te hopu i nga raraunga o waho i roto i te toi, ka taea e koe te hanga me te tohatoha ma te whakamahi i nga waahanga paipa GitLab CI paerewa: Hanga me te Hoatu. Ka whakarewahia e matou te pipeline ma te whakamahi matau mai i te werf GitHub repository (arā, ina he huringa kei roto i te putunga GitHub). Ko nga raraunga mo ratou ka kitea i roto i nga taonga kaupapa GitLab i te waahanga Tautuhinga CI/CD -> Pipeline keu, katahi ka hanga i te Webhook e rite ana ki GitHub (Tautuhinga -> Webhooks).

Ka penei te ahua o te waahanga hanga:

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

Ka taapirihia e GitLab nga taonga e rua mai i te atamira ki te waahi hanga Hanga mua, no reira ka kaweake i nga taurangi me nga raraunga whakauru kua rite ma te whakamahi i te hanga source common_envs.sh. Ka tiimata matou i te waahanga hanga i nga keehi katoa, engari mo te whakarewa i te paipa kia rite ki te raarangi. E ai ki te raarangi, ka whakahaerehia e matou he paipa mo te horoi - i tenei keehi kaore he take ki te mahi huihuinga.

I te wahanga tukunga, ka whakaahuahia e maatau nga mahi e rua - wehe ke mo te tuku ki te whakaputanga me nga iahiko dev, ma te whakamahi i te tauira 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

He rereke noa nga mahi i roto i te tautuhi i te horopaki huinga hei whakauru i te werf (WERF_KUBE_CONTEXT), me te whakarite i nga taurangi taiao koropiko (environment.name и environment.url), ka whakamahia i roto i nga tauira tūtohi Helm. E kore matou e whakarato i nga ihirangi o nga tauira, na te mea... karekau he mea whakamere mo te kaupapa e pa ana, engari ka kitea e koe i roto putunga mo te tuhinga.

Tapa whakamutunga

I te mea ka tukuna nga putanga werf i nga wa maha, ka hangaia nga whakaahua hou, ka tipu haere tonu te Rehita Docker. Na reira, he mea nui ki te whirihora i te horoi whakaahua aunoa i runga i nga kaupapa here. He tino ngawari ki te mahi.

Hei whakatinana ka hiahia koe:

  • Tāpirihia he taahiraa horoi ki .gitlab-ci.yml;
  • Tāpirihia te mahi i ia wa o te mahi horoi;
  • Whakaritehia he taurangi taiao me te tohu uru tuhi.

Te taapiri i te waahi horoi ki .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

Kua kitea e matou tata ki runga ake i enei mea katoa - ki te horoi anake me uru tuatahi koe ki te Docker Registry me tetahi tohu e whai mana ana ki te whakakore i nga whakaahua i roto i te Docker Registry (ko te tohu mahi a GitLab CI ka tukuna aunoatia. kei a ratou enei mana). Me hanga te tohu ki GitLab i mua atu, me tohu tona uara ki te taurangi taiao WERF_IMAGES_CLEANUP_PASSWORD te kaupapa (Tautuhinga CI/CD -> Taurangi).

Ko te taapiri i tetahi mahi horoi me te raarangi e hiahiatia ana ka mahia CI/CD ->
Ngā Mahere
.

Koina: he kaupapa kei roto i te Rehita Docker e kore e tipu tonu mai i nga whakaahua kore i whakamahia.

I te mutunga o te waahanga mahi, me whakamahara ahau ki a koe kei te waatea nga raarangi katoa mai i te tuhinga Git:

hua

  1. I whiwhi matou i te hanganga hui arorau: kotahi toi mo ia putanga.
  2. Ko te huihuinga he ao katoa, kaore e hiahiatia he whakarereketanga a-ringa ka tukuna nga putanga hou o te werf: ko nga tuhinga kei runga i te paetukutuku ka whakahou aunoa.
  3. E rua nga whakaahua ka kohia mo nga waahanga rereke.
  4. Ka tere te mahi, na te mea Ka taea te whakamahi keteroki - ka tukuna he putanga hou o te werf, ka karangahia ranei he matau GitHub mo te mahi arotake, ko te mea hangai e rite ana me te putanga whakarereke ka hangaia ano.
  5. Kaua e whakaaro mo te whakakore i nga whakaahua kaore i whakamahia: ko te horoi kia rite ki nga kaupapa here werf ka mau tonu te Rehita Docker.

kitenga

  • Ma te whakamahi i te werf ka tere te mahi a te huihuinga na te keteroki o te huihuinga me te keteroki i te wa e mahi ana me nga putunga o waho.
  • Ma te mahi tahi me nga whare putunga Git o waho ka whakakorehia te hiahia ki te kati i te katoa o te putunga ia wa, ki te hanga ano ranei i te wira me te arotau arotau uaua. Ka whakamahi a werf i te keteroki ka mahi kotahi anake te kati, katahi ka whakamahi fetch a ka tika ana.
  • Te kaha ki te whakamahi i nga tauira Haere i roto i te konae whirihoranga hanga werf.yaml ka taea e koe te whakaahua i tetahi huihuinga ka whakawhirinaki nga hua ki nga raraunga o waho.
  • Ma te whakamahi i te mount in werf ka tere ake te kohinga taonga - na te keteroki, he mea noa ki nga paipa katoa.
  • werf he mea ngawari ki te whirihora i te horoi, he mea tino nui ki te hanga hihiri.

PS

Pānuihia hoki i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero