werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āĻ‰ā§ŽāϏāĻŦ⧇āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ…āύ⧁āĻˇā§āĻ āĻŋāϤ DevOpsConf 27 āϏāĻŽā§āĻŽā§‡āϞāύ⧇āϰ āĻŽā§‚āϞ āĻšāϞ⧇ 2019 āĻŽā§‡ RIT++ 2019, "āĻ•āĻ¨ā§āϟāĻŋāύāĻŋāωāϝāĻŧāĻžāϏ āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋ" āĻŦāĻŋāĻ­āĻžāϗ⧇āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏāĻžāĻŦ⧇, āĻāĻ•āϟāĻŋ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āϛ⧇ "werf - āϕ⧁āĻŦāĻžāϰāύ⧇āĻŸā§‡ CI/CD āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ"āĨ¤ āĻāϟāĻž āϏ⧇āϏāĻŦ āύāĻŋāϝāĻŧ⧇ āĻ•āĻĨāĻž āĻŦāϞ⧇ āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ⧇ āĻŽā§‹āϤāĻžāϝāĻŧ⧇āύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϝ⧇ āϏāĻ•āϞ āϏāĻŽāĻ¸ā§āϝāĻž āĻāĻŦāĻ‚ āĻšā§āϝāĻžāϞ⧇āĻžā§āĻœā§‡āϰ āϏāĻŽā§āĻŽā§āĻ–ā§€āύ āĻšāϝāĻŧ, āϏ⧇āχāϏāĻžāĻĨ⧇ āϏ⧂āĻ•ā§āĻˇā§āĻŽāϤāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϝāĻž āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇ āϞāĻ•ā§āώāĻŖā§€āϝāĻŧ āύāĻžāĻ“ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϏāĻŽā§āĻ­āĻžāĻŦā§āϝ āϏāĻŽāĻžāϧāĻžāύ āĻŦāĻŋāĻļā§āϞ⧇āώāĻŖ āĻ•āϰ⧇, āφāĻŽāϰāĻž āĻĻ⧇āĻ–āĻžāχ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ“āĻĒ⧇āύ āϏ⧋āĻ°ā§āϏ āϟ⧁āϞ⧇ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ werf.

āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āĻĒāϰ āĻĨ⧇āϕ⧇, āφāĻŽāĻžāĻĻ⧇āϰ āχāωāϟāĻŋāϞāĻŋāϟāĻŋ (āĻĒā§‚āĻ°ā§āĻŦ⧇ āĻāĻ•āϟāĻŋ āĻĄā§āϝāĻžāĻĒ āύāĻžāĻŽā§‡ āĻĒāϰāĻŋāϚāĻŋāϤ) āĻāϰ āĻāĻ•āϟāĻŋ āϐāϤāĻŋāĻšāĻžāϏāĻŋāĻ• āĻŽāĻžāχāϞāĻĢāϞāĻ• āϛ⧁āρāϝāĻŧ⧇āϛ⧇ GitHub-āĻ 1000 āϤāĻžāϰāĻž — āφāĻŽāϰāĻž āφāĻļāĻž āĻ•āϰāĻŋ āϝ⧇ āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻ•ā§āϰāĻŽāĻŦāĻ°ā§āϧāĻŽāĻžāύ āϏāĻŽā§āĻĒā§āϰāĻĻāĻžāϝāĻŧ āĻ…āύ⧇āĻ• DevOps āχāĻžā§āϜāĻŋāύāĻŋāϝāĻŧāĻžāϰāĻĻ⧇āϰ āĻœā§€āĻŦāύāϕ⧇ āϏāĻšāϜ āĻ•āϰ⧇ āϤ⧁āϞāĻŦ⧇āĨ¤

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āϏ⧁āϤāϰāĻžāĻ‚, āφāĻŽāϰāĻž āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻĒā§āϰāϤāĻŋāĻŦ⧇āĻĻāύ⧇āϰ āĻ­āĻŋāĻĄāĻŋāĻ“ (~47 āĻŽāĻŋāύāĻŋāϟ, āύāĻŋāĻŦāĻ¨ā§āϧ⧇āϰ āĻšā§‡āϝāĻŧ⧇ āĻ…āύ⧇āĻ• āĻŦ⧇āĻļāĻŋ āϤāĻĨā§āϝāĻĒā§‚āĻ°ā§āĻŖ) āĻāĻŦāĻ‚ āĻĒāĻžāĻ ā§āϝ āφāĻ•āĻžāϰ⧇ āĻāϟāĻŋ āĻĨ⧇āϕ⧇ āĻŽā§‚āϞ āύāĻŋāĻ°ā§āϝāĻžāϏāĨ¤ āϝāĻžāĻ“āϝāĻŧāĻž!

āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏāϕ⧇ āϕ⧋āĻĄ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻž āĻšāĻšā§āϛ⧇

āφāϞ⧋āϚāύāĻžāϟāĻŋ āφāϰ āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āύāϝāĻŧ, āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ⧇ āϏāĻŋāφāχ/āϏāĻŋāĻĄāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻšāĻŦ⧇, āϝāĻž āĻŦā§‹āĻāĻžāϝāĻŧ āϝ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ āĻĄāĻ•āĻžāϰ āĻĒāĻžāĻ¤ā§āϰ⧇ āĻĒā§āϝāĻžāϕ⧇āϜ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ (āφāĻŽāĻŋ āĻāχ āĻŦāĻŋāώāϝāĻŧ⧇ āĻ•āĻĨāĻž āĻŦāϞ⧇āĻ›āĻŋ 2016 āϰāĻŋāĻĒā§‹āĻ°ā§āϟ), āĻāĻŦāĻ‚ K8s āĻāϟāĻŋ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ⧇ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāĻŦ⧇ (āĻ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ 2017 āĻŦāĻ›āϰ).

āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ⧇ āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋ āϕ⧇āĻŽāύ āĻĻ⧇āĻ–āĻžāϝāĻŧ?

  • āĻāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϕ⧋āĻĄ āĻāĻŦāĻ‚ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āϏāĻš āĻāĻ•āϟāĻŋ āĻ—āĻŋāϟ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āĻœā§‡ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤
  • āĻāĻ•āχ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϤ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻāĻŦāĻ‚ āϚāĻžāϞāĻžāϤ⧇ āĻšāĻŦ⧇ āϤāĻžāϰ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇, āĻāχ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āϕ⧁āĻŦāĻžāϰāύ⧇āĻŸā§‡ āĻĒāĻžāĻ āĻžāύ⧋ āĻšāϝāĻŧ, āϝāĻž āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻĨ⧇āϕ⧇ āĻĒāĻ›āĻ¨ā§āĻĻāϏāχ āϚāĻŋāĻ¤ā§āϰ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϚāĻžāϞ⧁ āĻ•āϰ⧇āĨ¤
  • āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĒāϰ⧀āĻ•ā§āώāĻž āφāϛ⧇āĨ¤ āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻ•āĻŋāϛ⧁ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āφāĻĒāύāĻŋ (āĻāĻ•āχ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧇) āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋāϰ āĻāĻ•āϟāĻŋ āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ (āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ• K8s āύāĻžāĻŽāĻ¸ā§āĻĨāĻžāύ⧇ āĻŦāĻž āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ• āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ⧇) āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āϏ⧇āĻ–āĻžāύ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤
  • āĻ…āĻŦāĻļ⧇āώ⧇, āφāĻĒāύāĻžāϰ āĻāĻ•āϟāĻŋ āϏāĻŋāφāχ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĻāϰāĻ•āĻžāϰ āϝāĻž āĻ—āĻŋāϟ (āĻŦāĻž āĻŦā§‹āϤāĻžāĻŽ āĻ•ā§āϞāĻŋāĻ•) āĻĨ⧇āϕ⧇ āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϏāĻŽāĻ¸ā§āϤ āĻŽāύ⧋āύ⧀āϤ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ āĻ•āϞ āĻ•āϰ⧇: āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ, āĻĒā§āϰāĻ•āĻžāĻļ, āĻ¸ā§āĻĨāĻžāĻĒāύ, āĻĒāϰ⧀āĻ•ā§āώāĻžāĨ¤

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āĻāĻ–āĻžāύ⧇ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āύ⧋āϟ āϰāϝāĻŧ⧇āϛ⧇:

  1. āĻ•āĻžāϰāĻŖ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧀āϝāĻŧ āĻĒāϰāĻŋāĻ•āĻžāĻ āĻžāĻŽā§‹ āϰāϝāĻŧ⧇āϛ⧇ (āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧀āϝāĻŧ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹), āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āχāĻŽā§‡āϜ āϝāĻž āϏāĻŦ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ (āĻŽāĻžā§āϚāĻžāϝāĻŧāύ, āĻ‰ā§ŽāĻĒāĻžāĻĻāύ, āχāĻ¤ā§āϝāĻžāĻĻāĻŋ), āĻāĻ•āϟāĻŋ āĻšāϤ⧇ āĻšāĻŦ⧇. āφāĻŽāĻŋ āφāϰāĻ“ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āĻāĻŦāĻ‚ āωāĻĻāĻžāĻšāϰāĻŖ āϏāĻš āĻāχ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ•āĻĨāĻž āĻŦāϞāϞāĻžāĻŽ. āĻāĻ–āĻžāύ⧇.
  2. āĻ•āĻžāϰāĻŖ āφāĻŽāϰāĻž āϕ⧋āĻĄ āĻ…ā§āϝāĻžāĻĒā§āϰ⧋āϚ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāĻŋ (āφāχāĻāϏāĻŋ), āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϕ⧋āĻĄ, āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϚāĻžāϞ⧁ āĻ•āϰāĻž āωāϚāĻŋāϤ āĻ āĻŋāĻ• āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ⧇. āĻāχ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ, āĻĻ⧇āϖ⧁āύ āĻāĻ•āχ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ.
  3. āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋ āĻšā§‡āχāύ (āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋ) āφāĻŽāϰāĻž āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāϟāĻŋāϕ⧇ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāχ: āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ, āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻž, āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ (āĻŽā§āĻ•ā§āϤāĻŋāϰ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ) āĻāĻŦāĻ‚ āĻāϟāĻŋāχ - āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇, āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āφāĻĒāύāĻŋ āϝāĻž āϰ⧋āϞ āφāωāϟ āĻ•āϰ⧇āϛ⧇āύ āϤāĻž āĻĒāĻžāϝāĻŧ, āύāĻž āϤāĻžāϰāĻĒāϰ āϝāĻ–āύ āφāĻĒāύāĻŋ āĻāϟāĻŋāϕ⧇ āĻĒā§āϰāϝ⧋āϜāύāĻžāϝāĻŧ āĻĒ⧌āρāϛ⧇ āĻĻ⧇āύ, āĻāĻŦāĻ‚ āϝāĻ–āύ āϤāĻŋāύāĻŋ āϏ⧇āĻ–āĻžāύ⧇ āϝ⧇āϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāύ āĻāĻŦāĻ‚ āĻāχ āĻĒā§āϰāϝ⧋āϜāύāĻžāϟāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āϤāĻžāχ āφāĻŽāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āϰāĻŋ āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋ āĻšā§‡āχāύ āĻļ⧇āώ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ…āĻĒāĻžāϰ⧇āĻļāύāĻžāϞ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ (āϚāĻžāϞāĻžāύ), āĻŦāĻž āφāϰāĻ“ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇, āĻāĻŽāύāĻ•āĻŋ āϏ⧇āχ āĻŽā§āĻšā§āĻ°ā§āϤ⧇ āϝāĻ–āύ āϕ⧋āĻĄāϟāĻŋ āωāĻ¤ā§āĻĒāĻžāĻĻāύ āĻĨ⧇āϕ⧇ āϏāϰāĻžāύ⧋ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ (āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĻāĻŋāϝāĻŧ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž)āĨ¤

