werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

27 ื‘ืžืื™ ื‘ืื•ืœื ื”ืžืจื›ื–ื™ ืฉืœ ื›ื ืก DevOpsConf 2019, ืฉื ืขืจืš ื‘ืžืกื’ืจืช ื”ืคืกื˜ื™ื‘ืœ RIT++ 2019, ื›ื—ืœืง ืžื”ืกืขื™ืฃ "ืžืฉืœื•ื— ืจืฆื™ืฃ", ื ื™ืชืŸ ื“ื•ื— "werf - ื”ื›ืœื™ ืฉืœื ื• ืœ-CI/CD ื‘-Kubernetes". ื–ื” ืžื“ื‘ืจ ืขืœ ืืœื” ื‘ืขื™ื•ืช ื•ืืชื’ืจื™ื ืฉื›ื•ืœื ืžืชืžื•ื“ื“ื™ื ืื™ืชื ื‘ืขืช ืคืจื™ืกื” ืœ-Kubernetes, ื›ืžื• ื’ื ืขืœ ื ื™ื•ืื ืกื™ื ืฉืื•ืœื™ ืœื ื ื™ืชืŸ ืœื”ื‘ื—ื™ืŸ ืžื™ื“. ื‘ื ื™ืชื•ื— ืคืชืจื•ื ื•ืช ืืคืฉืจื™ื™ื, ืื ื• ืžืจืื™ื ื›ื™ืฆื“ ื–ื” ืžื™ื•ืฉื ื‘ื›ืœื™ ืงื•ื“ ืคืชื•ื— werf.

ืžืื– ื”ืžืฆื’ืช, ื”ืฉื™ืจื•ืช ืฉืœื ื• (ืฉื ื•ื“ืข ื‘ืขื‘ืจ ื›-dapp) ื”ื’ื™ืข ืœืื‘ืŸ ื“ืจืš ื”ื™ืกื˜ื•ืจื™ืช ืฉืœ 1000 ื›ื•ื›ื‘ื™ื ื‘-GitHub - ืื ื• ืžืงื•ื•ื™ื ืฉืงื”ื™ืœืช ื”ืžืฉืชืžืฉื™ื ื”ื”ื•ืœื›ืช ื•ื’ื“ืœื” ืชื”ืคื•ืš ืืช ื”ื—ื™ื™ื ืœืงืœื™ื ื™ื•ืชืจ ืขื‘ื•ืจ ืžื”ื ื“ืกื™ DevOps ืจื‘ื™ื.

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ืื– ืื ื• ืžืฆื™ื’ื™ื ืกืจื˜ื•ืŸ ื”ื“ื™ื•ื•ื— (~47 ื“ืงื•ืช, ื”ืจื‘ื” ื™ื•ืชืจ ืื™ื ืคื•ืจืžื˜ื™ื‘ื™ ืžื”ืžืืžืจ) ื•ื”ืชืžืฆื™ืช ื”ืจืืฉื™ืช ืžืžื ื• ื‘ืฆื•ืจืช ื˜ืงืกื˜. ืœืœื›ืช!

ืžืกื™ืจืช ืงื•ื“ ืœ-Kubernetes