āφāϏ⧁āύ āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ⧇ āωāĻĒāϰ⧇āϰ āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋ āĻ¸ā§āĻ•āĻŋāĻŽā§‡ āĻĢāĻŋāϰ⧇ āφāϏāĻŋ: āĻāϟāĻŋ āϕ⧇āĻŦāϞ āφāĻŽāĻžāĻĻ⧇āϰ āĻĻā§āĻŦāĻžāϰāĻž āύāϝāĻŧ, āφāĻ•ā§āώāϰāĻŋāĻ• āĻ…āĻ°ā§āĻĨ⧇ āϝāĻžāϰāĻž āĻāχ āϏāĻŽāĻ¸ā§āϝāĻžāϟāĻŋ āĻŽā§‹āĻ•āĻžāĻŦ⧇āϞāĻž āĻ•āϰ⧇āĻ›āĻŋāϞ āϤāĻžāĻĻ⧇āϰ āĻĻā§āĻŦāĻžāϰāĻž āωāĻĻā§āĻ­āĻžāĻŦāĻŋāϤ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āφāϏāϞ⧇, āĻāχ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύāϟāĻŋāϕ⧇ āĻāĻ–āύ āĻ—āĻŋāϟāĻ…āĻĒāϏ āĻŦāϞāĻž āĻšāϝāĻŧ (āφāĻĒāύāĻŋ āĻļāĻŦā§āĻĻāϟāĻŋ āĻāĻŦāĻ‚ āĻāϰ āĻĒāĻŋāĻ›āύ⧇āϰ āϧāĻžāϰāĻŖāĻžāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻ–āĻžāύ⧇). āφāϏ⧁āύ āĻ¸ā§āĻ•āĻŋāĻŽā§‡āϰ āĻĒāĻ°ā§āϝāĻžāϝāĻŧāϗ⧁āϞāĻŋ āĻĻ⧇āϖ⧁āύāĨ¤

āĻŽāĻžā§āϚ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āĻĻ⧇āϖ⧇ āĻŽāύ⧇ āĻšāĻŦ⧇ āφāĻĒāύāĻŋ 2019 āϏāĻžāϞ⧇ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜ āϤ⧈āϰāĻŋāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āĻ•āĻĨāĻž āĻŦāϞāϤ⧇ āĻĒāĻžāϰ⧇āύ, āϝāĻ–āύ āϏāĻŦāĻžāχ āϜāĻžāύ⧇ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻĄāĻ•āĻžāϰāĻĢāĻžāχāϞāϏ āϞāĻŋāĻ–āϤ⧇ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āϚāĻžāϞāĻžāϤ⧇ āĻšāϝāĻŧ docker build?.. āĻāĻ–āĻžāύ⧇ āφāĻŽāĻŋ āĻŽāύ⧋āϝ⧋āĻ— āĻĻāĻŋāϤ⧇ āϚāĻžāχ āϝ⧇ āϏ⧂āĻ•ā§āĻˇā§āĻŽāϤāĻž āφāϛ⧇:

  1. āĻ›āĻŦāĻŋāϰ āĻ“āϜāύ āĻŦā§āϝāĻžāĻĒāĻžāϰ, āϤāĻžāχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āĻŦāĻšā§-āĻĒāĻ°ā§āϝāĻžāϝāĻŧāĻ›āĻŦāĻŋāϤ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϏ⧇āχ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āϛ⧇āĻĄāĻŧ⧇ āĻĻāĻŋāύ āϝāĻž āĻ…āĻĒāĻžāϰ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻ¤ā§āϝāĻŋāχ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāĨ¤
  2. āĻ¸ā§āϤāϰ⧇āϰ āϏāĻ‚āĻ–ā§āϝāĻž āĻāϰ āĻšā§‡āχāύāϗ⧁āϞāĻŋāϕ⧇ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰ⧇ āϛ⧋āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ RUN-āĻ…āĻ°ā§āĻĨ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āφāĻĻ⧇āĻļāĨ¤
  3. āϝāĻžāχāĻšā§‹āĻ•, āĻāϟāĻŋ āϏāĻŽāĻ¸ā§āϝāĻž āϝ⧋āĻ— āĻ•āϰ⧇ āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚, āĻ•āĻžāϰāĻŖ āϝāĻ–āύ āϏāĻŽāĻžāĻŦ⧇āĻļ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āĻšāϝāĻŧ, āϤāĻ–āύ āφāĻĒāύāĻžāϕ⧇ āϏ⧇āχ āĻšā§‡āχāύ āĻĨ⧇āϕ⧇ āϏāĻ āĻŋāĻ• āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝāĻž āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϏ⧃āĻˇā§āϟāĻŋ āĻ•āϰ⧇āϛ⧇āĨ¤
  4. āϏāĻŽāĻžāĻŦ⧇āĻļ āĻ—āϤāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻžāϰāĻŖ āφāĻŽāϰāĻž āĻĻā§āϰ⧁āϤ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āϰ⧋āϞ āφāωāϟ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āĻĢāϞāĻžāĻĢāϞ āĻĻ⧇āĻ–āϤ⧇ āϚāĻžāχ⧎ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻĒāύāĻŋ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻ­āĻžāώāĻž āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāϤ⧇ āύāĻŋāĻ°ā§āĻ­āϰāϤāĻž āĻĒ⧁āύāĻ°ā§āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āϰāϤ⧇ āϚāĻžāύ āύāĻžāĨ¤
  5. āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻāĻ•āϟāĻŋ āĻ—āĻŋāϟ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āĻĨ⧇āϕ⧇ āφāĻĒāύāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻ…āύ⧇āĻ• āĻ›āĻŦāĻŋ, āϝāĻž āĻĄāĻ•āĻžāϰāĻĢāĻžāχāϞ⧇āϰ āĻāĻ•āϟāĻŋ āϏ⧇āϟ (āĻŦāĻž āĻāĻ•āϟāĻŋ āĻĢāĻžāχāϞ⧇ āύāĻžāĻŽ āĻĻ⧇āĻ“āϝāĻŧāĻž āϧāĻžāĻĒ) āĻāĻŦāĻ‚ āϤāĻžāĻĻ⧇āϰ āĻ…āύ⧁āĻ•ā§āϰāĻŽāĻŋāĻ• āϏāĻŽāĻžāĻŦ⧇āĻļ āϏāĻš āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻžāĻļ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāϟāĻŋ āĻ›āĻŋāϞ āφāχāϏāĻŦāĻžāĻ°ā§āϗ⧇āϰ āϟāĻŋāĻĒ āϝāĻž āĻĒā§āϰāĻ¤ā§āϝ⧇āϕ⧇āϰ āĻŽā§āĻ–ā§‹āĻŽā§āĻ–āĻŋ āĻšāϝāĻŧāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āϏāĻŽāĻ¸ā§āϝāĻž āφāϛ⧇, āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇:

  1. āĻĒā§āϰāĻžāϝāĻŧāχ āϏāĻŽāĻžāĻŦ⧇āĻļ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ āφāĻŽāϰāĻž āĻ•āĻŋāϛ⧁ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻŽāĻžāωāĻ¨ā§āϟ (āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϤ⧃āϤ⧀āϝāĻŧ āĻĒāĻ•ā§āώ⧇āϰ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϤ⧇ apt-āĻāϰ āĻŽāϤ⧋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻĢāϞāĻžāĻĢāϞ āĻ•ā§āϝāĻžāĻļ⧇ āĻ•āϰ⧁āύ)āĨ¤
  2. āφāĻŽāϰāĻž āϚāĻžāχ Ansible āĻļ⧇āϞ⧇ āϞ⧇āĻ–āĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇āĨ¤
  3. āφāĻŽāϰāĻž āϚāĻžāχ āĻĄāĻ•āĻžāϰ āĻ›āĻžāĻĄāĻŧāĻž āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ (āϕ⧇āύ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞ āĻŽā§‡āĻļāĻŋāύ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āϝ⧇āĻ–āĻžāύ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻāϰ āϜāĻ¨ā§āϝ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇, āϝāĻ–āύ āφāĻŽāĻžāĻĻ⧇āϰ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ āϰāϝāĻŧ⧇āϛ⧇ āϝ⧇āĻ–āĻžāύ⧇ āφāĻŽāϰāĻž āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰāĻŋ?)
  4. āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ āϏāĻŽāĻžāĻŦ⧇āĻļ, āϝāĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāϝāĻŧ⧇ āĻŦā§‹āĻāĻž āϝāĻžāϝāĻŧ: āĻĄāĻ•āĻžāϰāĻĢāĻžāχāϞ āĻĨ⧇āϕ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ (āϝāĻĻāĻŋ āĻŽāĻžāĻ˛ā§āϟāĻŋ-āĻ¸ā§āĻŸā§‡āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ), āĻāĻ•āχ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϰ āĻāĻ•āĻžāϧāĻŋāĻ• āĻ•āĻŽāĻŋāϟ, āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻĄāĻ•āĻžāϰāĻĢāĻžāχāϞāĨ¤
  5. āĻŦāĻŋāϤāϰāĻŖ āϏāĻŽāĻžāĻŦ⧇āĻļ: āφāĻŽāϰāĻž āĻļ⧁āρāϟāĻŋ āϜāĻŋāύāĻŋāϏāĻĒāĻ¤ā§āϰ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāϤ⧇ āϚāĻžāχ āϝ⧇āϗ⧁āϞāĻŋ "āĻ•ā§āώāĻŖāĻ¸ā§āĻĨāĻžāϝāĻŧā§€" āĻ•āĻžāϰāĻŖ āϤāĻžāĻĻ⧇āϰ āĻ•ā§āϝāĻžāĻļ⧇ āĻ…āĻĻ⧃āĻļā§āϝ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ, āϝāĻžāϰ āĻŽāĻžāύ⧇ āĻāϟāĻŋ āφāϞāĻžāĻĻāĻžāĻ­āĻžāĻŦ⧇ āϕ⧋āĻĨāĻžāĻ“ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤
  6. āĻ…āĻŦāĻļ⧇āώ⧇, āφāĻŽāĻŋ āχāĻšā§āĻ›āĻžāϰ āĻļā§€āĻ°ā§āώ⧇āϰ āύāĻžāĻŽ āĻĻāĻŋāϞāĻžāĻŽ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ: āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϤ⧇ āϝāĻžāĻ“āϝāĻŧāĻž, āĻ•āĻŋāϛ⧁ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϟāĻžāχāĻĒ āĻ•āϰāĻž āĻāĻŦāĻ‚ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāĻŦāĻ‚ āϕ⧀ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϤāĻž āĻŦā§‹āĻāĻžāϰ āϏāĻžāĻĨ⧇ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻāĻ•āϟāĻŋ āϰ⧇āĻĄāĻŋāĻŽā§‡āĻĄ āϚāĻŋāĻ¤ā§āϰ āĻĒāĻžāĻ“āϝāĻŧāĻž āφāĻĻāĻ°ā§āĻļ āĻšāĻŦ⧇āĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āφāĻŽāĻŋ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤāĻ­āĻžāĻŦ⧇ āύāĻŋāĻļā§āϚāĻŋāϤ āύāχ āϝ⧇ āϏāĻŽāĻ¸ā§āϤ āϏ⧂āĻ•ā§āĻˇā§āĻŽāϤāĻž āĻāχāĻ­āĻžāĻŦ⧇ āĻĒā§‚āĻ°ā§āĻŦāĻžāĻ­āĻžāϏ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāĻŦāĻ‚ āĻāĻ–āĻžāύ⧇ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϗ⧁āϞāĻŋ āϰāϝāĻŧ⧇āϛ⧇:

  • āĻŽāĻŦāĻŋ/āĻŦāĻŋāĻ˛ā§āĻĄāĻ•āĻŋāϟ — āĻĄāĻ•āĻžāϰ āχāύāĻ•āĻ°ā§āĻĒā§‹āϰ⧇āĻŸā§‡āĻĄā§‡āϰ āĻāĻ•āϜāύ āύāĻŋāĻ°ā§āĻŽāĻžāϤāĻž (āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻĄāĻ•āĻžāϰ⧇āϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϗ⧁āϞāĻŋāϤ⧇ āĻāϕ⧀āĻ­ā§‚āϤ), āϝāĻž āĻāχ āϏāĻŽāĻ¸ā§āϤ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāϛ⧇;
  • āĻ•āĻžāύāĻŋāϕ⧋ — āϗ⧁āĻ—āϞ⧇āϰ āĻāĻ•āϜāύ āύāĻŋāĻ°ā§āĻŽāĻžāϤāĻž āϝāĻž āφāĻĒāύāĻžāϕ⧇ āĻĄāĻ•āĻžāϰ āĻ›āĻžāĻĄāĻŧāĻžāχ āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ;
  • Buildpacks.io — āϏāĻŋāĻāύāϏāĻŋāĻāĻĢ-āĻāϰ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āϜāĻžāĻĻ⧁ āϤ⧈āϰāĻŋāϰ āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻž āĻāĻŦāĻ‚ āĻŦāĻŋāĻļ⧇āώāϤ, āĻ¸ā§āϤāϰāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āϰāĻŋāĻŦ⧇āϏ āϏāĻš āĻāĻ•āϟāĻŋ āφāĻ•āĻ°ā§āώāĻŖā§€āϝāĻŧ āϏāĻŽāĻžāϧāĻžāύ;
  • āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āχāωāϟāĻŋāϞāĻŋāϟāĻŋāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āϗ⧁āĻšā§āĻ›, āϝ⧇āĻŽāύ āĻŦāĻŋāĻ˛ā§āĻĄāĻžāĻš, genuinetools/img...