ื”ืฉื™ื—ื” ืœื ืชื”ื™ื” ื™ื•ืชืจ ืขืœ werf, ืืœื ืขืœ CI/CD ื‘-Kubernetes, ืžื” ืฉืžืจืžื– ืฉื”ืชื•ื›ื ื” ืฉืœื ื• ืืจื•ื–ื” ื‘ืงื•ื ื˜ื™ื™ื ืจื™ื ืฉืœ Docker (ื“ื™ื‘ืจืชื™ ืขืœ ื–ื” ื‘ ื“ื•"ื— 2016), ื•-K8s ื™ืฉืžืฉื• ืœื”ืคืขืœืชื• ื‘ื™ื™ืฆื•ืจ (ืขื•ื“ ืขืœ ื–ื” ื‘ ื”ืฉื ื” 2017).

ืื™ืš ื ืจืื” ืžืฉืœื•ื— ื‘-Kubernetes?

  • ื™ืฉ ืžืื’ืจ Git ืขื ื”ืงื•ื“ ื•ื”ื•ืจืื•ืช ืœื‘ื ื™ื™ืชื•. ื”ืืคืœื™ืงืฆื™ื” ืžื•ื‘ื ื™ืช ื‘ืชืžื•ื ืช Docker ื•ืžืชืคืจืกืžืช ื‘-Docker Registry.
  • ืื•ืชื• ืžืื’ืจ ืžื›ื™ืœ ื’ื ื”ื•ืจืื•ืช ื›ื™ืฆื“ ืœืคืจื•ืก ื•ืœื”ืคืขื™ืœ ืืช ื”ืืคืœื™ืงืฆื™ื”. ื‘ืฉืœื‘ ื”ืคืจื™ืกื”, ื”ื ื—ื™ื•ืช ืืœื• ื ืฉืœื—ื•ืช ืืœ Kubernetes, ืฉืžืงื‘ืœืช ืืช ื”ืชืžื•ื ื” ื”ืจืฆื•ื™ื” ืžื”ืจื™ืฉื•ื ื•ืžืฉื™ืงื” ืื•ืชื”.
  • ื‘ื ื•ืกืฃ, ื™ืฉ ื‘ื“ืจืš ื›ืœืœ ื‘ื“ื™ืงื•ืช. ื—ืœืง ืžืืœื” ื ื™ืชืŸ ืœืขืฉื•ืช ื‘ืขืช ืคืจืกื•ื ืชืžื•ื ื”. ืืชื” ื™ื›ื•ืœ ื’ื (ื‘ืขืงื‘ื•ืช ืื•ืชืŸ ื”ื•ืจืื•ืช) ืœืคืจื•ืก ืขื•ืชืง ืฉืœ ื”ื™ื™ืฉื•ื (ื‘ืžืจื—ื‘ ืฉืžื•ืช ื ืคืจื“ ืฉืœ K8s ืื• ื‘ืืฉื›ื•ืœ ื ืคืจื“) ื•ืœื”ืจื™ืฅ ืฉื ื‘ื“ื™ืงื•ืช.
  • ืœื‘ืกื•ืฃ, ืืชื” ืฆืจื™ืš ืžืขืจื›ืช CI ืฉืžืงื‘ืœืช ืื™ืจื•ืขื™ื ืž-Git (ืื• ืœื—ื™ืฆื•ืช ืขืœ ื›ืคืชื•ืจ) ื•ืงื•ืจืืช ืœื›ืœ ื”ืฉืœื‘ื™ื ื”ืžื™ื•ืขื“ื™ื: ืœื‘ื ื•ืช, ืœืคืจืกื, ืœืคืจื•ืก, ืœื‘ื“ื•ืง.

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ื™ืฉ ื›ืืŸ ื›ืžื” ื”ืขืจื•ืช ื—ืฉื•ื‘ื•ืช:

  1. ื›ื™ ื™ืฉ ืœื ื• ืชืฉืชื™ืช ื‘ืœืชื™ ื ื™ืชื ืช ืœืฉื™ื ื•ื™ (ืชืฉืชื™ืช ื‘ืœืชื™ ื ื™ืชื ืช ืœืฉื™ื ื•ื™), ืชืžื•ื ืช ื”ืืคืœื™ืงืฆื™ื” ื”ืžืฉืžืฉืช ื‘ื›ืœ ื”ืฉืœื‘ื™ื (ื‘ื™ืžื•ื™, ื”ืคืงื” ื•ื›ื•'), ื—ื™ื™ื‘ ืœื”ื™ื•ืช ืื—ื“. ื“ื™ื‘ืจืชื™ ืขืœ ื–ื” ื‘ื™ืชืจ ืคื™ืจื•ื˜ ื•ืขื ื“ื•ื’ืžืื•ืช. ื›ืืŸ.
  2. ืžื›ื™ื•ื•ืŸ ืฉืื ื• ืขื•ืงื‘ื™ื ืื—ืจ ื”ืชืฉืชื™ืช ื›ื’ื™ืฉืช ืงื•ื“ (IAC), ืงื•ื“ ื”ื™ื™ืฉื•ื, ื”ื•ืจืื•ืช ื”ื”ืจื›ื‘ื” ื•ื”ื”ืคืขืœื” ืฉืœื• ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ื‘ื“ื™ื•ืง ื‘ืžืื’ืจ ืื—ื“. ืœืžื™ื“ืข ื ื•ืกืฃ ืขืœ ื›ืš, ืจืื” ืื•ืชื• ื“ื•ื—.
  3. ืฉืจืฉืจืช ืžืฉืœื•ื—ื™ื (ืžึฐืกึดื™ืจึธื”) ื‘ื“ืจืš ื›ืœืœ ืื ื—ื ื• ืจื•ืื™ื ืืช ื–ื” ื›ืš: ื”ืืคืœื™ืงืฆื™ื” ื”ื•ืจื›ื‘ื”, ื ื‘ื“ืงื”, ืฉื•ื—ืจืจื” (ืฉืœื‘ ื”ืฉื—ืจื•ืจ) ื•ื–ื”ื• - ื”ืžืกื™ืจื” ื‘ื•ืฆืขื”. ืื‘ืœ ื‘ืžืฆื™ืื•ืช, ื”ืžืฉืชืžืฉ ืžืงื‘ืœ ืืช ืžื” ืฉืคืจืกืžืช, ืœื ื•ืื– ื›ืฉืžืกืจืช ืืช ื–ื” ืœื™ื™ืฆื•ืจ, ื•ื›ืฉื”ื•ื ื”ื™ื” ืžืกื•ื’ืœ ืœืœื›ืช ืœืฉื ื•ื”ื”ืคืงื” ื”ื–ื• ืขื‘ื“ื”. ืื– ืื ื™ ืžืืžื™ืŸ ืฉืฉืจืฉืจืช ื”ืžืฉืœื•ื—ื™ื ืžืกืชื™ื™ืžืช ืจืง ื‘ืฉืœื‘ ื”ืžื‘ืฆืขื™ (ืœึธืจื•ึผืฅ), ืื• ืœื™ืชืจ ื“ื™ื•ืง, ืืคื™ืœื• ื‘ืจื’ืข ืฉื‘ื• ื”ืงื•ื“ ื”ื•ืกืจ ืžื”ื™ื™ืฆื•ืจ (ื”ื—ืœืคืชื• ื‘ื—ื“ืฉ).

ื”ื‘ื” ื ื—ื–ื•ืจ ืœืชื•ื›ื ื™ืช ื”ืžืกื™ืจื” ืœืขื™ืœ ื‘-Kubernetes: ื”ื™ื ื”ื•ืžืฆืื” ืœื ืจืง ืขืœ ื™ื“ื™ื ื•, ืืœื ืขืœ ื™ื“ื™ ืžืžืฉ ื›ืœ ืžื™ ืฉื˜ื™ืคืœ ื‘ื‘ืขื™ื” ื–ื•. ืœืžืขืฉื”, ื“ืคื•ืก ื–ื” ื ืงืจื ื›ืขืช GitOps (ืชื•ื›ืœื• ืœืงืจื•ื ืขื•ื“ ืขืœ ื”ืžื•ื ื— ื•ื”ืจืขื™ื•ื ื•ืช ืžืื—ื•ืจื™ื• ื›ืืŸ). ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืฉืœื‘ื™ ื”ืชื›ื ื™ืช.

ืฉืœื‘ ื‘ื ื™ื™ื”

ื ืจืื” ืฉืืคืฉืจ ืœื“ื‘ืจ ืขืœ ื‘ื ื™ื™ืช ืชืžื•ื ื•ืช Docker ื‘ืฉื ืช 2019, ื›ืฉื›ื•ืœื ื™ื•ื“ืขื™ื ืื™ืš ืœื›ืชื•ื‘ Dockerfiles ื•ืœื”ืคืขื™ืœ docker build?.. ืœื”ืœืŸ ื”ื ื™ื•ืื ืกื™ื ืฉื”ื™ื™ืชื™ ืจื•ืฆื” ืœืฉื™ื ืœื‘ ืืœื™ื”ื:

  1. ืžืฉืงืœ ืชืžื•ื ื” ื—ืฉื•ื‘, ืื– ื”ืฉืชืžืฉ ืจื‘ ืฉืœื‘ื™ืืœื”ืฉืื™ืจ ื‘ืชืžื•ื ื” ืจืง ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉื‘ืืžืช ื ื—ื•ืฆื” ืœืคืขื•ืœื”.
  2. ืžืกืคืจ ืฉื›ื‘ื•ืช ื™ืฉ ืœืžื–ืขืจ ืขืœ ื™ื“ื™ ืฉื™ืœื•ื‘ ืฉืจืฉืจืื•ืช ืฉืœ RUN-ืคืงื•ื“ื•ืช ืœืคื™ ืžืฉืžืขื•ืช.
  3. ืขื ื–ืืช, ื–ื” ืžื•ืกื™ืฃ ื‘ืขื™ื•ืช ืื™ืชื•ืจ ื‘ืื’ื™ื, ื›ื™ ื›ืืฉืจ ื”ืžื›ืœื•ืœ ืงื•ืจืก, ืืชื” ืฆืจื™ืš ืœืžืฆื•ื ืืช ื”ืคืงื•ื“ื” ื”ื ื›ื•ื ื” ืžื”ืฉืจืฉืจืช ืฉื’ืจืžื” ืœื‘ืขื™ื”.
  4. ืžื”ื™ืจื•ืช ื”ืจื›ื‘ื” ื—ืฉื•ื‘ ื›ื™ ืื ื—ื ื• ืจื•ืฆื™ื ืœื”ืคืขื™ืœ ืฉื™ื ื•ื™ื™ื ื‘ืžื”ื™ืจื•ืช ื•ืœืจืื•ืช ืืช ื”ืชื•ืฆืื•ืช. ืœื“ื•ื’ืžื”, ืื™ื ืš ืจื•ืฆื” ืœื‘ื ื•ืช ืžื—ื“ืฉ ืชืœื•ืช ื‘ืกืคืจื™ื•ืช ืฉืคื” ื‘ื›ืœ ืคืขื ืฉืืชื” ื‘ื•ื ื” ื™ื™ืฉื•ื.
  5. ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืžืžืื’ืจ Git ืื—ื“ ืฉืืชื” ืฆืจื™ืš ืชืžื•ื ื•ืช ืจื‘ื•ืช, ืฉื ื™ืชืŸ ืœืคืชื•ืจ ืขืœ ื™ื“ื™ ืงื‘ื•ืฆื” ืฉืœ Dockerfiles (ืื• ืฉืœื‘ื™ื ืขื ืฉื ื‘ืงื•ื‘ืฅ ืื—ื“) ื•ืกืงืจื™ืคื˜ Bash ืขื ื”ื”ืจื›ื‘ื” ื”ืจืฆื™ืคื” ืฉืœื”ื.

ื–ื” ื”ื™ื” ืจืง โ€‹โ€‹ืงืฆื” ื”ืงืจื—ื•ืŸ ืฉื›ื•ืœื ืžืชืžื•ื“ื“ื™ื ืื™ืชื•. ืื‘ืœ ื™ืฉ ื‘ืขื™ื•ืช ืื—ืจื•ืช, ื‘ืžื™ื•ื—ื“:

  1. ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื‘ืฉืœื‘ ื”ื”ืจื›ื‘ื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืžืฉื”ื• ื”ืจ (ืœื“ื•ื’ืžื”, ืฉืžื•ืจ ืืช ื”ืชื•ืฆืื” ืฉืœ ืคืงื•ื“ื” ื›ืžื• apt ื‘ืกืคืจื™ื™ื” ืฉืœ ืฆื“ ืฉืœื™ืฉื™).
  2. ืื ื—ื ื• ืจื•ืฆื™ื ื‘ืœืชื™ ืืคืฉืจื™ ื‘ืžืงื•ื ืœื›ืชื•ื‘ ื‘ืžืขื˜ืคืช.
  3. ืื ื—ื ื• ืจื•ืฆื™ื ืœื‘ื ื•ืช ืœืœื Docker (ืœืžื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื ื•ืกืคืช ืฉื‘ื” ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื”ื’ื“ื™ืจ ื”ื›ืœ ื‘ืฉื‘ื™ืœ ื–ื”, ื›ืฉื›ื‘ืจ ื™ืฉ ืœื ื• ืืฉื›ื•ืœ Kubernetes ืฉื‘ื• ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœื”ืจื™ืฅ ืงื•ื ื˜ื™ื™ื ืจื™ื?).
  4. ื”ืจื›ื‘ื” ืžืงื‘ื™ืœื”, ืฉื ื™ืชืŸ ืœื”ื‘ื™ืŸ ื‘ื“ืจื›ื™ื ืฉื•ื ื•ืช: ืคืงื•ื“ื•ืช ืฉื•ื ื•ืช ืžื”- Dockerfile (ืื ื ืขืฉื” ืฉื™ืžื•ืฉ ืจื‘-ืฉืœื‘ื™), ืžืกืคืจ commits ืฉืœ ืื•ืชื• ืžืื’ืจ, ืžืกืคืจ Dockerfile.
  5. ื”ืจื›ื‘ื” ืžื‘ื•ื–ืจืช: ืื ื—ื ื• ืจื•ืฆื™ื ืœืืกื•ืฃ ื“ื‘ืจื™ื ื‘ืชืจืžื™ืœื™ื ืฉื”ื "ื–ืžื ื™ื™ื" ื‘ื’ืœืœ ื”ืžื˜ืžื•ืŸ ืฉืœื”ื ื ืขืœื, ืžื” ืฉืื•ืžืจ ืฉืฆืจื™ืš ืœืื—ืกืŸ ืื•ืชื• ืื™ืคืฉื”ื• ื‘ื ืคืจื“.
  6. ืœื‘ืกื•ืฃ, ืฆื™ื™ื ืชื™ ืืช ืคืกื’ืช ื”ืจืฆื•ื ื•ืช ืื•ื˜ื•ืžืื’ื™ื”: ื–ื” ื™ื”ื™ื” ืื™ื“ื™ืืœื™ ืœืœื›ืช ืœืžืื’ืจ, ืœื”ืงืœื™ื“ ืคืงื•ื“ื” ื›ืœืฉื”ื™ ื•ืœืงื‘ืœ ืชืžื•ื ื” ืžื•ื›ื ื”, ืžื•ืจื›ื‘ืช ืขื ื”ื‘ื ื” ืฉืœ ืื™ืš ื•ืžื” ืœืขืฉื•ืช ื ื›ื•ืŸ. ืขื ื–ืืช, ืื ื™ ืื™ืฉื™ืช ืœื ื‘ื˜ื•ื— ืฉื ื™ืชืŸ ืœืฆืคื•ืช ืืช ื›ืœ ื”ื ื™ื•ืื ืกื™ื ื‘ื“ืจืš ื–ื•.

ื•ื”ื ื” ื”ืคืจื•ื™ืงื˜ื™ื:

  • moby/buildkit - ื‘ื•ื ื” ืž- Docker Inc (ื›ื‘ืจ ืžืฉื•ืœื‘ ื‘ื’ืจืกืื•ืช ื”ื ื•ื›ื—ื™ื•ืช ืฉืœ Docker), ืฉืžื ืกื” ืœืคืชื•ืจ ืืช ื›ืœ ื”ื‘ืขื™ื•ืช ื”ืœืœื•;
  • ืงืื ื™ืงื• - Builder ืžื’ื•ื’ืœ ื”ืžืืคืฉืจ ืœื‘ื ื•ืช ืœืœื Docker;
  • Buildpacks.io - ื”ื ื™ืกื™ื•ืŸ ืฉืœ CNCF ืœื™ืฆื•ืจ ืงืกื ืื•ื˜ื•ืžื˜ื™ ื•ื‘ืžื™ื•ื—ื“ ืคืชืจื•ืŸ ืžืขื ื™ื™ืŸ ืขื ื‘ืกื™ืก ืžื—ื“ืฉ ืœืฉื›ื‘ื•ืช;
  • ื•ืขื•ื“ ื—ื‘ื•ืจื” ืฉืœ ื›ืœื™ ืขื–ืจ ืื—ืจื™ื, ื›ื’ื•ืŸ ื‘ื•ื ื”, genuinetools/img...

...ื•ืชืจืื” ื›ืžื” ื›ื•ื›ื‘ื™ื ื™ืฉ ืœื”ื ื‘-GitHub. ื›ืœื•ืžืจ, ืžืฆื“ ืื—ื“, docker build ืงื™ื™ื ื•ื™ื›ื•ืœ ืœืขืฉื•ืช ืžืฉื”ื•, ืื‘ืœ ื‘ืžืฆื™ืื•ืช ื”ื‘ืขื™ื” ืœื ื ืคืชืจื” ืœื—ืœื•ื˜ื™ืŸ - ื”ื”ื•ื›ื—ื” ืœื›ืš ื”ื™ื ืคื™ืชื•ื— ืžืงื‘ื™ืœ ืฉืœ ืืกืคื ื™ื ืืœื˜ืจื ื˜ื™ื‘ื™ื™ื, ืฉื›ืœ ืื—ื“ ืžื”ื ืคื•ืชืจ ื—ืœืง ืžื”ื‘ืขื™ื•ืช.

ื”ืจื›ื‘ื” ื‘ื•ื•ืจืฃ

ืื– ื”ื’ืขื ื• werf (ืงื•ื“ื ื”ืžืคื•ืจืกื ื›ืžื• dapp) โ€” ื›ืœื™ ืขื–ืจ ื‘ืงื•ื“ ืคืชื•ื— ืฉืœ ื—ื‘ืจืช ืคืœื ื˜, ืฉืื ื—ื ื• ืžื™ื™ืฆืจื™ื ื›ื‘ืจ ืฉื ื™ื ืจื‘ื•ืช. ื”ื›ืœ ื”ืชื—ื™ืœ ืœืคื ื™ 5 ืฉื ื™ื ืขื ืกืงืจื™ืคื˜ื™ื ืฉืœ Bash ืฉืžื™ื˜ื‘ื• ืืช ื”ื”ืจื›ื‘ื” ืฉืœ Dockerfiles, ื•ื‘ืžืฉืš 3 ื”ืฉื ื™ื ื”ืื—ืจื•ื ื•ืช ื‘ื•ืฆืข ืคื™ืชื•ื— ืžืœื ื‘ืžืกื’ืจืช ืคืจื•ื™ืงื˜ ืื—ื“ ืขื ืžืื’ืจ Git ืžืฉืœื• (ืชื—ื™ืœื” ื‘ืจื•ื‘ื™, ื•ืื—ืจ ื›ืš ื›ืชื‘ ืžื—ื“ืฉ to Go, ื•ื‘ืื•ืชื• ื–ืžืŸ ืฉื•ื ื” ืฉื). ืื™ืœื• ื‘ืขื™ื•ืช ื”ืจื›ื‘ื” ื ืคืชืจื•ืช ื‘-werf?

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ื”ื‘ืขื™ื•ืช ื”ืžื•ืฆืœืœื•ืช ื‘ื›ื—ื•ืœ ื›ื‘ืจ ื™ื•ืฉืžื•, ื”ื‘ื ื™ื™ื” ื”ืžืงื‘ื™ืœื” ื ืขืฉืชื” ื‘ืชื•ืš ืื•ืชื• ืžืืจื—, ื•ื”ื‘ืขื™ื•ืช ื”ืžื•ื“ื’ืฉื•ืช ื‘ืฆื”ื•ื‘ ืžืชื•ื›ื ื ื•ืช ืœื”ืกืชื™ื™ื ืขื“ ืกื•ืฃ ื”ืงื™ืฅ.

ืฉืœื‘ ื”ืคืจืกื•ื ื‘ืจื™ืฉื•ื (ืคืจืกื)

ื—ื™ื™ื’ื ื• docker push... - ืžื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืงืฉื” ื‘ื”ืขืœืืช ืชืžื•ื ื” ืœืจื™ืฉื•ื? ื•ืื– ื ืฉืืœืช ื”ืฉืืœื”: "ืื™ื–ื” ืชื’ ืื ื™ ืฆืจื™ืš ืœืฉื™ื ืขืœ ื”ืชืžื•ื ื”?" ื–ื” ื ื•ื‘ืข ืžื”ืกื™ื‘ื” ืฉื™ืฉ ืœื ื• Gitflow (ืื• ืืกื˜ืจื˜ื’ื™ื™ืช Git ืื—ืจืช) ื•-Kubernetes, ื•ื”ืชืขืฉื™ื™ื” ืžื ืกื” ืœื”ื‘ื˜ื™ื— ืฉืžื” ืฉืงื•ืจื” ื‘-Kubernetes ื™ื‘ื•ื ื‘ืขืงื‘ื•ืช ืžื” ืฉืงื•ืจื” ื‘-Git. ืื—ืจื™ ื”ื›ืœ, ื’ื™ื˜ ื”ื•ื ืžืงื•ืจ ื”ืืžืช ื”ื™ื—ื™ื“ ืฉืœื ื•.

ืžื” ื›ืœ ื›ืš ืงืฉื” ื‘ื–ื”? ื”ืงืคื™ื“ื• ืœืฉื—ื–ืจ: ืžืชื•ืš ื”ืชื—ื™ื™ื‘ื•ืช ื‘ื’ื™ืช, ืฉื”ื™ื ื‘ืœืชื™ ืžืฉืชื ื” ื‘ื˜ื‘ืขื” (ื‘ืœืชื™ ื ื™ืชืŸ ืœืฉื™ื ื•ื™), ืœืชืžื•ื ืช Docker, ืฉืืžื•ืจื” ืœื”ื™ืฉืžืจ ื–ื”ื”.

ื–ื” ื’ื ื—ืฉื•ื‘ ืœื ื• ืœืงื‘ื•ืข ืžื•ืฆื, ื›ื™ ืื ื—ื ื• ืจื•ืฆื™ื ืœื”ื‘ื™ืŸ ืžืื™ื–ื” commit ื ื‘ื ืชื” ื”ืืคืœื™ืงืฆื™ื” ืฉืคื•ืขืœืช ื‘-Kubernetes (ื•ืื– ื ื•ื›ืœ ืœืขืฉื•ืช diffs ื•ื“ื‘ืจื™ื ื“ื•ืžื™ื).

ืืกื˜ืจื˜ื’ื™ื•ืช ืชื™ื•ื’

ื”ืจืืฉื•ืŸ ืคืฉื•ื˜ ืชื’ git. ื™ืฉ ืœื ื• ืจื™ืฉื•ื ืขื ืชืžื•ื ื” ืžืชื•ื™ื’ืช ื› 1.0. ืœ-Kubernetes ื™ืฉ ื‘ืžื” ื•ื”ืคืงื”, ืฉื ื”ืชืžื•ื ื” ื”ื–ื• ืžื•ืขืœื™ืช. ื‘-Git ืื ื—ื ื• ืขื•ืฉื™ื commits ื•ื‘ืฉืœื‘ ืžืกื•ื™ื ืื ื—ื ื• ืžืชื™ื™ื’ื™ื 2.0. ืื ื• ืื•ืกืคื™ื ืื•ืชื• ืœืคื™ ื”ื”ื•ืจืื•ืช ืžื”ืžืื’ืจ ื•ืžื ื™ื—ื™ื ืื•ืชื• ื‘ืจื™ืฉื•ื ืขื ื”ืชื’ 2.0. ืื ื—ื ื• ืžื’ืœื’ืœื™ื ืืช ื–ื” ืœื‘ืžื” ื•ืื ื”ื›ืœ ื‘ืกื“ืจ ืื– ืœื”ืคืงื”.

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ื”ื‘ืขื™ื” ื‘ื’ื™ืฉื” ื”ื–ื• ื”ื™ื ืฉืงื•ื“ื ื›ืœ ืฉืžื ื• ืืช ื”ืชื’, ื•ืจืง ืื—ืจ ื›ืš ื‘ื“ืงื ื• ื•ื’ืœื’ืœื ื• ืื•ืชื•. ืœืžื”? ืจืืฉื™ืช, ื–ื” ืคืฉื•ื˜ ืœื ื”ื’ื™ื•ื ื™: ืื ื—ื ื• ืžื•ืฆื™ืื™ื ื’ืจืกื” ืฉืœ ืชื•ื›ื ื” ืฉืืคื™ืœื• ืœื ื‘ื“ืงื ื• ืขื“ื™ื™ืŸ (ืื ื—ื ื• ืœื ื™ื›ื•ืœื™ื ืื—ืจืช, ื›ื™ ื›ื“ื™ ืœื‘ื“ื•ืง, ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืฉื™ื ืชื’). ืฉื ื™ืช, ื ืชื™ื‘ ื–ื” ืื™ื ื• ืชื•ืื ืœ-Gitflow.

ื”ืืคืฉืจื•ืช ื”ืฉื ื™ื™ื” ื”ื™ื git commit + ืชื’. ืœืกื ื™ืฃ ื”ืžืืกื˜ืจ ื™ืฉ ืชื’ 1.0; ืขื‘ื•ืจื• ื‘ืจื™ืฉื•ื - ืชืžื•ื ื” ืฉื ืคืจืกื” ืœื™ื™ืฆื•ืจ. ื‘ื ื•ืกืฃ, ืœืืฉื›ื•ืœ Kubernetes ื™ืฉ ืงื•ื•ื™ ืžืชืืจ ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ื•ืงื•ื•ื™ ืžืชืืจ. ืœืื—ืจ ืžื›ืŸ ืื ื• ืขื•ืงื‘ื™ื ืื—ืจ Gitflow: ื‘ืขื ืฃ ื”ืจืืฉื™ ืœืคื™ืชื•ื— (develop) ืื ื• ื™ื•ืฆืจื™ื ืชื›ื•ื ื•ืช ื—ื“ืฉื•ืช, ื•ื›ืชื•ืฆืื” ืžื›ืš ืžืชื‘ืฆืขืช commit ืขื ื”ืžื–ื”ื” #c1. ืื ื• ืื•ืกืคื™ื ืื•ืชื• ื•ืžืคืจืกืžื™ื ืื•ืชื• ื‘ืจื™ืฉื•ื ื‘ืืžืฆืขื•ืช ืžื–ื”ื” ื–ื” (#c1). ืขื ืื•ืชื• ืžื–ื”ื” ืื ื• ืžืชื’ืœื’ืœื™ื ืœืชืฆื•ื’ื” ืžืงื“ื™ืžื”. ืื ื—ื ื• ืขื•ืฉื™ื ืืช ืื•ืชื• ื”ื“ื‘ืจ ืขื ื”ืชื—ื™ื™ื‘ื•ื™ื•ืช #c2 ะธ #c3.

ื›ืฉื”ื‘ื ื• ืฉื™ืฉ ืžืกืคื™ืง ืชื›ื•ื ื•ืช, ืื ื—ื ื• ืžืชื—ื™ืœื™ื ืœื™ื™ืฆื‘ ื”ื›ืœ. ืฆื•ืจ ืกื ื™ืฃ ื‘-Git release_1.1 (ืขืœ ื”ื‘ืกื™ืก #c3 ืฉืœ develop). ืื™ืŸ ืฆื•ืจืš ืœืืกื•ืฃ ืืช ื”ืžื”ื“ื•ืจื” ื”ื–ื•, ื›ื™... ื–ื” ื ืขืฉื” ื‘ืฉืœื‘ ื”ืงื•ื“ื. ืœื›ืŸ, ืื ื—ื ื• ื™ื›ื•ืœื™ื ืคืฉื•ื˜ ืœื’ืœื’ืœ ืืช ื–ื” ืœื‘ื™ืžื•ื™. ืื ื—ื ื• ืžืชืงื ื™ื ื‘ืื’ื™ื ื‘ืคื ื™ื #c4 ื•ื‘ืื•ืคืŸ ื“ื•ืžื” ืžืชื’ืœื’ืœื™ื ืœื‘ื™ืžื•ื™. ื‘ืžืงื‘ื™ืœ, ื”ืคื™ืชื•ื— ืžืชื‘ืฆืข ื‘ develop, ืฉืžืžื ื• ื ืœืงื—ื™ื ืฉื™ื ื•ื™ื™ื ืžืขืช ืœืขืช release_1.1. ื‘ืฉืœื‘ ืžืกื•ื™ื, ืื ื• ืžืงื‘ืœื™ื comcompiled ื•ืžื•ืขืœื” ืœ-Staging, ืฉืื ื• ืžืจื•ืฆื™ื ืžืžื ื• (#c25).

ืœืื—ืจ ืžื›ืŸ ืื ื• ืžืžื–ื’ื™ื (ืขื ื”ืจืฆื” ืงื“ื™ืžื”) ืืช ืขื ืฃ ื”ืฉื—ืจื•ืจ (release_1.1) ื‘ืžืืกื˜ืจ. ืฉืžื ื• ืชื’ ืขื ื”ื’ืจืกื” ื”ื—ื“ืฉื” ื‘-commit ื”ื–ื” (1.1). ืื‘ืœ ื”ืชืžื•ื ื” ื”ื–ื• ื›ื‘ืจ ื ืืกืคืช ื‘ืจื™ืฉื•ื, ืื– ื›ื“ื™ ืœื ืœืืกื•ืฃ ืื•ืชื” ืฉื•ื‘, ืื ื—ื ื• ืคืฉื•ื˜ ืžื•ืกื™ืคื™ื ืชื’ ืฉื ื™ ืœืชืžื•ื ื” ื”ืงื™ื™ืžืช (ืขื›ืฉื™ื• ื™ืฉ ืœื” ืชื’ื™ื•ืช ื‘ืจื™ืฉื•ื #c25 ะธ 1.1). ืœืื—ืจ ืžื›ืŸ, ืื ื• ืžื’ืœื’ืœื™ื ืื•ืชื• ืœื™ื™ืฆื•ืจ.

ื™ืฉ ื—ื™ืกืจื•ืŸ ืฉืจืง ืชืžื•ื ื” ืื—ืช ืžื•ืขืœื™ืช ืœืกื˜ื™ื™ื’'ื™ื ื’ (#c25), ื•ื‘ื”ืคืงื” ื–ื” ืงืฆืช ืฉื•ื ื” (1.1), ืื‘ืœ ืื ื—ื ื• ื™ื•ื“ืขื™ื ืฉ"ืคื™ื–ื™ืช" ืืœื• ืื•ืชื” ืชืžื•ื ื” ืžื”ืจื™ืฉื•ื.

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ื”ื—ื™ืกืจื•ืŸ ื”ืืžื™ืชื™ ื”ื•ื ืฉืื™ืŸ ืชืžื™ื›ื” ื‘ื”ืชื—ื™ื™ื‘ื•ื™ื•ืช ืžื™ื–ื•ื’, ืฆืจื™ืš ืœืขืฉื•ืช ื”-Fast Forward.

ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืœื›ืช ืจื—ื•ืง ื™ื•ืชืจ ื•ืœืขืฉื•ืช ื˜ืจื™ืง... ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื“ื•ื’ืžื” ืฉืœ Dockerfile ืคืฉื•ื˜:

FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb

FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public

ื‘ื•ืื• ื ื‘ื ื” ืžืžื ื• ืงื•ื‘ืฅ ืœืคื™ ื”ืขื™ืงืจื•ืŸ ื”ื‘ื:

  • SHA256 ืžื”ืžื–ื”ื™ื ืฉืœ ื”ืชืžื•ื ื•ืช ื‘ืฉื™ืžื•ืฉ (ruby:2.3 ะธ nginx:alpine), ืฉื”ื ืกื›ื•ืžื™ ื‘ื™ืงื•ืจืช ืฉืœ ืชื•ื›ื ื;
  • ื›ืœ ื”ืงื‘ื•ืฆื•ืช (RUN, CMD ื•ื›ื•ืœื™.);
  • SHA256 ืžืงื‘ืฆื™ื ืฉื ื•ืกืคื•.

... ื•ืœืงื—ืช ืืช ื”ื‘ื“ื™ืงื” (ืฉื•ื‘ SHA256) ืžืงื•ื‘ืฅ ื›ื–ื”. ื–ึถื” ื—ึฒืชึดื™ืžึธื” ื›ืœ ืžื” ืฉืžื’ื“ื™ืจ ืืช ื”ืชื•ื›ืŸ ืฉืœ ืชืžื•ื ืช Docker.

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ื ื—ื–ื•ืจ ืœืชืจืฉื™ื ื• ื‘ืžืงื•ื commits ื ืฉืชืžืฉ ื‘ื—ืชื™ืžื•ืช ื›ืืœื”, ื›ืœื•ืžืจ ืชื™ื™ื’ื• ืชืžื•ื ื•ืช ืขื ื—ืชื™ืžื•ืช.

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ื›ืขืช, ื›ืืฉืจ ื™ืฉ ืฆื•ืจืš, ืœืžืฉืœ, ืœืžื–ื’ ืฉื™ื ื•ื™ื™ื ืžื’ืจืกื” ืœืžืืกื˜ืจ, ื ื•ื›ืœ ืœื‘ืฆืข ืžื™ื–ื•ื’ ืืžื™ืชื™: ื™ื”ื™ื” ืœื–ื” ืžื–ื”ื” ืฉื•ื ื”, ืื‘ืœ ืื•ืชื” ื—ืชื™ืžื”. ืขื ืื•ืชื• ืžื–ื”ื” ื ื’ืœื’ืœ ืืช ื”ืชืžื•ื ื” ืœื™ื™ืฆื•ืจ.

ื”ื—ื™ืกืจื•ืŸ ื”ื•ื ืฉื›ืขืช ืœื ื ื™ืชืŸ ื™ื”ื™ื” ืœืงื‘ื•ืข ืื™ื–ื” ืกื•ื’ ืฉืœ commit ื ื“ื—ืฃ ืœื™ื™ืฆื•ืจ - ืกื™ื›ื•ืžื™ ืฆ'ืง ืคื•ืขืœื™ื ืจืง ื‘ื›ื™ื•ื•ืŸ ืื—ื“. ื‘ืขื™ื” ื–ื• ื ืคืชืจืช ืขืœ ื™ื“ื™ ืฉื›ื‘ื” ื ื•ืกืคืช ืขื ืžื˜ื ื ืชื•ื ื™ื - ืื ื™ ืืกืคืจ ืœืš ื™ื•ืชืจ ืžืื•ื—ืจ ื™ื•ืชืจ.

ืชื™ื•ื’ ื‘-werf

ื‘-werf ื”ืœื›ื ื• ืืคื™ืœื• ืจื—ื•ืง ื™ื•ืชืจ ื•ืžืชื›ื•ื ื ื™ื ืœืขืฉื•ืช ื‘ื ื™ื™ื” ืžื‘ื•ื–ืจืช ืขื ืžื˜ืžื•ืŸ ืฉืื™ื ื• ืžืื•ื—ืกืŸ ื‘ืžื›ื•ื ื” ืื—ืช... ืื–, ืื ื—ื ื• ื‘ื•ื ื™ื ืฉื ื™ ืกื•ื’ื™ื ืฉืœ ืชืžื•ื ื•ืช Docker, ืื ื—ื ื• ืงื•ืจืื™ื ืœื”ืŸ ืฉืœื‘ ะธ ืชืžื•ื ื”.

ืžืื’ืจ werf Git ืžืื—ืกืŸ ื”ื•ืจืื•ืช ืกืคืฆื™ืคื™ื•ืช ืœื‘ื ื™ื™ื” ื”ืžืชืืจื•ืช ืืช ื”ืฉืœื‘ื™ื ื”ืฉื•ื ื™ื ืฉืœ ื”ื‘ื ื™ื™ื” (ืœืคื ื™ ื”ื”ืชืงื ื”, ืœื”ืชืงื™ืŸ, ืœืคื ื™ ื”ื”ื’ื“ืจื”, ื”ืชืงื ื”). ืื ื• ืื•ืกืคื™ื ืืช ืชืžื•ื ืช ื”ืฉืœื‘ ื”ืจืืฉื•ืŸ ืขื ื—ืชื™ืžื” ื”ืžื•ื’ื“ืจืช ื›ืกื›ื•ื ื”ื‘ื“ื™ืงื” ืฉืœ ื”ืฉืœื‘ื™ื ื”ืจืืฉื•ื ื™ื. ืœืื—ืจ ืžื›ืŸ ื ื•ืกื™ืฃ ืืช ืงื•ื“ ื”ืžืงื•ืจ, ืœืชืžื•ื ืช ื”ื‘ืžื” ื”ื—ื“ืฉื” ืื ื• ืžื—ืฉื‘ื™ื ืืช ื”-checksum ืฉืœื”... ืคืขื•ืœื•ืช ืืœื• ื—ื•ื–ืจื•ืช ืขืœ ืขืฆืžืŸ ืขื‘ื•ืจ ื›ืœ ื”ืฉืœื‘ื™ื, ื•ื›ืชื•ืฆืื” ืžื›ืš ืื ื• ืžืงื‘ืœื™ื ืกื˜ ืฉืœ ืชืžื•ื ื•ืช ื‘ืžื”. ืœืื—ืจ ืžื›ืŸ ืื ื—ื ื• ื™ื•ืฆืจื™ื ืืช ื”ืชืžื•ื ื” ื”ืกื•ืคื™ืช, ืฉืžื›ื™ืœื” ื’ื ืžื˜ื ื ืชื•ื ื™ื ืœื’ื‘ื™ ื”ืžืงื•ืจ ืฉืœื”. ื•ืื ื—ื ื• ืžืชื™ื™ื’ื™ื ืืช ื”ืชืžื•ื ื” ื”ื–ื• ื‘ื“ืจื›ื™ื ืฉื•ื ื•ืช (ืคืจื˜ื™ื ื‘ื”ืžืฉืš).

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ื ื ื™ื— ืฉืื—ืจื™ ื–ื” ืžื•ืคื™ืข commit ื—ื“ืฉ ืฉื‘ื• ืจืง ืงื•ื“ ื”ืืคืœื™ืงืฆื™ื” ืฉื•ื ื”. ืžื” ื™ืงืจื”? ืœืฉื™ื ื•ื™ื™ ืงื•ื“, ื™ื™ื•ื•ืฆืจ ืชื™ืงื•ืŸ ื•ืชื•ื›ืŸ ืชืžื•ื ืช ื‘ืžื” ื—ื“ืฉื”. ื—ืชื™ืžืชื• ืชื™ืงื‘ืข ื›ืกื›ื•ื ื”ื‘ื“ื™ืงื” ืฉืœ ืชืžื•ื ืช ื”ื‘ืžื” ื”ื™ืฉื ื” ื•ื”ืชื™ืงื•ืŸ ื”ื—ื“ืฉ. ืชืžื•ื ื” ืกื•ืคื™ืช ื—ื“ืฉื” ืชื™ื•ื•ืฆืจ ืžืชืžื•ื ื” ื–ื•. ื”ืชื ื”ื’ื•ืช ื“ื•ืžื” ืชืชืจื—ืฉ ืขื ืฉื™ื ื•ื™ื™ื ื‘ืฉืœื‘ื™ื ืื—ืจื™ื.

ืœืคื™ื›ืš, ืชืžื•ื ื•ืช ื‘ืžื” ื”ืŸ ืžื˜ืžื•ืŸ ืฉื ื™ืชืŸ ืœืื—ืกืŸ ื‘ื”ืคืฆื”, ื•ื”ืชืžื•ื ื•ืช ืฉื›ื‘ืจ ื ื•ืฆืจื• ืžืžื ื• ืžื•ืขืœื•ืช ืœ-Docker Registry.

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ื ื™ืงื•ื™ ื”ืจื™ืฉื•ื

ืื ื—ื ื• ืœื ืžื“ื‘ืจื™ื ืขืœ ืžื—ื™ืงืช ืฉื›ื‘ื•ืช ืฉื ืฉืืจื• ืชืœื•ื™ื•ืช ืœืื—ืจ ืชื’ื™ื•ืช ืฉื ืžื—ืงื• - ื–ื• ืชื›ื•ื ื” ืกื˜ื ื“ืจื˜ื™ืช ืฉืœ Docker Registry ืขืฆืžื•. ืื ื—ื ื• ืžื“ื‘ืจื™ื ืขืœ ืžืฆื‘ ืฉื‘ื• ืžืฆื˜ื‘ืจื™ื ื”ืจื‘ื” ืชื’ื™ื•ืช Docker ื•ืื ื—ื ื• ืžื‘ื™ื ื™ื ืฉืื ื—ื ื• ื›ื‘ืจ ืœื ืฆืจื™ื›ื™ื ื—ืœืง ืžื”ื, ืื‘ืœ ื”ื ืชื•ืคืกื™ื ืžืงื•ื (ื•/ืื• ืื ื—ื ื• ืžืฉืœืžื™ื ืขืœ ื–ื”).

ืžื”ืŸ ืืกื˜ืจื˜ื’ื™ื•ืช ื”ื ื™ืงื•ื™?

  1. ืืชื” ืคืฉื•ื˜ ืœื ื™ื›ื•ืœ ืœืขืฉื•ืช ื›ืœื•ื ืœื ืœื ืงื•ืช. ืœืคืขืžื™ื ื‘ืืžืช ืงืœ ื™ื•ืชืจ ืœืฉืœื ืงืฆืช ืขืœ ืฉื˜ื— ื ื•ืกืฃ ืžืืฉืจ ืœืคืจื•ื ืกื‘ืš ืขืฆื•ื ืฉืœ ืชื’ื™ื. ืื‘ืœ ื–ื” ืขื•ื‘ื“ ืจืง ืขื“ ืœื ืงื•ื“ื” ืžืกื•ื™ืžืช.
  2. ืื™ืคื•ืก ืžืœื. ืื ืชืžื—ืง ืืช ื›ืœ ื”ืชืžื•ื ื•ืช ื•ืชื‘ื ื” ืžื—ื“ืฉ ืจืง ืืช ื”ื ื•ื›ื—ื™ื•ืช ื‘ืžืขืจื›ืช ื”-CI, ืขืœื•ืœื” ืœื”ืชืขื•ืจืจ ื‘ืขื™ื”. ืื ื”ืžื™ื›ืœ ื™ื•ืคืขืœ ืžื—ื“ืฉ ื‘ื”ืคืงื”, ืชื˜ืขืŸ ืขื‘ื•ืจื• ืชืžื•ื ื” ื—ื“ืฉื” - ื›ื–ื• ืฉื˜ืจื ื ื‘ื“ืงื” ืขืœ ื™ื“ื™ ืืฃ ืื—ื“. ื–ื” ื”ื•ืจื’ ืืช ื”ืจืขื™ื•ืŸ ืฉืœ ืชืฉืชื™ืช ื‘ืœืชื™ ื ื™ืชื ืช ืœืฉื™ื ื•ื™.
  3. ื›ื—ื•ืœ ื™ืจื•ืง. ืจื™ืฉื•ื ืื—ื“ ื”ืชื—ื™ืœ ืœืขืœื•ืช ืขืœ ื’ื“ื•ืชื™ื• - ืื ื—ื ื• ืžืขืœื™ื ืชืžื•ื ื•ืช ืœืื—ืจ. ืื•ืชื” ื‘ืขื™ื” ื›ืžื• ื‘ืฉื™ื˜ื” ื”ืงื•ื“ืžืช: ื‘ืื™ื–ื” ืฉืœื‘ ืืคืฉืจ ืœื ืงื•ืช ืืช ื”ืจื™ืฉื•ื ืฉื”ื—ืœ ืœืขืœื•ืช ืขืœ ื’ื“ื•ืชื™ื•?
  4. ืœืคื™ ื”ื–ืžืŸ. ืœืžื—ื•ืง ืืช ื›ืœ ื”ืชืžื•ื ื•ืช ื‘ื ื•ืช ื™ื•ืชืจ ืžื—ื•ื“ืฉ? ืื‘ืœ ื‘ื”ื—ืœื˜ ื™ื”ื™ื” ืฉื™ืจื•ืช ืฉืœื ืขื•ื“ื›ืŸ ื›ื‘ืจ ื—ื•ื“ืฉ...
  5. ื‘ืื•ืคืŸ ื™ื“ื ื™ ืœืงื‘ื•ืข ืžื” ื›ื‘ืจ ื ื™ืชืŸ ืœืžื—ื•ืง.

ื™ืฉื ืŸ ืฉืชื™ ืืคืฉืจื•ื™ื•ืช ืžืขืฉื™ื•ืช ื‘ืืžืช: ืœื ืœื ืงื•ืช ืื• ืฉื™ืœื•ื‘ ืฉืœ ื›ื—ื•ืœ-ื™ืจื•ืง + ื™ื“ื ื™. ื‘ืžืงืจื” ื”ืื—ืจื•ืŸ, ืื ื—ื ื• ืžื“ื‘ืจื™ื ืขืœ ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื: ื›ืืฉืจ ืืชื” ืžื‘ื™ืŸ ืฉื”ื’ื™ืข ื”ื–ืžืŸ ืœื ืงื•ืช ืืช ื”ืจื™ืฉื•ื, ืืชื” ื™ื•ืฆืจ ืื—ื“ ื—ื“ืฉ ื•ืžื•ืกื™ืฃ ืœื• ืืช ื›ืœ ื”ืชืžื•ื ื•ืช ื”ื—ื“ืฉื•ืช ื‘ืžื”ืœืš, ืœืžืฉืœ, ื—ื•ื“ืฉ. ื•ืื—ืจื™ ื—ื•ื“ืฉ, ืจืื” ืื™ืœื• ืคื•ื“ื™ื ื‘-Kubernetes ืขื“ื™ื™ืŸ ืžืฉืชืžืฉื™ื ื‘ืจื™ืฉื•ื ื”ื™ืฉืŸ, ื•ื”ืขื‘ื™ืจื• ื’ื ืื•ืชื ืœืจื™ืฉื•ื ื”ื—ื“ืฉ.

ืœืžื” ื”ื’ืขื ื• werf? ืื ื—ื ื• ืื•ืกืคื™ื:

  1. Git head: ื›ืœ ื”ืชื’ื™ื, ื›ืœ ื”ืกื ื™ืคื™ื - ื‘ื”ื ื—ื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืืช ื›ืœ ืžื” ืฉืžืชื•ื™ื’ ื‘-Git ื‘ืชืžื•ื ื•ืช (ื•ืื ืœื, ืื– ืฆืจื™ืš ืœืžื—ื•ืง ืืช ื–ื” ื‘-Git ืขืฆืžื•);
  2. ื›ืœ ื”ืชืจืžื™ืœื™ื ืฉื ืฉืื‘ื™ื ื›ืขืช ืืœ Kubernetes;
  3. ReplicaSets ื™ืฉื ื™ื (ืžื” ืฉืฉื•ื—ืจืจ ืœืื—ืจื•ื ื”), ื•ืื ื—ื ื• ื’ื ืžืชื›ื ื ื™ื ืœืกืจื•ืง ืžื”ื“ื•ืจื•ืช ืฉืœ Helm ื•ืœื‘ื—ื•ืจ ืืช ื”ืชืžื•ื ื•ืช ื”ืื—ืจื•ื ื•ืช ืฉื.

... ื•ืœืขืฉื•ืช ืจืฉื™ืžื” ืœื‘ื ื” ืžื”ืกื˜ ื”ื–ื” - ืจืฉื™ืžื” ืฉืœ ืชืžื•ื ื•ืช ืฉืœื ื ืžื—ืง. ืื ื• ืžื ืงื™ื ืืช ื›ืœ ื”ืฉืืจ, ื•ืœืื—ืจ ืžื›ืŸ ืื ื• ืžื•ืฆืื™ื ืชืžื•ื ื•ืช ื‘ืžื” ื™ืชื•ืžื•ืช ื•ืžื•ื—ืงื™ื ื’ื ืื•ืชืŸ.

ืฉืœื‘ ื”ืคืจื™ืกื”

ื”ืฆื”ืจื•ืช ืืžื™ื ื”

ื”ื ืงื•ื“ื” ื”ืจืืฉื•ื ื” ืฉืืœื™ื” ื‘ืจืฆื•ื ื™ ืœืžืฉื•ืš ืืช ืชืฉื•ืžืช ื”ืœื‘ ื‘ืคืจื™ืกื” ื”ื™ื ื”ืฉืงืช ืชืฆื•ืจืช ื”ืžืฉืื‘ ื”ืžืขื•ื“ื›ื ืช, ื”ืžื•ืฆื”ืจืช ื‘ื”ืฆื”ืจื”. ืžืกืžืš YAML ื”ืžืงื•ืจื™ ื”ืžืชืืจ ืืช ืžืฉืื‘ื™ Kubernetes ืชืžื™ื“ ืฉื•ื ื” ืžืื•ื“ ืžื”ืชื•ืฆืื” ื”ืคื•ืขืœืช ื‘ืคื•ืขืœ ื‘ืืฉื›ื•ืœ. ื›ื™ Kubernetes ืžื•ืกื™ืฃ ืœืชืฆื•ืจื”:

  1. ืžื–ื”ื™ื;
  2. ืžื™ื“ืข ืฉื™ืจื•ืช;
  3. ืขืจื›ื™ ื‘ืจื™ืจืช ืžื—ื“ืœ ืจื‘ื™ื;
  4. ืงื˜ืข ืขื ืกื˜ื˜ื•ืก ื ื•ื›ื—ื™;
  5. ืฉื™ื ื•ื™ื™ื ืฉื‘ื•ืฆืขื• ื›ื—ืœืง ืž-webhook ืฉืœ ืงื‘ืœื”;
  6. ื”ืชื•ืฆืื” ืฉืœ ืขื‘ื•ื“ืชื ืฉืœ ื‘ืงืจื™ื ืฉื•ื ื™ื (ื•ื”ืžืชื–ืžืŸ).

ืœื›ืŸ, ื›ืืฉืจ ืžื•ืคื™ืขื” ืชืฆื•ืจืช ืžืฉืื‘ ื—ื“ืฉื” (ื—ื“ืฉ), ืื ื—ื ื• ืœื ื™ื›ื•ืœื™ื ืคืฉื•ื˜ ืœืงื—ืช ื•ืœื“ืจื•ืก ืืช ื”ืชืฆื•ืจื” ื”ื ื•ื›ื—ื™ืช, ื”"ื—ื™ื”" ืื™ืชื” (ืœื—ื™ื•ืช). ืœืฉื ื›ืš ื ืฆื˜ืจืš ืœื”ืฉื•ื•ืช ื—ื“ืฉ ืขื ื”ืชืฆื•ืจื” ืฉื”ื•ื—ืœื” ืœืื—ืจื•ื ื” (ื”ื•ื—ืœ ืœืื—ืจื•ื ื”) ื•ืžื’ืœื’ืœื™ื ืขืœ ืœื—ื™ื•ืช ืงื™ื‘ืœ ืชื™ืงื•ืŸ.

ื’ื™ืฉื” ื–ื• ื ืงืจืืช ืžื™ื–ื•ื’ ื“ื• ื›ื™ื•ื•ื ื™. ื”ื•ื ืžืฉืžืฉ, ืœืžืฉืœ, ื‘ื”ืœื.

ื™ืฉ ื’ื ืžื™ื–ื•ื’ ื“ื• ื›ื™ื•ื•ื ื™, ืืฉืจ ืฉื•ื ื” ื‘ื›ืš:

  • ืžืฉื•ื•ื” ื”ื•ื—ืœ ืœืื—ืจื•ื ื” ะธ ื—ื“ืฉ, ืื ื• ืžืกืชื›ืœื™ื ืขืœ ืžื” ืฉื ืžื—ืง;
  • ืžืฉื•ื•ื” ื—ื“ืฉ ะธ ืœื—ื™ื•ืช, ืื ื• ืžืกืชื›ืœื™ื ืขืœ ืžื” ืฉื ื•ืกืฃ ืื• ื”ืฉืชื ื”;
  • ื”ืชื™ืงื•ืŸ ื”ืžืกื•ื›ื ืžื•ื—ืœ ืขืœื™ื• ืœื—ื™ื•ืช.

ืื ื• ืคื•ืจืกื™ื ื™ื•ืชืจ ืž-1000 ื™ื™ืฉื•ืžื™ื ืขื Helm, ื›ืš ืฉืื ื• ืœืžืขืฉื” ื—ื™ื™ื ืขื ืžื™ื–ื•ื’ ื“ื•-ื›ื™ื•ื•ื ื™. ืขื ื–ืืช, ื™ืฉ ืœื• ืžืกืคืจ ื‘ืขื™ื•ืช ืฉืคืชืจื ื• ืขื ื”ืชื™ืงื•ื ื™ื ืฉืœื ื•, ืฉืขื•ื–ืจื™ื ืœื”ืœื ืœืขื‘ื•ื“ ื›ืจื’ื™ืœ.

ืกื˜ื˜ื•ืก ื”ืฉืงื” ืืžื™ืชื™

ืœืื—ืจ ืฉืžืขืจื›ืช ื”-CI ืฉืœื ื• ืžื™ื™ืฆืจืช ืชืฆื•ืจื” ื—ื“ืฉื” ืขื‘ื•ืจ Kubernetes ืขืœ ืกืžืš ื”ืื™ืจื•ืข ื”ื‘ื, ื”ื™ื ืžืฉื“ืจืช ืื•ืชื” ืœืฉื™ืžื•ืฉ (ืœื”ื’ื™ืฉ ืžื•ืขืžื“ื•ืช) ืœืืฉื›ื•ืœ - ื‘ืืžืฆืขื•ืช Helm or kubectl apply. ืœืื—ืจ ืžื›ืŸ, ืžืชืจื—ืฉ ื”ืžื™ื–ื•ื’ N-way ืฉืชื•ืืจ ื›ื‘ืจ, ืฉืืœื™ื• ืžื’ื™ื‘ ื”-API ืฉืœ Kubernetes ื‘ืื™ืฉื•ืจ ืœืžืขืจื›ืช ื”-CI, ื•ื–ื” ืœืžืฉืชืžืฉ ืฉืœื”.

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ืขื ื–ืืช, ื™ืฉ ื‘ืขื™ื” ืขื ืงื™ืช: ืื—ืจื™ ื”ื›ืœ ื™ื™ืฉื•ื ืžื•ืฆืœื— ืื™ื ื• ืื•ืžืจ ื”ืฉืงื” ืžื•ืฆืœื—ืช. ืื Kubernetes ืžื‘ื™ืŸ ืื™ืœื• ืฉื™ื ื•ื™ื™ื ื™ืฉ ืœื”ื—ื™ืœ ื•ื™ื™ืฉื ืื•ืชื, ืื ื—ื ื• ืขื“ื™ื™ืŸ ืœื ื™ื•ื“ืขื™ื ืžื” ืชื”ื™ื” ื”ืชื•ืฆืื”. ืœื“ื•ื’ืžื”, ืขื“ื›ื•ืŸ ื•ื”ืคืขืœื” ืžื—ื“ืฉ ืฉืœ ืคื•ื“ื™ื ื‘-frontend ืขืฉื•ื™ื™ื ืœื”ืฆืœื™ื—, ืืš ืœื ื‘-backend, ื•ืื ื• ื ืงื‘ืœ ื’ืจืกืื•ืช ืฉื•ื ื•ืช ืฉืœ ืชืžื•ื ื•ืช ื”ืืคืœื™ืงืฆื™ื” ื”ืคื•ืขืœื•ืช.

ื›ื“ื™ ืœืขืฉื•ืช ื”ื›ืœ ื ื›ื•ืŸ, ืกื›ื™ืžื” ื–ื• ื“ื•ืจืฉืช ืงื™ืฉื•ืจ ื ื•ืกืฃ - ื’ืฉืฉ ืžื™ื•ื—ื“ ืฉื™ืงื‘ืœ ืžื™ื“ืข ืกื˜ื˜ื•ืก ืžื”-API ืฉืœ Kubernetes ื•ื™ืฉื“ืจ ืื•ืชื• ืœื ื™ืชื•ื— ื ื•ืกืฃ ืฉืœ ื”ืžืฆื‘ ื”ืืžื™ืชื™. ื™ืฆืจื ื• ืกืคืจื™ื™ืช ืงื•ื“ ืคืชื•ื— ื‘-Go - cubedog (ืจืื” ื”ื•ื“ืขืชื• ื›ืืŸ), ืฉืคื•ืชืจ ื‘ืขื™ื” ื–ื• ื•ื”ื•ื ืžื•ื‘ื ื” ื‘-werf.

ื”ื”ืชื ื”ื’ื•ืช ืฉืœ ืขื•ืงื‘ ื–ื” ื‘ืจืžืช werf ืžื•ื’ื“ืจืช ื‘ืืžืฆืขื•ืช ื”ืขืจื•ืช ื”ืžื•ืฆื‘ื•ืช ืขืœ Deployments ืื• StatefulSets. ื”ืขืจื” ืจืืฉื™ืช - fail-mode - ืžื‘ื™ืŸ ืืช ื”ืžืฉืžืขื•ื™ื•ืช ื”ื‘ืื•ืช:

  • IgnoreAndContinueDeployProcess - ืื ื• ืžืชืขืœืžื™ื ืžื”ื‘ืขื™ื•ืช ืฉืœ ื”ืคืขืœืช ืจื›ื™ื‘ ื–ื” ื•ืžืžืฉื™ื›ื™ื ื‘ืคืจื™ืกื”;
  • FailWholeDeployProcessImmediately - ืฉื’ื™ืื” ื‘ืจื›ื™ื‘ ื–ื” ืขื•ืฆืจืช ืืช ืชื”ืœื™ืš ื”ืคืจื™ืกื”;
  • HopeUntilEndOfDeployProcess - ืื ื• ืžืงื•ื•ื™ื ืฉื”ืจื›ื™ื‘ ื”ื–ื” ื™ืขื‘ื•ื“ ืขื“ ืกื•ืฃ ื”ืคืจื™ืกื”.

ืœื“ื•ื’ืžื”, ื”ืฉื™ืœื•ื‘ ื”ื–ื” ืฉืœ ืžืฉืื‘ื™ื ื•ืขืจื›ื™ ื”ืขืจื•ืช fail-mode:

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ื›ืืฉืจ ืื ื• ืคื•ืจืกื™ื ื‘ืคืขื ื”ืจืืฉื•ื ื”, ื™ื™ืชื›ืŸ ืฉื‘ืกื™ืก ื”ื ืชื•ื ื™ื (MongoDB) ืขื“ื™ื™ืŸ ืœื ืžื•ื›ืŸ - Deployments ื™ื™ื›ืฉืœื•. ืื‘ืœ ืืชื” ื™ื›ื•ืœ ืœื—ื›ื•ืช ืœืจื’ืข ืฉื–ื” ื™ืชื—ื™ืœ, ื•ื”ืคืจื™ืกื” ืขื“ื™ื™ืŸ ืชืชื‘ืฆืข.

ื™ืฉ ืขื•ื“ ืฉืชื™ ื”ืขืจื•ืช ืขื‘ื•ืจ kubedog ื‘-werf:

  • failures-allowed-per-replica - ืžืกืคืจ ื”ื ืคื™ืœื•ืช ื”ืžื•ืชืจื•ืช ืขื‘ื•ืจ ื›ืœ ื”ืขืชืง;
  • show-logs-until - ืžืกื“ื™ืจ ืืช ื”ืจื’ืข ืฉื‘ื• werf ืžืฆื™ื’ (ื‘-stdout) ื™ื•ืžื ื™ื ืžื›ืœ ื”ืชืจืžื™ืœื™ื ื”ืžื’ื•ืœื’ืœื™ื. ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ื™ื PodIsReady (ื›ื“ื™ ืœื”ืชืขืœื ืžื”ื•ื“ืขื•ืช ืฉืื ื—ื ื• ื›ื ืจืื” ืœื ืจื•ืฆื™ื ื›ืฉื”ืชื ื•ืขื” ืžืชื—ื™ืœื” ืœื”ื’ื™ืข ืœืคื•ื“), ืื‘ืœ ื”ืขืจื›ื™ื ืชืงืคื™ื ื’ื: ControllerIsReady ะธ EndOfDeploy.

ืžื” ืขื•ื“ ืื ื—ื ื• ืจื•ืฆื™ื ืžื”ืคืจื™ืกื”?

ื‘ื ื•ืกืฃ ืœืฉืชื™ ื”ื ืงื•ื“ื•ืช ืฉื›ื‘ืจ ืชื•ืืจื•, ื ืจืฆื”:

  • ืœืจืื•ืช ื™ื•ืžื ื™ื - ื•ืจืง ื”ื ื—ื•ืฆื™ื, ื•ืœื ื”ื›ืœ ื‘ืจืฆืฃ;
  • ืžืกืœื•ืœ ื”ืชืงื“ืžื•ืช, ื›ื™ ืื ื”ืขื‘ื•ื“ื” ืชืœื•ื™ื” "ื‘ืฉืงื˜" ืœืžืกืคืจ ื“ืงื•ืช, ื—ืฉื•ื‘ ืœื”ื‘ื™ืŸ ืžื” ืงื•ืจื” ืฉื;
  • ื™ืฉ ื”ื—ื–ืจื” ืื•ื˜ื•ืžื˜ื™ืช ื‘ืžืงืจื” ืฉืžืฉื”ื• ื”ืฉืชื‘ืฉ (ื•ืœื›ืŸ ื–ื” ืงืจื™ื˜ื™ ืœื“ืขืช ืืช ื”ืžืฆื‘ ื”ืืžื™ืชื™ ืฉืœ ื”ืคืจื™ืกื”). ื”ืคืจื™ืกื” ื—ื™ื™ื‘ืช ืœื”ื™ื•ืช ืื˜ื•ืžื™ืช: ืื• ืฉื”ื™ื ืขื•ื‘ืจืช ืขื“ ื”ืกื•ืฃ, ืื• ืฉื”ื›ืœ ื—ื•ื–ืจ ืœืžืฆื‘ื• ื”ืงื•ื“ื.

ืชื•ืฆืื•ืช ืฉืœ

ืขื‘ื•ืจื ื• ื›ื—ื‘ืจื”, ื›ื“ื™ ืœื™ื™ืฉื ืืช ื›ืœ ื”ื ื™ื•ืื ืกื™ื ื”ืžืชื•ืืจื™ื ื‘ืฉืœื‘ื™ ืืกืคืงื” โ€‹โ€‹ืฉื•ื ื™ื (ื‘ื ื™ื™ื”, ืคืจืกื•ื, ืคืจื™ืกื”), ืžืขืจื›ืช CI ื•ื›ืœื™ ืขื–ืจ ืžืกืคื™ืงื™ื werf.

ื‘ืžืงื•ื ืžืกืงื ื”:

werf - ื”ื›ืœื™ ืฉืœื ื• ืขื‘ื•ืจ CI / CD ื‘-Kubernetes (ืกืงื™ืจื” ื›ืœืœื™ืช ื•ื“ื•ื— ื•ื™ื“ืื•)

ื‘ืขื–ืจืช werf, ื”ืชืงื“ืžื ื• ื”ื™ื˜ื‘ ื‘ืคืชืจื•ืŸ ืžืกืคืจ ืจื‘ ืฉืœ ื‘ืขื™ื•ืช ืขื‘ื•ืจ ืžื”ื ื“ืกื™ DevOps ื•ื ืฉืžื— ืื ื”ืงื”ื™ืœื” ื”ืจื—ื‘ื” ื™ื•ืชืจ ืœืคื—ื•ืช ืชื ืกื” ืืช ื›ืœื™ ื”ืฉื™ืจื•ืช ื”ื–ื” ื‘ืคืขื•ืœื”. ื™ื”ื™ื” ืงืœ ื™ื•ืชืจ ืœื”ื’ื™ืข ืœืชื•ืฆืื” ื˜ื•ื‘ื” ื‘ื™ื—ื“.

ืกืจื˜ื•ื ื™ื ื•ืฉืงื•ืคื™ื•ืช

ืกืจื˜ื•ืŸ ืžื”ื”ื•ืคืขื” (~47 ื“ืงื•ืช):

ื”ืฆื’ืช ื”ื“ื•"ื—:

ื .ื‘.

ื“ื™ื•ื•ื—ื™ื ื ื•ืกืคื™ื ืขืœ Kubernetes ื‘ื‘ืœื•ื’ ืฉืœื ื•:

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”