...āĻāĻŦāĻ‚ GitHub-āĻ āϤāĻžāĻĻ⧇āϰ āĻ•āϤāϗ⧁āϞāĻŋ āϤāĻžāϰāĻž āφāϛ⧇ āϤāĻž āĻĻ⧇āϖ⧁āύāĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻāĻ•āĻĻāĻŋāϕ⧇, docker build āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻāĻŦāĻ‚ āĻ•āĻŋāϛ⧁ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦāĻžāĻ¸ā§āϤāĻŦ⧇ āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖāϰ⧂āĻĒ⧇ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧ āύāĻž - āĻāϰ āĻĒā§āϰāĻŽāĻžāĻŖ āĻšāϞ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āϏāĻ‚āĻ—ā§āϰāĻžāĻšāĻ•āĻĻ⧇āϰ āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ āĻŦāĻŋāĻ•āĻžāĻļ, āϝāĻžāϰ āĻĒā§āϰāĻ¤ā§āϝ⧇āĻ•āϟāĻŋ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āĻ•āĻŋāϛ⧁ āĻ…āĻ‚āĻļ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰ⧇āĨ¤

werf āĻŽāĻ§ā§āϝ⧇ āϏāĻŽāĻžāĻŦ⧇āĻļ

āϤāĻžāχ āφāĻŽāϰāĻž āĻĒ⧇āϝāĻŧ⧇āĻ›āĻŋāϞāĻžāĻŽ werf (āĻĒā§‚āĻ°ā§āĻŦ⧇ āĻŦāĻŋāĻ–ā§āϝāĻžāϤ āĻĄā§āϝāĻžāĻĒ⧇āϰ āĻŽāϤ) — Flant āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋāϰ āĻāĻ•āϟāĻŋ āĻ“āĻĒ⧇āύ āϏ⧋āĻ°ā§āϏ āχāωāϟāĻŋāϞāĻŋāϟāĻŋ, āϝāĻž āφāĻŽāϰāĻž āĻŦāĻšā§ āĻŦāĻ›āϰ āϧāϰ⧇ āϤ⧈āϰāĻŋ āĻ•āϰ⧇ āφāϏāĻ›āĻŋāĨ¤ āĻāϟāĻŋ āϏāĻŦāχ 5 āĻŦāĻ›āϰ āφāϗ⧇ āĻŦā§āϝāĻžāĻļ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻļ⧁āϰ⧁ āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āϝāĻž āĻĄāĻ•āĻžāϰāĻĢāĻžāχāϞāϏ⧇āϰ āϏāĻŽāĻžāĻŦ⧇āĻļāϕ⧇ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ āĻ•āϰ⧇āĻ›āĻŋāϞ āĻāĻŦāĻ‚ āĻ—āϤ 3 āĻŦāĻ›āϰ āϧāϰ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻ•āĻžāĻ āĻžāĻŽā§‹āϰ āĻŽāĻ§ā§āϝ⧇ āύāĻŋāϜāĻ¸ā§āĻŦ āĻ—āĻŋāϟ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋ āϏāĻš āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŦāĻŋāĻ•āĻžāĻļ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ (āĻĒā§āϰāĻĨāĻŽā§‡ āϰ⧁āĻŦāĻŋāϤ⧇, āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ āĻ…āύ⧁āϞāĻŋāĻĒāĻŋ āĻ•āϰāĻž āϝ⧇āϤ⧇, āĻāĻŦāĻ‚ āĻāĻ•āχ āϏāĻžāĻĨ⧇ āύāĻžāĻŽ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇). werf āĻ āĻ•āĻŋ āϏāĻŽāĻžāĻŦ⧇āĻļ āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧ?

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āύ⧀āϞ āϰāϙ⧇ āĻ›āĻžāϝāĻŧāĻžāϝ⧁āĻ•ā§āϤ āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇, āĻāĻ•āχ āĻšā§‹āĻ¸ā§āĻŸā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ āĻāĻŦāĻ‚ āĻšāϞ⧁āĻĻ⧇ āĻšāĻžāχāϞāĻžāχāϟ āĻ•āϰāĻž āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞāĻŋ āĻ—ā§āϰ⧀āĻˇā§āĻŽā§‡āϰ āĻļ⧇āώ⧇āϰ āĻĻāĻŋāϕ⧇ āϏāĻŽā§āĻĒāĻ¨ā§āύ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āĻĒā§āϰāĻ•āĻžāĻļ⧇āϰ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ (āĻĒā§āϰāĻ•āĻžāĻļ)

āφāĻŽāϰāĻž āĻĄāĻžāϝāĻŧāĻžāϞ āĻ•āϰ⧇āĻ›āĻŋ docker push... - āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋ āφāĻĒāϞ⧋āĻĄ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ•āĻŋ āĻ•āĻ āĻŋāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇? āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ āĻĒā§āϰāĻļā§āύ āĻ“āϠ⧇: "āφāĻŽāĻŋ āĻ›āĻŦāĻŋāϟāĻŋāϤ⧇ āϕ⧀ āĻŸā§āϝāĻžāĻ— āϞāĻžāĻ—āĻžāĻŦ?" āĻāϟāĻž āφāĻŽāĻžāĻĻ⧇āϰ āφāϛ⧇ āϝ⧇ āĻ•āĻžāϰāϪ⧇ āωāĻĻā§āĻ­ā§‚āϤ āĻšāϝāĻŧ āĻ—ā§āϰāĻŋāϟāĻĢā§āϞ⧋ (āĻŦāĻž āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ—āĻŋāϟ āĻ•ā§ŒāĻļāϞ) āĻāĻŦāĻ‚ āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ, āĻāĻŦāĻ‚ āĻļāĻŋāĻ˛ā§āĻĒ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāϛ⧇ āϝ⧇ āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ⧇ āϝāĻž āϘāĻŸā§‡ āϤāĻž āĻ—āĻŋāĻŸā§‡ āϝāĻž āϘāĻŸā§‡ āϤāĻž āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧇āĨ¤ āϏāĻ°ā§āĻŦā§‹āĻĒāϰāĻŋ, āĻ—āĻŋāϟ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻ¤ā§āϝ⧇āϰ āĻāĻ•āĻŽāĻžāĻ¤ā§āϰ āωāĻ¤ā§āϏāĨ¤

āĻāχ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻāϤ āĻ•āĻ āĻŋāύ āĻ•āĻŋ? āĻĒā§āϰāϜāύāύāϝ⧋āĻ—ā§āϝāϤāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ: āĻ—āĻŋāĻŸā§‡ āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻŋāϟ āĻĨ⧇āϕ⧇, āϝāĻž āĻĒā§āϰāĻ•ā§ƒāϤāĻŋāϤ⧇ āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧀āϝāĻŧ (āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧀āϝāĻŧ), āĻāĻ•āϟāĻŋ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜ, āϝāĻž āĻāĻ•āχ āϰāĻžāĻ–āĻž āωāϚāĻŋāϤ.

āĻāϟāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻžāϛ⧇āĻ“ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ‰ā§ŽāĻĒāĻ¤ā§āϤāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ, āĻ•āĻžāϰāĻŖ āφāĻŽāϰāĻž āĻŦ⧁āĻāϤ⧇ āϚāĻžāχ āϝ⧇ āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ⧇ āϚāϞāĻŽāĻžāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āϕ⧋āύ āĻ•āĻŽāĻŋāϟ āĻĨ⧇āϕ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ (āϤāĻžāϰāĻĒāϰ āφāĻŽāϰāĻž āĻĄāĻŋāĻĢ āĻāĻŦāĻ‚ āĻ…āύ⧁āϰ⧂āĻĒ āϜāĻŋāύāĻŋāϏāϗ⧁āϞāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ)āĨ¤

āĻŸā§āϝāĻžāĻ—āĻŋāĻ‚ āĻ•ā§ŒāĻļāϞ

āĻĒā§āϰāĻĨāĻŽāϟāĻŋ āϏāĻšāϜ git āĻŸā§āϝāĻžāĻ—. āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋ āĻŸā§āϝāĻžāĻ— āϏāĻ™ā§āϗ⧇ āĻāĻ•āϟāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āφāϛ⧇ 1.0. Kubernetes āĻŽāĻžā§āϚ āĻāĻŦāĻ‚ āωāĻ¤ā§āĻĒāĻžāĻĻāύ āφāϛ⧇, āϝ⧇āĻ–āĻžāύ⧇ āĻāχ āĻ›āĻŦāĻŋāϟāĻŋ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻž āĻšāϝāĻŧ. āĻ—āĻŋāϟ-āĻ āφāĻŽāϰāĻž āĻ•āĻŽāĻŋāϟ āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻ•āĻŋāϛ⧁ āϏāĻŽāϝāĻŧ⧇ āφāĻŽāϰāĻž āĻŸā§āϝāĻžāĻ— āĻ•āϰāĻŋ 2.0. āφāĻŽāϰāĻž āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āĻĨ⧇āϕ⧇ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻāϟāĻŋ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻŸā§āϝāĻžāĻ— āϏāĻš āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āϰāĻžāĻ–āĻŋ 2.0. āφāĻŽāϰāĻž āĻāϟāĻŋāϕ⧇ āĻŽāĻžā§āĻšā§‡ āύāĻŋāϝāĻŧ⧇ āφāϏāĻŋ āĻāĻŦāĻ‚, āϝāĻĻāĻŋ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ āĻŋāĻ• āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ⧇āĨ¤

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϰ āϏāĻŽāĻ¸ā§āϝāĻž āĻšāϞ āϝ⧇ āφāĻŽāϰāĻž āĻĒā§āϰāĻĨāĻŽā§‡ āĻŸā§āϝāĻžāĻ—āϟāĻŋ āϰāĻžāĻ–āĻŋ, āĻāĻŦāĻ‚ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϤāĻžāϰāĻĒāϰ āĻāϟāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇ āϰ⧋āϞ āφāωāϟ āĻ•āϰāĻŋāĨ¤ āϕ⧇āύ? āĻĒā§āϰāĻĨāĻŽāϤ, āĻāϟāĻŋ āϕ⧇āĻŦāϞ āĻ…āϝ⧌āĻ•ā§āϤāĻŋāĻ•: āφāĻŽāϰāĻž āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ⧇āϰ āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϜāĻžāϰāĻŋ āĻ•āϰāĻ›āĻŋ āϝāĻž āφāĻŽāϰāĻž āĻāĻ–āύāĻ“ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻŋāύāĻŋ (āφāĻŽāϰāĻž āĻ…āĻ¨ā§āϝāĻĨāĻžāϝāĻŧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ āύāĻž, āĻ•āĻžāϰāĻŖ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻŸā§āϝāĻžāĻ— āϞāĻžāĻ—āĻžāϤ⧇ āĻšāĻŦ⧇)āĨ¤ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧāϤ, āĻāχ āĻĒāĻĨāϟāĻŋ Gitflow āĻāϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āύāϝāĻŧāĨ¤

āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāϟāĻŋ āĻš'āϞ git āĻ•āĻŽāĻŋāϟ + āĻŸā§āϝāĻžāĻ—. āĻŽāĻžāĻ¸ā§āϟāĻžāϰ āĻļāĻžāĻ–āĻžāϰ āĻāĻ•āϟāĻŋ āĻŸā§āϝāĻžāĻ— āφāϛ⧇ 1.0; āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āĻāϟāĻŋāϰ āϜāĻ¨ā§āϝ - āĻāĻ•āϟāĻŋ āϚāĻŋāĻ¤ā§āϰ āωāĻ¤ā§āĻĒāĻžāĻĻāύ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ⧇ āĻĒā§āϰāĻŋāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻ•āύāĻŸā§āϝ⧁āϰ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āφāĻŽāϰāĻž āĻ—āĻŋāϟāĻĢā§āϞ⧋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāĻŋ: āωāĻ¨ā§āύāϝāĻŧāύ⧇āϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϧāĻžāύ āĻļāĻžāĻ–āĻžāϝāĻŧ (develop) āφāĻŽāϰāĻž āύāϤ⧁āύ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āϤ⧈āϰāĻŋ āĻ•āϰāĻŋ, āϝāĻžāϰ āĻĢāϞ⧇ āĻļāύāĻžāĻ•ā§āϤāĻ•āĻžāϰ⧀āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋ āĻšāϝāĻŧ #c1. āφāĻŽāϰāĻž āĻāϟāĻŋ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻāχ āĻļāύāĻžāĻ•ā§āϤāĻ•āĻžāϰ⧀ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻŋ (#c1) āĻāĻ•āχ āĻļāύāĻžāĻ•ā§āϤāĻ•āĻžāϰ⧀āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āφāĻŽāϰāĻž āĻĒā§āϰāĻŋāĻ­āĻŋāωāϤ⧇ āϰ⧋āϞ āφāωāϟ āĻ•āϰāĻŋāĨ¤ āφāĻŽāϰāĻž āĻ•āĻŽāĻŋāĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āχ āĻ•āĻžāϜ āĻ•āϰāĻŋ #c2 и #c3.

āϝāĻ–āύ āφāĻŽāϰāĻž āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŋ āϝ⧇ āϝāĻĨ⧇āĻˇā§āϟ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āϰāϝāĻŧ⧇āϛ⧇, āϤāĻ–āύ āφāĻŽāϰāĻž āϏāĻŦāĻ•āĻŋāϛ⧁ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻ•āϰāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāĻŋāĨ¤ Git āĻ āĻāĻ•āϟāĻŋ āĻļāĻžāĻ–āĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ release_1.1 (āĻŦ⧇āϏ⧇ #c3 āĻĨ⧇āϕ⧇ develop) āĻāχ āϰāĻŋāϞāĻŋāϜ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻžāϰ āϕ⧋āύ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ, āĻ•āĻžāϰāĻŖ... āĻāϟāĻŋ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒ⧇ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞāĨ¤ āĻ…āϤāĻāĻŦ, āφāĻŽāϰāĻž āĻāϟāĻŋāϕ⧇ āĻŽāĻžā§āϚāĻžāϝāĻŧāύ⧇ āϰ⧋āϞ āφāωāϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āφāĻŽāϰāĻž āĻŦāĻžāĻ— āĻ āĻŋāĻ• āĻ•āϰāĻŋ #c4 āĻāĻŦāĻ‚ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ āĻŽāĻžā§āĻšā§‡ āϰ⧋āϞ āφāωāϟ. āĻāĻ•āχ āϏāĻžāĻĨ⧇ āωāĻ¨ā§āύāϝāĻŧāύ⧇āϰ āĻ•āĻžāϜ āϚāϞāϛ⧇ develop, āϝ⧇āĻ–āĻžāύ⧇ āĻĒāĻ°ā§āϝāĻžāϝāĻŧāĻ•ā§āϰāĻŽā§‡ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ release_1.1. āĻ•āĻŋāϛ⧁ āϏāĻŽāϝāĻŧ⧇, āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋ āϏāĻ‚āĻ•āϞāύ āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚āϝāĻŧ⧇ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻŋ, āϝāĻž āύāĻŋāϝāĻŧ⧇ āφāĻŽāϰāĻž āϖ⧁āĻļāĻŋ (#c25).

āϤāĻžāϰāĻĒāϰ⧇ āφāĻŽāϰāĻž āϰāĻŋāϞāĻŋāϜ āĻļāĻžāĻ–āĻžāϕ⧇ (āĻĻā§āϰ⧁āϤ-āĻĢāϰ⧋āϝāĻŧāĻžāĻ°ā§āĻĄ āϏāĻš) āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻŋ (release_1.1) āĻŽāĻžāĻ¸ā§āϟāĻžāϰ⧇āĨ¤ āφāĻŽāϰāĻž āĻāχ āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋāϤ⧇ āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻŸā§āϝāĻžāĻ— āϰ⧇āϖ⧇āĻ›āĻŋ (1.1) āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāχ āĻ›āĻŦāĻŋāϟāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āϤāĻžāχ āĻāϟāĻŋ āφāĻŦāĻžāϰ āϏāĻ‚āĻ—ā§āϰāĻš āύāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰāĻž āϕ⧇āĻŦāϞ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻ›āĻŦāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āĻĻā§āĻŦāĻŋāϤ⧀āϝāĻŧ āĻŸā§āϝāĻžāĻ— āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŋ (āĻāĻ–āύ āĻāϟāĻŋāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āĻŸā§āϝāĻžāĻ— āϰāϝāĻŧ⧇āϛ⧇ #c25 и 1.1) āĻāϰ āĻĒāϰ⧇, āφāĻŽāϰāĻž āĻāϟāĻŋ āωāĻ¤ā§āĻĒāĻžāĻĻāύ⧇ āϰ⧋āϞ āφāωāϟ āĻ•āϰāĻŋāĨ¤

āĻāĻ•āϟāĻŋ āĻ…āĻĒā§‚āĻ°ā§āĻŖāϤāĻž āφāϛ⧇ āϝ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻž āĻšāϝāĻŧ (#c25), āĻāĻŦāĻ‚ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ⧇ āĻāϟāĻž āĻ­āĻŋāĻ¨ā§āύ āϧāϰāύ⧇āϰ (1.1), āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻŽāϰāĻž āϜāĻžāύāĻŋ āϝ⧇ "āĻļāĻžāϰ⧀āϰāĻŋāĻ•āĻ­āĻžāĻŦ⧇" āĻāϗ⧁āϞāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻĨ⧇āϕ⧇ āĻāĻ•āχ āϚāĻŋāĻ¤ā§āϰāĨ¤

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āφāϏāϞ āĻ…āϏ⧁āĻŦāĻŋāϧāĻž āĻš'āϞ āĻŽāĻžāĻ°ā§āϜ āĻ•āĻŽāĻŋāĻŸā§‡āϰ āϜāĻ¨ā§āϝ āϕ⧋āύāĻ“ āϏāĻŽāĻ°ā§āĻĨāύ āύ⧇āχ, āφāĻĒāύāĻžāϕ⧇ āĻĻā§āϰ⧁āϤ-āĻĢāϰ⧋āϝāĻŧāĻžāĻ°ā§āĻĄ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āφāĻŽāϰāĻž āφāϰāĻ“ āĻāĻ—āĻŋāϝāĻŧ⧇ āĻ—āĻŋāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ āĻ•ā§ŒāĻļāϞ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ... āφāϏ⧁āύ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĄāĻ•āĻžāϰāĻĢāĻžāχāϞ⧇āϰ āωāĻĻāĻžāĻšāϰāĻŖ āĻĻ⧇āĻ–āĻŋ:

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) āύāĻŋāύāĨ¤ āĻāχ āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āĻœā§‡āϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰ⧇ āĻāĻŽāύ āϏāĻŦāĻ•āĻŋāϛ⧁āĨ¤

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āĻāϰ āĻĄāĻžāϝāĻŧāĻžāĻ—ā§āϰāĻžāĻŽā§‡ āĻĢāĻŋāϰ⧇ āϝāĻžāĻ“āϝāĻŧāĻž āϝāĻžāĻ• āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇ āφāĻŽāϰāĻž āĻāχ āϧāϰāύ⧇āϰ āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ, āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰ āϏāĻš āĻ›āĻŦāĻŋ āĻŸā§āϝāĻžāĻ— āĻ•āϰ⧁āύāĨ¤

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āĻāĻ–āύ, āϝāĻ–āύ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϰāĻŋāϞāĻŋāϜ āĻĨ⧇āϕ⧇ āĻŽāĻžāĻ¸ā§āϟāĻžāϰ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋāϕ⧇ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻŽāĻžāĻ°ā§āϜ āĻ•āĻŽāĻŋāϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ: āĻāϟāĻŋāϰ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ āĻļāύāĻžāĻ•ā§āϤāĻ•āĻžāϰ⧀ āĻĨāĻžāĻ•āĻŦ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āχ āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰ āĻĨāĻžāĻ•āĻŦ⧇⧎ āĻāĻ•āχ āĻļāύāĻžāĻ•ā§āϤāĻ•āĻžāϰ⧀āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āφāĻŽāϰāĻž āĻ›āĻŦāĻŋāϟāĻŋāϕ⧇ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āϰ⧋āϞ āφāωāϟ āĻ•āϰāĻŦāĨ¤

āĻ…āϏ⧁āĻŦāĻŋāϧāĻž āĻšāϞ āϝ⧇ āĻāĻ–āύ āĻāϟāĻŋ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ āĻšāĻŦ⧇ āύāĻž āϝ⧇ āĻ•āĻŋ āϧāϰāύ⧇āϰ āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ⧇ āϠ⧇āϞ⧇ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ - āĻšā§‡āĻ•āϏāĻžāĻŽāϗ⧁āϞāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ• āĻĻāĻŋāϕ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤ āĻāχ āϏāĻŽāĻ¸ā§āϝāĻžāϟāĻŋ āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻž āϏāĻš āĻāĻ•āϟāĻŋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ¸ā§āϤāϰ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ - āφāĻŽāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻĒāϰ⧇ āφāϰāĻ“ āĻŦāϞāĻŦāĨ¤

werf āĻŸā§āϝāĻžāĻ—āĻŋāĻ‚

āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ-āĻ āφāĻŽāϰāĻž āφāϰāĻ“ āĻāĻ—āĻŋāϝāĻŧ⧇ āĻ—āĻŋāϝāĻŧ⧇āĻ›āĻŋāϞāĻžāĻŽ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ•ā§āϝāĻžāĻļ⧇ āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ āĻŦāĻŋāϤāϰāĻŖ āĻ•āϰāĻž āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰāĻžāϰ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤāĻŋ āύāĻŋāĻšā§āĻ›āĻŋ āϝāĻž āĻāĻ•āϟāĻŋ āĻŽā§‡āĻļāĻŋāύ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ āύāĻž... āϏ⧁āϤāϰāĻžāĻ‚, āφāĻŽāϰāĻž āĻĻ⧁āχ āϧāϰāύ⧇āϰ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜ āϤ⧈āϰāĻŋ āĻ•āϰāĻ›āĻŋ, āφāĻŽāϰāĻž āϤāĻžāĻĻ⧇āϰ āĻŦāϞāĻŋ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ и āĻ­āĻžāĻŦāĻŽā§‚āĻ°ā§āϤāĻŋ.

āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ āĻ—āĻŋāϟ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋ āĻŦāĻŋāĻ˛ā§āĻĄ-āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āϏāĻžā§āϚāϝāĻŧ āĻ•āϰ⧇ āϝāĻž āĻŦāĻŋāĻ˛ā§āĻĄā§‡āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰ⧇ (āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻžāϰ āφāϗ⧇, āχāύāĻ¸ā§āϟāϞ, āϏ⧇āϟāφāĻĒ⧇āϰ āφāϗ⧇, āϏ⧇āϟāφāĻĒ) āφāĻŽāϰāĻž āĻĒā§āϰāĻĨāĻŽ āϧāĻžāĻĒ⧇āϰ āĻšā§‡āĻ•āϏāĻžāĻŽ āĻšāĻŋāϏāĻžāĻŦ⧇ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰ āϏāĻš āĻĒā§āϰāĻĨāĻŽ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇āϰ āϚāĻŋāĻ¤ā§āϰ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻŋāĨ¤ āϤāĻžāϰāĻĒāϰ⧇ āφāĻŽāϰāĻž āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰāĻŋ, āύāϤ⧁āύ āĻ¸ā§āĻŸā§‡āϜ āχāĻŽā§‡āĻœā§‡āϰ āϜāĻ¨ā§āϝ āφāĻŽāϰāĻž āĻāϰ āĻšā§‡āĻ•āϏāĻžāĻŽ āĻ—āĻŖāύāĻž āĻ•āϰāĻŋ... āĻāχ āĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϞāĻžāĻĒāϗ⧁āϞāĻŋ āϏāĻŽāĻ¸ā§āϤ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻšāϝāĻŧ, āϝāĻžāϰ āĻĢāϞāĻ¸ā§āĻŦāϰ⧂āĻĒ āφāĻŽāϰāĻž āĻ¸ā§āĻŸā§‡āϜ āχāĻŽā§‡āĻœā§‡āϰ āĻāĻ•āϟāĻŋ āϏ⧇āϟ āĻĒāĻžāχāĨ¤ āϤāĻžāϰāĻĒāϰ⧇ āφāĻŽāϰāĻž āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āϚāĻŋāĻ¤ā§āϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻŋ, āϝāĻž āĻāϰ āωāĻ¤ā§āϏ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻžāĻ“ āϧāĻžāϰāĻŖ āĻ•āϰ⧇āĨ¤ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āĻāχ āĻ›āĻŦāĻŋāϟāĻŋāϕ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāϝāĻŧ⧇ āĻŸā§āϝāĻžāĻ— āĻ•āϰāĻŋ (āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āĻĒāϰ⧇)āĨ¤

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āϧāϰ⧁āύ āĻāϰ āĻĒāϰ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšāĻŦ⧇ āϝ⧇āĻ–āĻžāύ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϕ⧋āĻĄ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āĻ•āĻŋ āĻšāĻŦ⧇? āϕ⧋āĻĄ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āϜāĻ¨ā§āϝ, āĻāĻ•āϟāĻŋ āĻĒā§āϝāĻžāϚ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ¸ā§āĻŸā§‡āϜ āχāĻŽā§‡āϜ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āĻāϰ āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰāϟāĻŋ āĻĒ⧁āϰāĻžāύ⧋ āĻ¸ā§āĻŸā§‡āϜ āχāĻŽā§‡āϜ āĻāĻŦāĻ‚ āύāϤ⧁āύ āĻĒā§āϝāĻžāĻšā§‡āϰ āĻšā§‡āĻ•āϏāĻžāĻŽ āĻšāĻŋāϏāĻžāĻŦ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻšāĻŦ⧇āĨ¤ āĻāχ āĻ›āĻŦāĻŋāϟāĻŋ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āϚāĻŋāĻ¤ā§āϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āϏāĻžāĻĨ⧇ āĻ…āύ⧁āϰ⧂āĻĒ āφāϚāϰāĻŖ āϘāϟāĻŦ⧇āĨ¤

āĻāχāĻ­āĻžāĻŦ⧇, āĻ¸ā§āĻŸā§‡āϜ āχāĻŽā§‡āϜāϗ⧁āϞāĻŋ āĻšāϞ āĻāĻ•āϟāĻŋ āĻ•ā§āϝāĻžāĻļ⧇ āϝāĻž āĻŦāĻŋāϤāϰāĻŖ āĻ•āϰāĻž āϝāĻžāϝāĻŧ āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻĨ⧇āϕ⧇ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻ›āĻŦāĻŋāϗ⧁āϞāĻŋ āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻž

āφāĻŽāϰāĻž āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻŸā§āϝāĻžāĻ—āϗ⧁āϞāĻŋāϰ āĻĒāϰ⧇ āĻā§āϞ⧇ āĻĨāĻžāĻ•āĻž āĻ¸ā§āϤāϰāϗ⧁āϞāĻŋ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻžāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āĻ•āĻĨāĻž āĻŦāϞāĻ›āĻŋ āύāĻž - āĻāϟāĻŋ āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϰ āĻāĻ•āϟāĻŋ āφāĻĻāĻ°ā§āĻļ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāĨ¤ āφāĻŽāϰāĻž āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϰ āĻ•āĻĨāĻž āĻŦāϞāĻ›āĻŋ āϝāĻ–āύ āĻĒā§āϰāϚ⧁āϰ āĻĄāĻ•āĻžāϰ āĻŸā§āϝāĻžāĻ— āϜāĻŽāĻž āĻšāϝāĻŧ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰāĻŋ āϝ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āφāϰ āϏ⧇āϗ⧁āϞāĻŋāϰ āĻ•āĻŋāϛ⧁āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ, āϤāĻŦ⧇ āϤāĻžāϰāĻž āϜāĻžāϝāĻŧāĻ—āĻž āύ⧇āϝāĻŧ (āĻāĻŦāĻ‚/āĻ…āĻĨāĻŦāĻž āφāĻŽāϰāĻž āĻāϟāĻŋāϰ āϜāĻ¨ā§āϝ āĻ…āĻ°ā§āĻĨ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻŋ)āĨ¤

āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻžāϰ āĻ•ā§ŒāĻļāϞ āĻ•āĻŋ?

  1. āφāĻĒāύāĻŋ āĻļ⧁āϧ⧁ āĻ•āĻŋāϛ⧁āχ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻž āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻŦ⧇āύ āύāĻž. āĻ•āĻ–āύāĻ“ āĻ•āĻ–āύāĻ“ āĻŸā§āϝāĻžāϗ⧇āϰ āĻŦāĻŋāĻļāĻžāϞ āϜāϟ āĻ–ā§‹āϞāĻžāϰ āĻšā§‡āϝāĻŧ⧇ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ¸ā§āĻĨāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻžāĻŽāĻžāĻ¨ā§āϝ āĻ…āĻ°ā§āĻĨ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻž āϏāĻ¤ā§āϝāĻŋāχ āϏāĻšāϜāĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŦāĻŋāĻ¨ā§āĻĻ⧁ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤
  2. āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϏ⧇āϟ. āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāĻŽāĻ¸ā§āϤ āĻ›āĻŦāĻŋ āĻŽā§āϛ⧇ āĻĢ⧇āϞ⧇āύ āĻāĻŦāĻ‚ CI āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύāϗ⧁āϞāĻŋ āĻĒ⧁āύāĻ°ā§āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āϰ⧇āύ āϤāĻŦ⧇ āĻāĻ•āϟāĻŋ āϏāĻŽāĻ¸ā§āϝāĻž āĻĻ⧇āĻ–āĻž āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āϝāĻĻāĻŋ āϧāĻžāϰāĻ•āϟāĻŋ āωāĻ¤ā§āĻĒāĻžāĻĻāύ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞ⧁ āĻ•āϰāĻž āĻšāϝāĻŧ, āϤāĻŦ⧇ āĻāϟāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϚāĻŋāĻ¤ā§āϰ āϞ⧋āĻĄ āĻ•āϰāĻž āĻšāĻŦ⧇ - āϝ⧇āϟāĻŋ āĻāĻ–āύāĻ“ āϕ⧇āω āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇āύāĻŋāĨ¤ āĻāϟāĻŋ āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧀āϝāĻŧ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹āϰ āϧāĻžāϰāĻŖāĻžāϕ⧇ āĻšāĻ¤ā§āϝāĻž āĻ•āϰ⧇āĨ¤
  3. āύ⧀āϞ āϏāĻŦ⧁āϜ. āĻāĻ•āϟāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āωāĻĒāĻšā§‡ āĻĒāĻĄāĻŧāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇ - āφāĻŽāϰāĻž āĻ…āĻ¨ā§āϝāϟāĻŋāϤ⧇ āĻ›āĻŦāĻŋ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻŋāĨ¤ āφāϗ⧇āϰ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻŽāϤ⧋ āĻāĻ•āχ āϏāĻŽāĻ¸ā§āϝāĻž: āφāĻĒāύāĻŋ āϕ⧋āύ āϏāĻŽāϝāĻŧ⧇ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϟāĻŋ āϏāĻžāĻĢ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻž āĻ“āĻ­āĻžāϰāĻĢā§āϞ⧋ āĻšāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇āϛ⧇?
  4. āϏāĻŽāϝāĻŧāĻŽāϤ⧋. 1 āĻŽāĻžāϏ⧇āϰ āĻŦ⧇āĻļāĻŋ āĻĒ⧁āϰāĻžāύ⧋ āϏāĻŽāĻ¸ā§āϤ āĻ›āĻŦāĻŋ āĻŽā§āĻ›āĻŦ⧇āύ? āϤāĻŦ⧇ āĻ…āĻŦāĻļā§āϝāχ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻĨāĻžāĻ•āĻŦ⧇ āϝāĻž āĻāĻ• āĻŽāĻžāϏ āϧāϰ⧇ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻšāϝāĻŧāύāĻŋ ...
  5. āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻ•āĻŋ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āϤāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύāĨ¤

āĻĻ⧁āϟāĻŋ āϏāĻ¤ā§āϝāχ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āϰāϝāĻŧ⧇āϛ⧇: āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻŦ⧇āύ āύāĻž āĻŦāĻž āύ⧀āϞ-āϏāĻŦ⧁āϜ + āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āϏāĻ‚āĻŽāĻŋāĻļā§āϰāĻŖ āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āφāĻŽāϰāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ•āĻĨāĻž āĻŦāϞāĻ›āĻŋ: āφāĻĒāύāĻŋ āϝāĻ–āύ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰ⧇āύ āϝ⧇ āĻāϟāĻŋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āύ āĻāĻŦāĻ‚ āĻāϟāĻŋāϤ⧇ āϏāĻŽāĻ¸ā§āϤ āύāϤ⧁āύ āĻ›āĻŦāĻŋ āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧇āύ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāĻ• āĻŽāĻžāϏāĨ¤ āĻāĻŦāĻ‚ āĻāĻ• āĻŽāĻžāϏ āĻĒāϰ⧇, āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ⧇āϰ āϕ⧋āύ āĻĒāĻĄāϗ⧁āϞāĻŋ āĻāĻ–āύāĻ“ āĻĒ⧁āϰāĻžāύ⧋ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϛ⧇ āϤāĻž āĻĻ⧇āϖ⧁āύ āĻāĻŦāĻ‚ āϏ⧇āϗ⧁āϞāĻŋāϕ⧇āĻ“ āύāϤ⧁āύ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ āĻ•āϰ⧁āύ⧎

āφāĻŽāϰāĻž āĻ•āĻŋ āĻāϏ⧇āĻ›āĻŋ werf? āφāĻŽāϰāĻž āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻŋ:

  1. āĻ—āĻŋāϟ āĻšā§‡āĻĄ: āϏāĻŽāĻ¸ā§āϤ āĻŸā§āϝāĻžāĻ—, āϏāĻŽāĻ¸ā§āϤ āĻļāĻžāĻ–āĻž - āϧāϰ⧇ āύāĻŋāĻšā§āĻ›āĻŋ āϝ⧇ āϚāĻŋāĻ¤ā§āϰāϗ⧁āϞāĻŋāϤ⧇ āĻ—āĻŋāĻŸā§‡ āĻŸā§āϝāĻžāĻ— āĻ•āϰāĻž āϏāĻŽāĻ¸ā§āϤ āĻ•āĻŋāϛ⧁ āφāĻŽāĻžāĻĻ⧇āϰ āĻĻāϰāĻ•āĻžāϰ (āĻāĻŦāĻ‚ āϝāĻĻāĻŋ āύāĻž āĻšāϝāĻŧ āϤāĻŦ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻ—āĻŋāĻŸā§‡āχ āĻŽā§āϛ⧇ āĻĢ⧇āϞāϤ⧇ āĻšāĻŦ⧇);
  2. āϏāĻŽāĻ¸ā§āϤ āĻļ⧁āρāϟāĻŋ āϝāĻž āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āϕ⧁āĻŦāĻžāϰāύ⧇āĻŸā§‡ āĻĒāĻžāĻŽā§āĻĒ āĻ•āϰāĻž āĻšāϝāĻŧ;
  3. āĻĒ⧁āϰāĻžāύ⧋ āϰ⧇āĻĒā§āϞāĻŋāĻ•āĻžāϏ⧇āϟ (āϝāĻž āϏāĻŽā§āĻĒā§āϰāϤāĻŋ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇), āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āĻšā§‡āϞāĻŽ āϰāĻŋāϞāĻŋāϜāϗ⧁āϞāĻŋ āĻ¸ā§āĻ•ā§āϝāĻžāύ āĻ•āϰāĻžāϰ āĻāĻŦāĻ‚ āϏ⧇āĻ–āĻžāύ⧇ āϏāĻžāĻŽā§āĻĒā§āϰāϤāĻŋāĻ• āϚāĻŋāĻ¤ā§āϰāϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻ•āϰāĻ›āĻŋ⧎

... āĻāĻŦāĻ‚ āĻāχ āϏ⧇āϟ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāĻĻāĻž āϤāĻžāϞāĻŋāĻ•āĻž āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ - āĻ›āĻŦāĻŋāϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āϝāĻž āφāĻŽāϰāĻž āĻŽā§āĻ›āĻŦ āύāĻžāĨ¤ āφāĻŽāϰāĻž āĻ…āĻ¨ā§āϝ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻŋ, āϤāĻžāϰāĻĒāϰ⧇ āφāĻŽāϰāĻž āĻ…āύāĻžāĻĨ āĻŽāĻžā§āĻšā§‡āϰ āĻ›āĻŦāĻŋāϗ⧁āϞāĻŋ āϖ⧁āρāĻœā§‡ āĻĒāĻžāχ āĻāĻŦāĻ‚ āϏ⧇āϗ⧁āϞāĻŋāĻ“ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻŋāĨ¤

āĻŽāĻžā§āϚ āĻ¸ā§āĻĨāĻžāĻĒāύ

āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ˜ā§‹āώāĻŖāĻžāĻŽā§‚āϞāĻ•āϤāĻž

āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻĒā§āϰāĻĨāĻŽ āϝ⧇ āĻŦāĻŋāώāϝāĻŧāϟāĻŋāϰ āĻĒā§āϰāϤāĻŋ āφāĻŽāĻŋ āĻĻ⧃āĻˇā§āϟāĻŋ āφāĻ•āĻ°ā§āώāĻŖ āĻ•āϰāϤ⧇ āϚāĻžāχ āϤāĻž āĻšāϞ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āϰāĻŋāϏ⧋āĻ°ā§āϏ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ⧇āϰ āϰ⧋āϞāφāωāϟ, āĻ˜ā§‹āώāĻŖāĻžāĻŽā§‚āϞāĻ•āĻ­āĻžāĻŦ⧇ āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ āϏāĻ‚āĻ¸ā§āĻĨāĻžāύāϗ⧁āϞāĻŋāϰ āĻŦāĻ°ā§āĻŖāύāĻžāĻ•āĻžāϰ⧀ āφāϏāϞ YAML āύāĻĨāĻŋāϟāĻŋ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ⧇ āϚāϞāĻŽāĻžāύ āĻĢāϞāĻžāĻĢāϞ āĻĨ⧇āϕ⧇ āϏāĻ°ā§āĻŦāĻĻāĻž āϖ⧁āĻŦ āφāϞāĻžāĻĻāĻžāĨ¤ āĻ•āĻžāϰāĻŖ Kubernetes āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āϝ⧋āĻ— āĻ•āϰ⧇:

  1. āĻļāύāĻžāĻ•ā§āϤāĻ•āĻžāϰ⧀;
  2. āĻĒāϰāĻŋāώ⧇āĻŦāĻž āϤāĻĨā§āϝ;
  3. āĻ…āύ⧇āĻ• āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻŽāĻžāύ;
  4. āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϏāĻš āĻŦāĻŋāĻ­āĻžāĻ—;
  5. āĻ­āĻ°ā§āϤāĻŋ āĻ“āϝāĻŧ⧇āĻŦāĻšā§āϕ⧇āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻ•āϰāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ;
  6. āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻžāϰ (āĻāĻŦāĻ‚ āϏāĻŽāϝāĻŧāϏ⧂āĻšā§€) āĻāϰ āĻ•āĻžāĻœā§‡āϰ āĻĢāϞāĻžāĻĢāϞāĨ¤

āĻ…āϤāĻāĻŦ, āϝāĻ–āύ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻĨāĻžāύ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšāϝāĻŧ (āύāϤ⧁āύ), āφāĻŽāϰāĻž āĻāϟāĻŋāϰ āϏāĻžāĻĨ⧇ āĻŦāĻ°ā§āϤāĻŽāĻžāύ, "āϞāĻžāχāĻ­" āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύāϟāĻŋ āύāĻŋāϤ⧇ āĻāĻŦāĻ‚ āĻ“āĻ­āĻžāϰāϰāĻžāχāϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ āύāĻž (āĻœā§€āĻŦāĻŋāϤ) āĻāϟāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϤ⧁āϞāύāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āύāϤ⧁āύ āϏāĻ°ā§āĻŦāĻļ⧇āώ āĻĒā§āϰāϝāĻŧā§‹āĻ—āĻ•ā§ƒāϤ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āϏāĻš (āϏāĻ°ā§āĻŦāĻļ⧇āώ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇) āĻāĻŦāĻ‚ āϰ⧋āϞ āϏāĻŽā§āĻŽā§āϖ⧇āϰ āĻœā§€āĻŦāĻŋāϤ āĻĒā§āϰāĻžāĻĒā§āϤ āĻĒā§āϝāĻžāϚ.

āĻāχ āĻĒāĻĻā§āϧāϤāĻŋ āĻŦāϞāĻž āĻšāϝāĻŧ 2-āĻ“āϝāĻŧ⧇ āĻŽāĻžāĻ°ā§āϜ. āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻšā§‡āϞāĻŽā§‡āĨ¤

āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āφāϛ⧇ 3-āĻ“āϝāĻŧ⧇ āĻŽāĻžāĻ°ā§āϜ, āϝāĻž āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻ­āĻŋāĻ¨ā§āύ:

  • āϤ⧁āϞāύāĻž āϏāĻ°ā§āĻŦāĻļ⧇āώ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ и āύāϤ⧁āύ, āφāĻŽāϰāĻž āĻ•āĻŋ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻž āĻšāϝāĻŧ⧇āϛ⧇ āϤāĻžāĻ•āĻžāύ;
  • āϤ⧁āϞāύāĻž āύāϤ⧁āύ и āĻœā§€āĻŦāĻŋāϤ, āφāĻŽāϰāĻž āϕ⧀ āϝ⧋āĻ— āĻŦāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āϤāĻž āĻĻ⧇āĻ–āĻŋ;
  • āϏāĻŽāĻˇā§āϟāĻŋ āĻĒā§āϝāĻžāϚ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ āĻœā§€āĻŦāĻŋāϤ.

āφāĻŽāϰāĻž āĻšā§‡āϞāĻŽā§‡āϰ āϏāĻžāĻĨ⧇ 1000+ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻŋ, āϤāĻžāχ āφāĻŽāϰāĻž āφāϏāϞ⧇ 2-āĻ“āϝāĻŧ⧇ āĻŽāĻžāĻ°ā§āϜ āĻĻāĻŋāϝāĻŧ⧇ āĻĨāĻžāĻ•āĻŋāĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻāϤ⧇ āĻŦ⧇āĻļ āĻ•āĻŋāϛ⧁ āϏāĻŽāĻ¸ā§āϝāĻž āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϝāĻžāϚ āĻĻāĻŋāϝāĻŧ⧇ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰ⧇āĻ›āĻŋ, āϝāĻž āĻšā§‡āϞāĻŽāϕ⧇ āĻ¸ā§āĻŦāĻžāĻ­āĻžāĻŦāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤

āĻŦāĻžāĻ¸ā§āϤāĻŦ āϰ⧋āϞāφāωāϟ āĻ…āĻŦāĻ¸ā§āĻĨāĻž

āφāĻŽāĻžāĻĻ⧇āϰ CI āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰ⧇ (āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰ⧁āύ) āĻāĻ•āϟāĻŋ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ⧇ - āĻšā§‡āϞāĻŽ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦāĻž kubectl apply. āĻāϰ āĻĒāϰ⧇, āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻŦāĻ°ā§āĻŖāĻŋāϤ N-āĻ“āϝāĻŧ⧇ āĻŽāĻžāĻ°ā§āϜ āϘāĻŸā§‡, āϝāĻžāϰ āϜāĻ¨ā§āϝ Kubernetes API CI āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻāĻŦāĻ‚ āĻāϟāĻŋ āϤāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāϛ⧇ āĻ…āύ⧁āĻŽā§‹āĻĻāύ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĄāĻŧāĻž āĻĻ⧇āϝāĻŧāĨ¤

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āϝāĻžāχāĻšā§‹āĻ•, āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļāĻžāϞ āϏāĻŽāĻ¸ā§āϝāĻž āφāϛ⧇: āϏāĻŦ āĻĒāϰ⧇ āϏāĻĢāϞ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻŽāĻžāύ⧇ āϏāĻĢāϞ āϰ⧋āϞāφāωāϟ āύāϝāĻŧ. Kubernetes āϝāĻĻāĻŋ āĻŦ⧁āĻāϤ⧇ āĻĒāĻžāϰ⧇ āϕ⧋āύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāϤ⧇ āĻšāĻŦ⧇, āφāĻŽāϰāĻž āĻāĻ–āύāĻ“ āϜāĻžāύāĻŋ āύāĻž āĻĢāϞāĻžāĻĢāϞ āϕ⧀ āĻšāĻŦ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻĢā§āϰāĻ¨ā§āϟāĻāĻ¨ā§āĻĄā§‡ āĻĒāĻĄ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻāĻŦāĻ‚ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞ⧁ āĻ•āϰāĻž āϏāĻĢāϞ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āϤāĻŦ⧇ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡ āύāϝāĻŧ āĻāĻŦāĻ‚ āφāĻŽāϰāĻž āϚāϞāĻŽāĻžāύ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āϚāĻŋāĻ¤ā§āϰāϗ⧁āϞāĻŋāϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒāĻžāĻŦāĨ¤

āϏāĻŦāĻ•āĻŋāϛ⧁ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻ•āϰāϤ⧇, āĻāχ āĻ¸ā§āĻ•āĻŋāĻŽāϟāĻŋāϰ āĻāĻ•āϟāĻŋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϞāĻŋāĻ™ā§āĻ• āĻĒā§āϰāϝāĻŧā§‹āϜāύ - āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻļ⧇āώ āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻžāϰ āϝāĻž āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ API āĻĨ⧇āϕ⧇ āĻ¸ā§āĻĨāĻŋāϤāĻŋāϰ āϤāĻĨā§āϝ āĻĒāĻžāĻŦ⧇ āĻāĻŦāĻ‚ āϜāĻŋāύāĻŋāϏāϗ⧁āϞāĻŋāϰ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϰ āφāϰāĻ“ āĻŦāĻŋāĻļā§āϞ⧇āώāϪ⧇āϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰāĻŦ⧇āĨ¤ āφāĻŽāϰāĻž āĻ—ā§‹-āϤ⧇ āĻāĻ•āϟāĻŋ āĻ“āĻĒ⧇āύ āϏ⧋āĻ°ā§āϏ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĻ›āĻŋ - cubedog (āĻāϰ āĻ˜ā§‹āώāĻŖāĻž āĻĻ⧇āϖ⧁āύ āĻāĻ–āĻžāύ⧇), āϝāĻž āĻāχ āϏāĻŽāĻ¸ā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ werf-āĻ āύāĻŋāĻ°ā§āĻŽāĻŋāϤāĨ¤

werf āĻ¸ā§āϤāϰ⧇ āĻāχ āĻŸā§āĻ°ā§āϝāĻžāĻ•āĻžāϰ⧇āϰ āφāϚāϰāĻŖ āĻĄāĻŋāĻĒā§āϞ⧋āϝāĻŧāĻŽā§‡āĻ¨ā§āϟ āĻŦāĻž āĻ¸ā§āĻŸā§‡āϟāĻĢ⧁āϞāϏ⧇āĻŸā§‡ āϰāĻžāĻ–āĻž āĻŸā§€āĻ•āĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻŽā§‚āϞ āĻŸā§€āĻ•āĻž- fail-mode - āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ…āĻ°ā§āĻĨ āĻŦā§‹āĻā§‡:

  • IgnoreAndContinueDeployProcess — āφāĻŽāϰāĻž āĻāχ āωāĻĒāĻžāĻĻāĻžāύāϟāĻŋ āϰ⧋āϞ āφāωāϟ āĻ•āϰāĻžāϰ āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞāĻŋ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāύāĻž āϚāĻžāϞāĻŋāϝāĻŧ⧇ āϝāĻžāχ;
  • FailWholeDeployProcessImmediately — āĻāχ āωāĻĒāĻžāĻĻāĻžāύāϟāĻŋāϤ⧇ āĻāĻ•āϟāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāύāĻž āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧ;
  • HopeUntilEndOfDeployProcess — āφāĻŽāϰāĻž āφāĻļāĻž āĻ•āϰāĻŋ āϝ⧇ āĻāχ āωāĻĒāĻžāĻĻāĻžāύāϟāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āĻļ⧇āώ⧇ āĻ•āĻžāϜ āĻ•āϰāĻŦ⧇āĨ¤

āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϏāĻŽā§āĻĒāĻĻ āĻāĻŦāĻ‚ āĻŸā§€āĻ•āĻž āĻŽāĻžāύ āĻāχ āϏāĻŽāĻ¨ā§āĻŦāϝāĻŧ fail-mode:

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

āϝāĻ–āύ āφāĻŽāϰāĻž āĻĒā§āϰāĻĨāĻŽāĻŦāĻžāϰ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻŋ, āϤāĻ–āύ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ (MongoDB) āĻāĻ–āύāĻ“ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āύāĻžāĻ“ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ - āĻ¸ā§āĻĨāĻžāĻĒāύāĻž āĻŦā§āϝāĻ°ā§āĻĨ āĻšāĻŦ⧇āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻĒāύāĻŋ āĻāϟāĻŋ āĻļ⧁āϰ⧁ āĻšāĻ“āϝāĻŧāĻžāϰ āϜāĻ¨ā§āϝ āĻŽā§āĻšā§āĻ°ā§āϤ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāύāĻž āĻāĻ–āύāĻ“ āϏāĻžā§āϚāĻžāϞāĻŋāϤ āĻšāĻŦ⧇āĨ¤

werf-āĻ kubedog-āĻāϰ āϜāĻ¨ā§āϝ āφāϰāĻ“ āĻĻ⧁āϟāĻŋ āĻŸā§€āĻ•āĻž āφāϛ⧇:

  • failures-allowed-per-replica - āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϰāϤāĻŋāϰ⧂āĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āĻĢāϞāϏ āϏāĻ‚āĻ–ā§āϝāĻž;
  • show-logs-until — āϝāϤāĻ•ā§āώāĻŖ āύāĻž werf āϏāĻŽāĻ¸ā§āϤ āϰ⧋āϞ āφāωāϟ āĻĒāĻĄ āĻĨ⧇āϕ⧇ āϞāĻ— āĻĻ⧇āĻ–āĻžāϝāĻŧ (stdout-āĻ) āϏ⧇āχ āĻŽā§āĻšā§‚āĻ°ā§āϤāϟāĻŋāϕ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰ⧇⧎ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻšāϝāĻŧ PodIsReady (āĻĒāĻĄā§‡ āĻŸā§āĻ°ā§āϝāĻžāĻĢāĻŋāĻ• āφāϏāϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰāϞ⧇ āφāĻŽāϰāĻž āϏāĻŽā§āĻ­āĻŦāϤ āϚāĻžāχ āύāĻž āĻāĻŽāύ āĻŦāĻžāĻ°ā§āϤāĻžāϗ⧁āϞāĻŋāϕ⧇ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ), āϤāĻŦ⧇ āĻŽāĻžāύāϗ⧁āϞāĻŋāĻ“ āĻŦ⧈āϧ: ControllerIsReady и EndOfDeploy.

āφāĻŽāϰāĻž āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āĻĨ⧇āϕ⧇ āφāϰ āĻ•āĻŋ āϚāĻžāχ?

āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āĻŦāĻ°ā§āĻŖāĻŋāϤ āĻĻ⧁āϟāĻŋ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āφāĻŽāϰāĻž āϚāĻžāχ:

  • āĻĻ⧇āĻ–āϤ⧇ āϞāĻ— - āĻāĻŦāĻ‚ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϗ⧁āϞāĻŋ, āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āϏāĻžāϰāĻŋāϤ⧇ āϏāĻŦāĻ•āĻŋāϛ⧁ āύāϝāĻŧ;
  • āĻŸā§āĻ°ā§āϝāĻžāĻ• āωāĻ¨ā§āύāϤāĻŋ, āĻ•āĻžāϰāĻŖ āϝāĻĻāĻŋ āĻ•āĻžāϜāϟāĻŋ āĻ•āϝāĻŧ⧇āĻ• āĻŽāĻŋāύāĻŋāĻŸā§‡āϰ āϜāĻ¨ā§āϝ "āύāĻŋāσāĻļāĻŦā§āĻĻ⧇" āĻā§āϞ⧇ āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āϏ⧇āĻ–āĻžāύ⧇ āϕ⧀ āϘāϟāϛ⧇ āϤāĻž āĻŦā§‹āĻāĻž āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ;
  • иĐŧĐĩŅ‚ŅŒ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āϰ⧋āϞāĻŦā§āϝāĻžāĻ• āϝāĻĻāĻŋ āĻ•āĻŋāϛ⧁ āϭ⧁āϞ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ (āĻāĻŦāĻ‚ āϤāĻžāχ āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•ā§ƒāϤ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āϜāĻžāύāĻž āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ)āĨ¤ āϰ⧋āϞāφāωāϟāϟāĻŋ āĻ…āĻŦāĻļā§āϝāχ āĻĒāĻžāϰāĻŽāĻžāĻŖāĻŦāĻŋāĻ• āĻšāϤ⧇ āĻšāĻŦ⧇: āĻšāϝāĻŧ āĻāϟāĻŋ āĻļ⧇āώ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϝāĻžāϝāĻŧ āĻŦāĻž āϏāĻŦāĻ•āĻŋāϛ⧁ āϤāĻžāϰ āφāϗ⧇āϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āĻĢāĻŋāϰ⧇ āφāϏ⧇āĨ¤

āĻĢāϞāĻžāĻĢāϞ

āĻāĻ•āϟāĻŋ āϕ⧋āĻŽā§āĻĒāĻžāύāĻŋ āĻšāĻŋāϏāĻžāĻŦ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āϜāĻ¨ā§āϝ, āĻĄā§‡āϞāĻŋāĻ­āĻžāϰāĻŋāϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ (āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ, āĻĒā§āϰāĻ•āĻžāĻļ, āĻ¸ā§āĻĨāĻžāĻĒāύ) āϏāĻŽāĻ¸ā§āϤ āĻŦāĻ°ā§āĻŖāĻŋāϤ āϏ⧂āĻ•ā§āĻˇā§āĻŽāϤāĻž āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ⧇āϰ āϜāĻ¨ā§āϝ, āĻāĻ•āϟāĻŋ CI āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻāĻŦāĻ‚ āχāωāϟāĻŋāϞāĻŋāϟāĻŋ āϝāĻĨ⧇āĻˇā§āϟ werf.

āĻāĻ•āϟāĻŋ āωāĻĒāϏāĻ‚āĻšāĻžāϰ⧇āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇:

werf - Kubernetes-āĻ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰ āϟ⧁āϞ (āĻ“āĻ­āĻžāϰāĻ­āĻŋāω āĻāĻŦāĻ‚ āĻ­āĻŋāĻĄāĻŋāĻ“ āϰāĻŋāĻĒā§‹āĻ°ā§āϟ)

werf-āĻāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇, āφāĻŽāϰāĻž DevOps āχāĻžā§āϜāĻŋāύāĻŋāϝāĻŧāĻžāϰāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϚ⧁āϰ āϏāĻ‚āĻ–ā§āϝāĻ• āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ⧇ āĻ­āĻžāϞ āĻ…āĻ—ā§āϰāĻ—āϤāĻŋ āĻ•āϰ⧇āĻ›āĻŋ āĻāĻŦāĻ‚ āϝāĻĻāĻŋ āĻŦ⧃āĻšāĻ¤ā§āϤāϰ āϏāĻŽā§āĻĒā§āϰāĻĻāĻžāϝāĻŧ āĻ…āĻ¨ā§āϤāϤāĻĒāĻ•ā§āώ⧇ āĻāχ āχāωāϟāĻŋāϞāĻŋāϟāĻŋāϟāĻŋ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇ āϤāĻŦ⧇ āϖ⧁āĻļāĻŋ āĻšāĻŦāĨ¤ āĻāĻ•āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āĻĢāϞāĻžāĻĢāϞ āĻ…āĻ°ā§āϜāύ āĻ•āϰāĻž āϏāĻšāϜ āĻšāĻŦ⧇āĨ¤

āĻ­āĻŋāĻĄāĻŋāĻ“ āĻāĻŦāĻ‚ āĻ¸ā§āϞāĻžāχāĻĄ

āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āĻĨ⧇āϕ⧇ āĻ­āĻŋāĻĄāĻŋāĻ“ (~47 āĻŽāĻŋāύāĻŋāϟ):

āĻ­āĻŋāĻĄāĻŋāĻ“ āĻĻ⧇āĻ–āĻžāĻ“

āĻĒā§āϰāϤāĻŋāĻŦ⧇āĻĻāύ⧇āϰ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύāĻž:

āĻĻā§āϰāĻˇā§āϟāĻŦā§āϝ

āφāĻŽāĻžāĻĻ⧇āϰ āĻŦā§āϞāϗ⧇ āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĒā§āϰāϤāĻŋāĻŦ⧇āĻĻāύ:

āωāĻ¤ā§āϏ: www.habr.com

āĻāĻ•āϟāĻŋ āĻŽāĻ¨ā§āϤāĻŦā§āϝ āϜ⧁āĻĄāĻŧ⧁āύ