āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϝ⧁āĻ•ā§āϤ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āϏāĻžāχāĻŸā§‡āϰ āωāĻĻāĻžāĻšāϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ• āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻŋ āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜ āĻ“āϝāĻŧāĻžāϰāĻĢ⧇āϰ āϏāĻžāĻĨ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύ

āφāĻŽāϰāĻž āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āφāĻŽāĻžāĻĻ⧇āϰ GitOps āϟ⧁āϞ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻāĻ•āĻžāϧāĻŋāĻ•āĻŦāĻžāϰ āĻ•āĻĨāĻž āĻŦāϞ⧇āĻ›āĻŋāĨ¤ werf, āĻāĻŦāĻ‚ āĻāχ āϏāĻŽāϝāĻŧ āφāĻŽāϰāĻž āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻžāχāϟāϟāĻŋ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻžāϰ āφāĻŽāĻžāĻĻ⧇āϰ āĻ…āĻ­āĻŋāĻœā§āĻžāϤāĻž āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāχ - werf.io (āĻāϰ āϰāĻžāĻļāĻŋāϝāĻŧāĻžāύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ en.werf.io) āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ• āϏāĻžāχāϟ, āϤāĻŦ⧇ āĻāϰ āϏāĻŽāĻžāĻŦ⧇āĻļāϟāĻŋ āφāĻ•āĻ°ā§āώāĻŖā§€āϝāĻŧ āϝ⧇ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ—āϤāĻŋāĻļā§€āϞ āϏāĻ‚āĻ–ā§āϝāĻ• āύāĻŋāĻĻāĻ°ā§āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āύāĻŋāĻ°ā§āĻŽāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϝ⧁āĻ•ā§āϤ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āϏāĻžāχāĻŸā§‡āϰ āωāĻĻāĻžāĻšāϰāĻŖ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĄāĻžāχāύāĻžāĻŽāĻŋāĻ• āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻŋ āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜ āĻ“āϝāĻŧāĻžāϰāĻĢ⧇āϰ āϏāĻžāĻĨ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύ

āϏāĻžāχāĻŸā§‡āϰ āĻ•āĻžāĻ āĻžāĻŽā§‹āϰ āϏ⧂āĻ•ā§āĻˇā§āĻŽāϤāĻžāϗ⧁āϞāĻŋāϤ⧇ āϝāĻžāύ: āϏāĻŽāĻ¸ā§āϤ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻŽā§‡āύ⧁ āϤ⧈āϰāĻŋ āĻ•āϰāĻž, āϰāĻŋāϞāĻŋāϜ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻĨā§āϝ āϏāĻš āĻĒ⧃āĻˇā§āĻ āĻžāϗ⧁āϞāĻŋ āχāĻ¤ā§āϝāĻžāĻĻāĻŋāĨ¤ - āφāĻŽāϰāĻž āĻ•āϰāĻŦā§‹ āύāĻžāĨ¤ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇, āφāϏ⧁āύ āĻĄāĻžāϝāĻŧāύāĻžāĻŽāĻŋāĻ• āϏāĻŽāĻžāĻŦ⧇āĻļ⧇āϰ āϏāĻŽāĻ¸ā§āϝāĻž āĻāĻŦāĻ‚ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻāĻŦāĻ‚ āϏāĻšāĻ—āĻžāĻŽā§€ CI/CD āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϗ⧁āϞāĻŋāϰ āωāĻĒāϰ āĻāĻ•āϟ⧁ āĻĢā§‹āĻ•āĻžāϏ āĻ•āϰāĻŋāĨ¤

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž: āϏāĻžāχāϟ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇

āĻļ⧁āϰ⧁āϤ⧇, werf āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻāϰ āϕ⧋āĻĄ āϏāĻš āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻ•āĻŋāϛ⧁ āωāĻ¨ā§āύāϝāĻŧāύ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āφāϰ⧋āĻĒ āĻ•āϰ⧇ āϝāĻž āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧ⧇āϰ āϏ⧁āϝ⧋āϗ⧇āϰ āĻŦāĻžāχāϰ⧇, āϤāĻŦ⧇ āϏāĻ°ā§āĻŦāύāĻŋāĻŽā§āύāĻ­āĻžāĻŦ⧇ āĻāϟāĻŋ āĻŦāϞāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇ āϝ⧇:

  • āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āφāĻĒāĻĄā§‡āϟ āύāĻž āĻ•āϰ⧇ āύāϤ⧁āύ āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ āĻĢāĻžāĻ‚āĻļāύ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž āωāϚāĻŋāϤ āύāϝāĻŧ āĻāĻŦāĻ‚ āĻŦāĻŋāĻĒāϰ⧀āϤāĻ­āĻžāĻŦ⧇, āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇ āϝ⧇ āϕ⧋āύ⧋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ“āϝāĻŧāĻžāϰāĻĢ⧇āϰ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒā§āϰāĻ•āĻžāĻļāϕ⧇ āĻŦā§‹āĻāĻžāϝāĻŧ;
  • āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āĻāĻ•āϟāĻŋ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āύāĻŋāĻŦāĻŋāĻĄāĻŧ āωāĻ¨ā§āύāϝāĻŧāύ āφāϛ⧇: āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϗ⧁āϞāĻŋ āĻĻāĻŋāύ⧇ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āĻŦāĻžāϰ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇;
  • āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇āϰ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϏāĻš āĻāĻ•āϟāĻŋ āϏāĻžāχāϟ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϝ⧇ āϕ⧋āύ⧋ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āĻ…āĻ¨ā§āϤāϤ āĻ•ā§āϞāĻžāĻ¨ā§āϤāĻŋāĻ•āϰ;
  • āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϟāĻŋ āĻāĻ•āϟāĻŋ āĻļāĻŦā§āĻĻāĻžāĻ°ā§āĻĨāĻŋāĻ• āĻĒāĻĻā§āϧāϤāĻŋ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ, 5āϟāĻŋ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞāϤāĻž āĻšā§āϝāĻžāύ⧇āϞ āϏāĻšāĨ¤ āϰāĻŋāϞāĻŋāϜ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϝāĻŧ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞāϤāĻž āĻŦ⧃āĻĻā§āϧāĻŋāϰ āϜāĻ¨ā§āϝ āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āĻ…āύ⧁āĻ•ā§āϰāĻŽāĻŋāĻ• āωāĻ¤ā§āϤāϰāĻŖ āϜāĻĄāĻŧāĻŋāϤ: āφāϞāĻĢāĻž āĻĨ⧇āϕ⧇ āϰāĻ•-āϏāϞāĻŋāĻĄ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ;
  • āϏāĻžāχāĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āϰāĻžāĻļāĻŋāϝāĻŧāĻžāύ-āĻ­āĻžāώāĻž āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϰāϝāĻŧ⧇āϛ⧇, āϝāĻž āĻĒā§āϰāϧāĻžāύ (āĻ…āĻ°ā§āĻĨāĻžā§Ž, āχāĻ‚āϰ⧇āϜāĻŋ-āĻ­āĻžāώāĻž) āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϏāĻŽāĻžāĻ¨ā§āϤāϰāĻžāϞ⧇ "āĻŦāĻžāρāĻšā§‡ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ•āĻžāĻļ āĻ•āϰ⧇" (āĻ…āĻ°ā§āĻĨāĻžā§Ž, āϝāĻžāϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻšāϝāĻŧ)āĨ¤

āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āĻ•āĻžāĻ› āĻĨ⧇āϕ⧇ āĻāχ āϏāĻŽāĻ¸ā§āϤ "āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āϰāĻžāĻ¨ā§āύāĻžāϘāϰ" āϞ⧁āĻ•āĻžāύ⧋āϰ āϜāĻ¨ā§āϝ, āϤāĻžāϕ⧇ āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āĻ…āĻĢāĻžāϰ āĻ•āϰ⧇ āϝāĻž "āĻļ⧁āϧ⧁ āĻ•āĻžāϜ āĻ•āϰ⧇", āφāĻŽāϰāĻž āϤāĻž āĻ•āϰ⧇āĻ›āĻŋ āĻĒ⧃āĻĨāĻ• āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ āχāύāĻ¸ā§āϟāϞ⧇āĻļāύ āĻāĻŦāĻ‚ āφāĻĒāĻĄā§‡āϟ āϟ⧁āϞ - āĻāϟāĻž āĻŽāĻžāĻ˛ā§āϟāĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ. āφāĻĒāύāĻžāϕ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϰāĻŋāϞāĻŋāϜ āύāĻŽā§āĻŦāϰ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞāϤāĻž āĻšā§āϝāĻžāύ⧇āϞāϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āϝāĻž āφāĻĒāύāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ, āĻāĻŦāĻ‚ āĻŽāĻžāĻ˛ā§āϟāĻŋāĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ āĻšā§āϝāĻžāύ⧇āϞ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āφāϛ⧇ āĻ•āĻŋāύāĻž āϤāĻž āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻŦ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧇ āĻāϟāĻŋ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāĻŦ⧇āĨ¤

āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāĻŸā§‡ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻŽā§‡āύ⧁āϤ⧇, werf-āĻāϰ āϏāĻ°ā§āĻŦāĻļ⧇āώ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϗ⧁āϞāĻŋ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻšā§āϝāĻžāύ⧇āϞ⧇ āωāĻĒāϞāĻŦā§āϧāĨ¤ āĻĄāĻŋāĻĢāĻ˛ā§āϟāϰ⧂āĻĒ⧇, āĻ āĻŋāĻ•āĻžāύāĻž āĻĻā§āĻŦāĻžāϰāĻž werf.io/documentation āϏāĻ°ā§āĻŦāĻļ⧇āώ āĻĒā§āϰāĻ•āĻžāĻļ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϟāĻŋ āĻ–ā§‹āϞ⧇ - āĻāϟāĻŋ āϏāĻžāĻ°ā§āϚ āχāĻžā§āϜāĻŋāύ āĻĻā§āĻŦāĻžāϰāĻžāĻ“ āϏ⧂āϚāĻŋāϤ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤ āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āϜāĻ¨ā§āϝ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āφāϞāĻžāĻĻāĻž āĻ āĻŋāĻ•āĻžāύāĻžāϝāĻŧ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ (āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, werf.io/v1.0-beta/documentation āĻŦāĻŋāϟāĻž āϰāĻŋāϞāĻŋāĻœā§‡āϰ āϜāĻ¨ā§āϝ 1.0)āĨ¤

āĻŽā§‹āϟ, āϏāĻžāχāĻŸā§‡ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āωāĻĒāϞāĻŦā§āϧ āφāϛ⧇:

  1. āϰ⧁āϟ (āĻĄāĻŋāĻĢāĻ˛ā§āϟāϰ⧂āĻĒ⧇ āĻ–ā§‹āϞ⧇),
  2. āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰāĻŋāϞāĻŋāĻœā§‡āϰ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āφāĻĒāĻĄā§‡āϟ āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āϜāĻ¨ā§āϝ (āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, werf.io/v1.0-āĻŦāĻŋāϟāĻž).

āĻāĻ•āϟāĻŋ āϏāĻžāχāĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇, āϏāĻžāϧāĻžāϰāĻŖāĻ­āĻžāĻŦ⧇, āĻāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻž āϝāĻĨ⧇āĻˇā§āϟ JekyllāĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϤ⧇ āϚāĻžāϞāĻžāύ⧋āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ /docs werf āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ (jekyll build), āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āĻ—āĻŋāϟ āĻŸā§āϝāĻžāϗ⧇ āĻ¸ā§āϝ⧁āχāϚ āĻ•āϰāĻžāϰ āĻĒāϰ⧇āĨ¤

āĻāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ…āĻŦāĻļ⧇āώ:

  • āχāωāϟāĻŋāϞāĻŋāϟāĻŋ āύāĻŋāĻœā§‡āχ (āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ) āϏāĻŽāĻžāĻŦ⧇āĻļ⧇āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧ;
  • āϏāĻŋāφāχ/āϏāĻŋāĻĄāĻŋ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϗ⧁āϞāĻŋ āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ āϏāĻŋāφāχ-āĻāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ;
  • āĻāĻŦāĻ‚ āĻāχ āϏāĻŦ, āĻ…āĻŦāĻļā§āϝāχ, Kubernetes āϚāϞ⧇.

āĻ•āĻ°ā§āĻŽ

āĻāĻ–āύ āφāϏ⧁āύ āĻāĻŽāύ āĻ•āĻžāϜāϗ⧁āϞāĻŋ āĻĒā§āϰāĻŖāϝāĻŧāύ āĻ•āϰāĻŋ āϝāĻž āϏāĻŽāĻ¸ā§āϤ āĻŦāĻ°ā§āĻŖāĻŋāϤ āϏ⧁āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŦāĻŋāώāϝāĻŧāϗ⧁āϞāĻŋāϕ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧇:

  1. āϝ⧇āϕ⧋āύ⧋ āφāĻĒāĻĄā§‡āϟ āĻšā§āϝāĻžāύ⧇āϞ⧇ werf āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āĻĒāϰ āϏāĻžāχāĻŸā§‡ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āωāϚāĻŋāϤ.
  2. āωāĻ¨ā§āύāϝāĻŧāύ⧇āϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϕ⧇ āĻŽāĻžāĻā§‡ āĻŽāĻžāĻā§‡ āϏāĻ•ā§āώāĻŽ āĻšāϤ⧇ āĻšāĻŦ⧇ āϏāĻžāχāĻŸā§‡āϰ āĻĒā§‚āĻ°ā§āĻŦāϰ⧂āĻĒ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĻ⧇āϖ⧁āύ.

āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻ—āĻŋāϟ āĻŸā§āϝāĻžāĻ—āϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇ āϝ⧇ āϕ⧋āύāĻ“ āĻšā§āϝāĻžāύ⧇āϞ⧇ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇ āϏāĻžāχāϟāϟāĻŋ āĻ…āĻŦāĻļā§āϝāχ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻž āωāϚāĻŋāϤ, āϤāĻŦ⧇ āϚāĻŋāĻ¤ā§āϰāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϤ⧇ āφāĻŽāϰāĻž āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϗ⧁āϞāĻŋ āĻĒāĻžāĻŦ:

  • āϝ⧇āĻšā§‡āϤ⧁ āĻšā§āϝāĻžāύ⧇āϞāϗ⧁āϞāĻŋāϰ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϗ⧁āϞāĻŋāϰ āϤāĻžāϞāĻŋāĻ•āĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϝāĻŧ, āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϏ⧇āχ āĻšā§āϝāĻžāύ⧇āϞāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻĒ⧁āύāĻ°ā§āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āϰāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ āϝ⧇āĻ–āĻžāύ⧇ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϝāĻŧ⧇āϛ⧇⧎ āϏāĻŦ āĻĒāϰ⧇, āφāĻŦāĻžāϰ āϏāĻŦāĻ•āĻŋāϛ⧁ āĻĒ⧁āύāĻ°ā§āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āϖ⧁āĻŦ āϏ⧁āĻ¨ā§āĻĻāϰ āύāϝāĻŧāĨ¤
  • āϰāĻŋāϞāĻŋāĻœā§‡āϰ āϜāĻ¨ā§āϝ āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āϏ⧇āϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻ•āĻŋāϛ⧁ āϏāĻŽāϝāĻŧ⧇, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻšā§āϝāĻžāύ⧇āϞāϗ⧁āϞāĻŋāϤ⧇ āĻĒā§āϰāĻžāϰāĻŽā§āĻ­āĻŋāĻ•-āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ 1.1 āϰāĻŋāϞāĻŋāĻœā§‡āϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āύāĻžāĻ“ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇, āϤāĻŦ⧇ āϏāĻŽāϝāĻŧ⧇āϰ āϏāĻžāĻĨ⧇ āϏāĻžāĻĨ⧇ āϏ⧇āϗ⧁āϞāĻŋ āωāĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻšāĻŦ⧇ - āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āφāĻĒāύāĻžāϰ āĻ•āĻŋ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āϏāĻŽāĻžāĻŦ⧇āĻļ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻž āωāϚāĻŋāϤ āύāϝāĻŧ?

āĻāϟāĻž āϝ⧇ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āφāωāϟ āϏāĻŽāĻžāĻŦ⧇āĻļ āĻŦāĻšāĻŋāϰāĻžāĻ—āϤ āĻĄā§‡āϟāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇.

āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ

āĻāĻ•āϟāĻŋ āĻĒāĻĻā§āϧāϤāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ

āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻ­āĻžāĻŦ⧇, āφāĻĒāύāĻŋ Kubernetes-āĻ āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ• āĻĒāĻĄ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāχ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāϟāĻŋ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ⧇ āĻāĻ•āϟāĻŋ āĻŦ⧃āĻšāĻ¤ā§āϤāϰ āϏāĻ‚āĻ–ā§āϝāĻ• āĻŦāĻ¸ā§āϤ⧁āϕ⧇ āĻŦā§‹āĻāĻžāϝāĻŧ, āϝāĻž āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ āϰāĻŋāϞāĻŋāĻœā§‡āϰ āϏāĻ‚āĻ–ā§āϝāĻž āĻŦ⧃āĻĻā§āϧāĻŋāϰ āϏāĻžāĻĨ⧇ āĻŦ⧃āĻĻā§āϧāĻŋ āĻĒāĻžāĻŦ⧇āĨ¤ āĻāĻŦāĻ‚ āĻāϟāĻŋ, āϘ⧁āϰ⧇, āφāϰāĻ“ āϜāϟāĻŋāϞ āϰāĻ•ā§āώāĻŖāĻžāĻŦ⧇āĻ•ā§āώāĻŖ āĻŦā§‹āĻāĻžāϝāĻŧ: āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āύāĻŋāϜāĻ¸ā§āĻŦ HTTP āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϰāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āϞ⧋āĻĄ āϏāĻšāĨ¤ āĻ…āĻŦāĻļā§āϝāχ, āĻāϟāĻŋ āĻŦ⧃āĻšāĻ¤ā§āϤāϰ āϏāĻŽā§āĻĒāĻĻ āĻ–āϰāϚ entails.

āφāĻŽāϰāĻž āĻāĻ•āχ āĻĒāĻĨ āϧāϰāϞāĻžāĻŽ āĻāĻ•āϟāĻŋ āĻ›āĻŦāĻŋāϤ⧇ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏāĻŽāĻ¸ā§āϤ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻž. āϏāĻžāχāĻŸā§‡āϰ āϏāĻŽāĻ¸ā§āϤ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϏāĻ‚āĻ•āϞāĻŋāϤ āĻĒāϰāĻŋāϏāĻ‚āĻ–ā§āϝāĻžāύ āĻāύāϜāĻŋāφāχāĻāύāĻāĻ•ā§āϏ āϏāĻš āĻāĻ•āϟāĻŋ āĻĒāĻžāĻ¤ā§āϰ⧇ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāϤ āĻāĻŦāĻ‚ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϝāĻŧ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āĻāύāϜāĻŋāφāχāĻāύāĻāĻ•ā§āϏ āĻĒā§āϰāĻŦ⧇āĻļ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āφāϏ⧇āĨ¤ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻ•āĻžāĻ āĻžāĻŽā§‹ - āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§‡āϟāϞ⧇āϏ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ - āφāĻĒāύāĻžāϕ⧇ āϕ⧁āĻŦāĻžāϰāύ⧇āϟāϏ āύāĻŋāĻœā§‡āχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϏāĻšāĻœā§‡āχ āĻ¸ā§āĻĨāĻžāĻĒāύāĻž (āϞ⧋āĻĄā§‡āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇) āĻ¸ā§āϕ⧇āϞ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤

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

āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ āĻŦāύāĻžāĻŽ āĻ—āĻŋāϟ āĻ•ā§āϞ⧋āύ āĻāĻŦāĻ‚ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟāϏ

āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āωāĻ˛ā§āϞāĻŋāĻ–āĻŋāϤ āĻšāĻŋāϏāĻžāĻŦ⧇, āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ⧇āϰ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻžāχāϟ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ•ā§āϏ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻžāϕ⧇ āωāĻĒāϝ⧁āĻ•ā§āϤ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āĻŸā§āϝāĻžāϗ⧇ āĻ¸ā§āϝ⧁āχāϚ āĻ•āϰ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āĻĨ⧇āϕ⧇ āωāĻĒāϝ⧁āĻ•ā§āϤ āĻŸā§āϝāĻžāĻ— āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰ⧇ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āĻ•ā§āϞ⧋āύ āĻ•āϰ⧇āĻ“ āĻāϟāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻŦāϰāĻ‚ āϏāĻŽā§āĻĒāĻĻ-āύāĻŋāĻŦāĻŋāĻĄāĻŧ āĻ…āĻĒāĻžāϰ⧇āĻļāύ āĻāĻŦāĻ‚ āϤāĻĻā§āĻŦā§āϝāϤ⧀āϤ, āĻ…-āϤ⧁āĻšā§āĻ› āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻžāĻŦāϞ⧀ āϞ⧇āĻ–āĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ... āφāϰ⧇āĻ•āϟāĻŋ āϗ⧁āϰ⧁āϤāϰ āĻ…āϏ⧁āĻŦāĻŋāϧāĻž āĻšāϞ āϝ⧇ āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āϏāĻŽāĻžāĻŦ⧇āĻļ⧇āϰ āϏāĻŽāϝāĻŧ āĻ•āĻŋāϛ⧁ āĻ•ā§āϝāĻžāĻļ⧇ āĻ•āϰāĻžāϰ āϕ⧋āύ āωāĻĒāĻžāϝāĻŧ āύ⧇āχāĨ¤

āĻāĻ–āĻžāύ⧇ werf āχāωāϟāĻŋāϞāĻŋāϟāĻŋ āύāĻŋāĻœā§‡āχ āφāĻŽāĻžāĻĻ⧇āϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇ āφāϏ⧇, āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰ⧇ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āĻ•ā§āϝāĻžāĻļāĻŋāĻ‚ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ. āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āĻĨ⧇āϕ⧇ āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ werf āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝāĻ­āĻžāĻŦ⧇ āĻŦāĻŋāĻ˛ā§āĻĄā§‡āϰ āĻ—āϤāĻŋ āĻŦāĻžāĻĄāĻŧāĻžāĻŦ⧇, āĻ•āĻžāϰāĻŖ werf āĻŽā§‚āϞāϤ āĻāĻ•āĻŦāĻžāϰ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āĻ•ā§āϞ⧋āύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻ•āϰ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ fetch āϝāĻĻāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ āϤāĻžāĻšāϞ⧇āĨ¤ āωāĻĒāϰāĻ¨ā§āϤ⧁, āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āĻĨ⧇āϕ⧇ āϤāĻĨā§āϝ āϝ⧋āĻ— āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āφāĻŽāϰāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ (āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāϟāĻŋ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ docs), āϝāĻž āϝ⧋āĻ— āĻ•āϰāĻž āĻĄā§‡āϟāĻžāϰ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝāĻ­āĻžāĻŦ⧇ āĻšā§āϰāĻžāϏ āĻ•āϰāĻŦ⧇āĨ¤

āϝ⧇āĻšā§‡āϤ⧁ āĻœā§‡āĻ•āĻŋāϞ āĻāĻ•āϟāĻŋ āϟ⧁āϞ āϝāĻž āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ• āĻĄā§‡āϟāĻž āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āĻ›āĻŦāĻŋāϤ⧇ āĻāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ, āϤāĻžāχ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻž āϝ⧌āĻ•ā§āϤāĻŋāĻ• āĻšāĻŦ⧇ werf artifact, āĻāĻŦāĻ‚ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āϚāĻŋāĻ¤ā§āϰ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϏāĻ‚āĻ•āϞāύ⧇āϰ āĻĢāϞāĻžāĻĢāϞ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰ⧁āύ.

āφāĻŽāϰāĻž werf.yaml āϞāĻŋāĻ–āĻŋ

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

werf āφāĻĒāύāĻžāϕ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āϝāĻžāύ āφāĻĒāύāĻžāϰ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĢāĻžāχāϞ⧇ (werf.yaml), āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻāϟāĻŋ āϏāĻŽā§āĻ­āĻŦ āĻ•āϰ⧇ āϤ⧋āϞ⧇ āĻĢā§āϞāĻžāχāϤ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āĻĄā§‡āϟāĻžāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ (āφāĻĒāύāĻžāϰ āϝāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ!) āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āĻĄā§‡āϟāĻž āĻšāϞ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻāĻŦāĻ‚ āϰāĻŋāϞāĻŋāϜ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϤāĻĨā§āϝ, āϝāĻžāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋāϤ⧇ āφāĻŽāϰāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏāĻ‚āĻ–ā§āϝāĻ• āύāĻŋāĻĻāĻ°ā§āĻļāύ āϏāĻ‚āĻ—ā§āϰāĻš āĻ•āϰāĻŋ āĻāĻŦāĻ‚ āĻĢāϞāĻ¸ā§āĻŦāϰ⧂āĻĒ āφāĻŽāϰāĻž āĻĻ⧁āϟāĻŋ āϚāĻŋāĻ¤ā§āϰ āĻĒāĻžāχ: werf-doc и werf-dev āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āϏāĻžāĻ°ā§āĻ•āĻŋāĻŸā§‡ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝāĨ¤

āĻŦāĻžāĻšā§āϝāĻŋāĻ• āϤāĻĨā§āϝ āĻĒāϰāĻŋāĻŦ⧇āĻļ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒāĻžāϏ āĻ•āϰāĻž āĻšāϝāĻŧ. āĻāĻ–āĻžāύ⧇ āϤāĻžāĻĻ⧇āϰ āϰāϚāύāĻž:

  • RELEASES — āϰāĻŋāϞāĻŋāϜāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āĻāĻŦāĻ‚ werf āĻāϰ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϏāĻš āĻāĻ•āϟāĻŋ āϞāĻžāχāύ, āĻŦāĻŋāĻ¨ā§āϝāĻžāϏ⧇ āĻŽāĻžāύāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻžāύ-āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āϤāĻžāϞāĻŋāĻ•āĻž āφāĻ•āĻžāϰ⧇ <НОМЕР_РЕЛИЗА>%<НОМЕР_ВЕРСИИ>āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖ: 1.0%v1.0.4-beta.20
  • CHANNELS — āĻšā§āϝāĻžāύ⧇āϞāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž āĻāĻŦāĻ‚ werf āĻāϰ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϏāĻš āĻāĻ•āϟāĻŋ āϞāĻžāχāύ, āĻŦāĻŋāĻ¨ā§āϝāĻžāϏ⧇ āĻŽāĻžāύāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻžāύ-āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āύ āϤāĻžāϞāĻŋāĻ•āĻž āφāĻ•āĻžāϰ⧇ <КАНАЛ>%<НОМЕР_ВЕРСИИ>āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖ: 1.0-beta%v1.0.4-beta.20 1.0-alpha%v1.0.5-alpha.22
  • ROOT_VERSION — werf āϰāĻŋāϞāĻŋāϜ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϏāĻžāχāĻŸā§‡ āĻĄāĻŋāĻĢāĻ˛ā§āϟāϰ⧂āĻĒ⧇ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšāĻŦ⧇ (āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ āϰāĻŋāϞāĻŋāϜ āϏāĻ‚āĻ–ā§āϝāĻž āĻĻā§āĻŦāĻžāϰāĻž āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āĻ•āϰāĻž āϏāĻ°ā§āĻŦāĻĻāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ āύāĻž)āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖ: v1.0.4-beta.20
  • REVIEW_SHA — āϰāĻŋāĻ­āĻŋāω āĻ•āĻŽāĻŋāĻŸā§‡āϰ āĻšā§āϝāĻžāĻļ āϝāĻž āĻĨ⧇āϕ⧇ āφāĻĒāύāĻžāϕ⧇ āĻŸā§‡āĻ¸ā§āϟ āϞ⧁āĻĒ⧇āϰ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻāχ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞāϗ⧁āϞāĻŋ GitLab CI āĻĒāĻžāχāĻĒāϞāĻžāχāύ⧇ āĻĒā§‚āϰāĻŖ āĻ•āϰāĻž āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻ āĻŋāĻ• āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āύāĻŋāĻšā§‡ āϞ⧇āĻ–āĻž āφāϛ⧇āĨ¤

āĻĒā§āϰāĻĨāĻŽāϤ, āϏ⧁āĻŦāĻŋāϧāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰāĻž āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻŋ werf.yaml āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞāϗ⧁āϞāĻŋāϤ⧇ āϝāĻžāύ, āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇āϰ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āĻĨ⧇āϕ⧇ āϤāĻžāĻĻ⧇āϰ āĻŽāĻžāύ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ:

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

āϏāĻžāχāĻŸā§‡āϰ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ• āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āĻŸā§‡āϰ āĻŦāĻŋāĻŦāϰāĻŖ āϏāĻžāϧāĻžāϰāĻŖāϤ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏāĻŽāĻ¸ā§āϤ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāĻ•āχ āĻšāϝāĻŧ (āϰ⧁āϟ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰāĻž, āϏ⧇āχāϏāĻžāĻĨ⧇ āĻĄā§‡āĻ­ āϏāĻžāĻ°ā§āĻ•āĻŋāĻŸā§‡āϰ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϏāĻš)āĨ¤ āĻ…āϤāĻāĻŦ, āφāĻŽāϰāĻž āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ• āĻŦā§āϞāϕ⧇ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻŦ define - āĻĒāϰāĻŦāĻ°ā§āϤ⧀āϤ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ include. āφāĻŽāϰāĻž āĻŸā§‡āĻŽāĻĒā§āϞ⧇āĻŸā§‡ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āφāĻ°ā§āϗ⧁āĻŽā§‡āĻ¨ā§āϟ āĻĒāĻžāϏ āĻ•āϰāĻŦ:

  • Version — āϤ⧈āϰāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ (āĻŸā§āϝāĻžāĻ— āύāĻžāĻŽ);
  • Channel — āφāĻĒāĻĄā§‡āϟ āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āύāĻžāĻŽ āϝāĻžāϰ āϜāĻ¨ā§āϝ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇;
  • Commit — āĻ•āĻŽāĻŋāϟ āĻšā§āϝāĻžāĻļ, āϝāĻĻāĻŋ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟāϟāĻŋ āϰāĻŋāĻ­āĻŋāω āĻ•āĻŽāĻŋāĻŸā§‡āϰ āϜāĻ¨ā§āϝ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ;
  • āĻĒā§āϰāϏāĻ™ā§āĻ—

āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻŦāĻ°ā§āĻŖāύāĻž

{{- define "doc_artifact" -}}
{{- $Root := index . "Root" -}}
artifact: doc-{{ .Channel }}
from: jekyll/builder:3
mount:
- from: build_dir
  to: /usr/local/bundle
ansible:
  install:
  - shell: |
      export PATH=/usr/jekyll/bin/:$PATH
  - name: "Install Dependencies"
    shell: bundle install
    args:
      executable: /bin/bash
      chdir: /app/docs
  beforeSetup:
{{- if .Commit }}
  - shell: echo "Review SHA - {{ .Commit }}."
{{- end }}
{{- if eq .Channel "root" }}
  - name: "releases.yml HASH: {{ $Root.Files.Get "releases.yml" | sha256sum }}"
    copy:
      content: |
{{ $Root.Files.Get "releases.yml" | indent 8 }}
      dest:  /app/docs/_data/releases.yml
{{- else }}
  - file:
      path: /app/docs/_data/releases.yml
      state: touch
{{- end }}
  - file:
      path: "{{`{{ item }}`}}"
      state: directory
      mode: 0777
    with_items:
    - /app/main_site/
    - /app/ru_site/
  - file:
      dest: /app/docs/pages_ru/cli
      state: link
      src: /app/docs/pages/cli
  - shell: |
      echo -e "werfVersion: {{ .Version }}nwerfChannel: {{ .Channel }}" > /tmp/_config_additional.yml
      export PATH=/usr/jekyll/bin/:$PATH
{{- if and (ne .Version "review") (ne .Channel "root") }}
{{- $_ := set . "BaseURL" ( printf "v%s" .Channel ) }}
{{- else if ne .Channel "root" }}
{{- $_ := set . "BaseURL" .Channel }}
{{- end }}
      jekyll build -s /app/docs  -d /app/_main_site/{{ if .BaseURL }} --baseurl /{{ .BaseURL }}{{ end }} --config /app/docs/_config.yml,/tmp/_config_additional.yml
      jekyll build -s /app/docs  -d /app/_ru_site/{{ if .BaseURL }} --baseurl /{{ .BaseURL }}{{ end }} --config /app/docs/_config.yml,/app/docs/_config_ru.yml,/tmp/_config_additional.yml
    args:
      executable: /bin/bash
      chdir: /app/docs
git:
- url: https://github.com/flant/werf.git
  to: /app/
  owner: jekyll
  group: jekyll
{{- if .Commit }}
  commit: {{ .Commit }}
{{- else }}
  tag: {{ .Version }}
{{- end }}
  stageDependencies:
    install: ['docs/Gemfile','docs/Gemfile.lock']
    beforeSetup: '**/*'
  includePaths: 'docs'
  excludePaths: '**/*.sh'
{{- end }}

āĻļāĻŋāĻ˛ā§āĻĒāĻ•āĻ°ā§āĻŽā§‡āϰ āύāĻžāĻŽ āĻ…āĻŦāĻļā§āϝāχ āĻ…āύāĻ¨ā§āϝ āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤ āφāĻŽāϰāĻž āĻāϟāĻŋ āĻ…āĻ°ā§āϜāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āύāĻžāĻŽ āϝ⧋āĻ— āĻ•āϰ⧇ (āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ āĻŽāĻžāύ .Channel) āĻļāĻŋāĻ˛ā§āĻĒāĻ•āĻ°ā§āĻŽā§‡āϰ āύāĻžāĻŽā§‡āϰ āĻĒā§āϰāĻ¤ā§āϝāϝāĻŧ āĻšāĻŋāϏāĻžāĻŦ⧇: artifact: doc-{{ .Channel }}. āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāĻĒāύāĻžāϕ⧇ āĻŦ⧁āĻāϤ⧇ āĻšāĻŦ⧇ āϝ⧇ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻĨ⧇āϕ⧇ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āχ āύāĻžāĻŽ āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻāĻ•āϟāĻŋ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšāϝāĻŧ: āĻŽāĻžāωāĻ¨ā§āϟ. āĻŽāĻžāωāĻ¨ā§āϟāĻŋāĻ‚ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ build_dir āφāĻĒāύāĻžāϕ⧇ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āϰāĻžāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻœā§‡āĻ•āĻŋāϞ āĻ•ā§āϝāĻžāĻļ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ, āϝāĻž āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝāĻ­āĻžāĻŦ⧇ reassembly āφāĻĒ āĻ—āϤāĻŋ.

āφāĻĒāύāĻŋ āĻĢāĻžāχāϞ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ“ āϞāĻ•ā§āĻˇā§āϝ āĻ•āϰ⧇āϛ⧇āύ releases.yml āĻĨ⧇āϕ⧇ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰāĻž āϰāĻŋāϞāĻŋāϜ āĻĄā§‡āϟāĻž āϏāĻš āĻāĻ•āϟāĻŋ YAML āĻĢāĻžāχāϞ github.com (āĻāĻ•āϟāĻŋ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŽāϝāĻŧ āĻĒā§āϰāĻžāĻĒā§āϤ āĻāĻ•āϟāĻŋ āĻļāĻŋāĻ˛ā§āĻĒāĻ•āĻ°ā§āĻŽ)āĨ¤ āϏāĻžāχāϟāϟāĻŋ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāϟāĻŋ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧ, āϤāĻŦ⧇ āύāĻŋāĻŦāĻ¨ā§āϧ⧇āϰ āĻĒā§āϰāϏāĻ™ā§āϗ⧇ āĻāϟāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻžāϛ⧇ āφāĻ•āĻ°ā§āώāĻŖā§€āϝāĻŧ āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āϤāĻžāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āϟāĻŋ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āĻŸā§‡āϰ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻž — āϏāĻžāχāĻŸā§‡āϰ āϰ⧁āϟ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āĻāĻ•āϟāĻŋ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ (āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻļāĻŋāĻ˛ā§āĻĒāĻ•āĻ°ā§āĻŽā§‡ āĻāϟāĻŋāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχ)āĨ¤

āĻāϟāĻŋ āĻļāĻ°ā§āϤāϏāĻžāĻĒ⧇āĻ•ā§āώ āĻŦāĻŋāĻŦ⧃āϤāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ if āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻāĻŦāĻ‚ āĻĄāĻŋāϜāĻžāχāύ āϝāĻžāύ {{ $Root.Files.Get "releases.yml" | sha256sum }} āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ āĻĒāĻ°ā§āϝāĻžāϝāĻŧāϗ⧁āϞāĻŋ. āĻāϟāĻŋ āύāĻŋāĻŽā§āύāϰ⧂āĻĒ āĻ•āĻžāϜ āĻ•āϰ⧇: āϰ⧁āϟ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ (āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ .Channel āĻšāϝāĻŧ root) āĻĢāĻžāχāϞ āĻšā§āϝāĻžāĻļ releases.yml āĻĒ⧁āϰ⧋ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇āϰ āĻ¸ā§āĻŦāĻžāĻ•ā§āώāϰāϕ⧇ āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āĻ•āϰ⧇, āϝ⧇āĻšā§‡āϤ⧁ āĻāϟāĻŋ āωāĻ¤ā§āϤāϰāϝ⧋āĻ—ā§āϝ āϟāĻžāĻ¸ā§āϕ⧇āϰ āύāĻžāĻŽā§‡āϰ āĻ…āĻ‚āĻļ (āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ name) āĻāχāĻ­āĻžāĻŦ⧇, āϝāĻ–āύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻĢāĻžāχāϞ releases.yml āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻļāĻŋāĻ˛ā§āĻĒāĻ•āĻ°ā§āĻŽ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻāĻ•āĻ¤ā§āϰāĻŋāϤ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤

āĻ…āύ⧁āĻ—ā§āϰāĻš āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āĻŦāĻšāĻŋāϰāĻžāĻ—āϤ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ⧇āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āĻĻāĻŋāϕ⧇āĻ“ āĻŽāύ⧋āϝ⧋āĻ— āĻĻāĻŋāύāĨ¤ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āĻļāĻŋāĻ˛ā§āĻĒāĻ•āĻ°ā§āĻŽā§‡āϰ āĻ›āĻŦāĻŋāϤ⧇ werf āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ, āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ āϝ⧋āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ /docs, āĻāĻŦāĻ‚ āĻĒāĻžāϏ āĻ•āϰāĻž āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋāϗ⧁āϞāĻŋāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇, āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻŸā§āϝāĻžāĻ— āĻŦāĻž āĻĒāĻ°ā§āϝāĻžāϞ⧋āϚāύāĻž āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋāϰ āĻĄā§‡āϟāĻž āĻ…āĻŦāĻŋāϞāĻŽā§āĻŦ⧇ āϝ⧋āĻ— āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āĻšā§āϝāĻžāύ⧇āϞ āĻāĻŦāĻ‚ āϰāĻŋāϞāĻŋāĻœā§‡āϰ āĻ¸ā§āĻĨāĻžāύāĻžāĻ¨ā§āϤāϰāĻŋāϤ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϗ⧁āϞāĻŋāϰ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻŦāϰāĻŖ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇, āφāĻŽāϰāĻž āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ āωāĻĒāϰ āĻāĻ•āϟāĻŋ āϞ⧁āĻĒ āϏāĻ‚āĻ—āĻ āĻŋāϤ āĻ•āϰāĻŋ .WerfVersions в werf.yaml:

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

āĻ•āĻžāϰāĻŖ āϞ⧁āĻĒāϟāĻŋ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āύāĻŋāĻĻāĻ°ā§āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ⧇ (āφāĻŽāϰāĻž āφāĻļāĻž āĻ•āϰāĻŋ), āϤāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻŦāĻŋāĻ­āĻžāϜāĻ•āϟāĻŋ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰāĻž āĻĒā§āϰāϝāĻŧā§‹āϜāύ - āĻ•ā§āϰāĻŽāϟāĻŋ --- (āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĢāĻžāχāϞ āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ, āĻĻ⧇āϖ⧁āύ āĻĄāϕ⧁āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāύ) āĻĒā§‚āĻ°ā§āĻŦ⧇ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āϞ⧁āĻĒ⧇ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻ•āϞ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āφāĻŽāϰāĻž āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ, URL āĻāĻŦāĻ‚ āϰ⧁āϟ āĻĒā§āϰāϏāĻ™ā§āĻ— āĻĒāĻžāϏ āĻ•āϰāĻŋāĨ¤

āĻāĻ•āχāĻ­āĻžāĻŦ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϞ⧁āĻĒ āĻ›āĻžāĻĄāĻŧāĻžāχ, āφāĻŽāϰāĻž āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϕ⧇ "āĻŦāĻŋāĻļ⧇āώ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇" āĻŦāϞāĻŋ: āϰ⧁āϟ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ, āϏ⧇āχāϏāĻžāĻĨ⧇ āĻĒāĻ°ā§āϝāĻžāϞ⧋āϚāύāĻž āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋāϰ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϜāĻ¨ā§āϝ:

{{ dict "Version" .WerfRootVersion "Channel" "root" "Root" $Root  | include "doc_artifact" }}
---
{{- if .WerfReviewCommit }}
{{ dict "Version" "review" "Channel" "review" "Commit" .WerfReviewCommit "Root" $Root  | include "doc_artifact" }}
{{- end }}

āĻ…āύ⧁āĻ—ā§āϰāĻš āĻ•āϰ⧇ āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ āϝ⧇ āϰāĻŋāĻ­āĻŋāω āĻ•āĻŽāĻŋāĻŸā§‡āϰ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϤāĻ–āύāχ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāĻŦ⧇ āϝāĻĻāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞ āϏ⧇āϟ āĻ•āϰāĻž āĻĨāĻžāϕ⧇ .WerfReviewCommit.

āĻļāĻŋāĻ˛ā§āĻĒāĻ•āĻ°ā§āĻŽ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ - āĻāϟāĻŋ āφāĻŽāĻĻāĻžāύāĻŋ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ!

āϕ⧁āĻŦāĻžāϰāύ⧇āĻŸā§‡ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻĄāĻŋāϜāĻžāχāύ āĻ•āϰāĻž āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āϚāĻŋāĻ¤ā§āϰāϟāĻŋ āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĢāĻžāχāϞ āϝ⧁āĻ•ā§āϤ āĻāĻ•āϟāĻŋ āύāĻŋāϝāĻŧāĻŽāĻŋāϤ NGINX nginx.conf āĻāĻŦāĻ‚ āύāĻŋāĻĻāĻ°ā§āĻļāύ āĻĨ⧇āϕ⧇ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ•. āϏāĻžāχāĻŸā§‡āϰ āϰ⧁āϟ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āφāĻŽāĻžāĻĻ⧇āϰ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ āϞ⧁āĻĒāϟāĻŋ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ .WerfVersions āĻšā§āϝāĻžāύ⧇āϞ⧇āϰ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ + āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āύāĻžāĻŽāĻ•āϰāϪ⧇āϰ āύāĻŋāϝāĻŧāĻŽ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧁āύ āϝāĻž āφāĻŽāϰāĻž āφāϗ⧇ āĻ—ā§āϰāĻšāĻŖ āĻ•āϰ⧇āĻ›āĻŋāĨ¤ āϝ⧇āĻšā§‡āϤ⧁ āĻĒā§āϰāϤāĻŋāϟāĻŋ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻĻ⧁āϟāĻŋ āĻ­āĻžāώāĻžāϰ āϜāĻ¨ā§āϝ āϏāĻžāχāĻŸā§‡āϰ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧇, āφāĻŽāϰāĻž āϏ⧇āϗ⧁āϞāĻŋāϕ⧇ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāĻĻāĻ¤ā§āϤ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāĻŋāĨ¤

āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āϚāĻŋāĻ¤ā§āϰ⧇āϰ āĻŦāĻ°ā§āĻŖāύāĻž werf-doc

image: werf-doc
from: nginx:stable-alpine
ansible:
  setup:
  - name: "Setup /etc/nginx/nginx.conf"
    copy:
      content: |
{{ .Files.Get ".werf/nginx.conf" | indent 8 }}
      dest: /etc/nginx/nginx.conf
  - file:
      path: "{{`{{ item }}`}}"
      state: directory
      mode: 0777
    with_items:
    - /app/main_site/assets
    - /app/ru_site/assets
import:
- artifact: doc-root
  add: /app/_main_site
  to: /app/main_site
  before: setup
- artifact: doc-root
  add: /app/_ru_site
  to: /app/ru_site
  before: setup
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
  add: /app/_main_site
  to: /app/main_site/v{{ $Channel }}
  before: setup
{{ end -}}
{{ range .WerfVersions -}}
{{ $VersionsDict := splitn "%" 2 . -}}
{{ $Channel := $VersionsDict._0 -}}
{{ $Version := $VersionsDict._1 -}}
- artifact: doc-{{ $Channel }}
  add: /app/_ru_site
  to: /app/ru_site/v{{ $Channel }}
  before: setup
{{ end -}}

āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϚāĻŋāĻ¤ā§āϰ, āϝāĻž āĻĒā§āϰāϧāĻžāύāϟāĻŋāϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϏāĻžāĻĨ⧇, āĻĄā§‡āĻ­ āϏāĻžāĻ°ā§āĻ•āĻŋāĻŸā§‡ āϞāĻžā§āϚ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āĻāϤ⧇ āϏāĻžāχāĻŸā§‡āϰ āĻŽāĻžāĻ¤ā§āϰ āĻĻ⧁āϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϰāϝāĻŧ⧇āϛ⧇: āĻĒāĻ°ā§āϝāĻžāϞ⧋āϚāύāĻž āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋ āĻĨ⧇āϕ⧇ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻāĻŦāĻ‚ āϏāĻžāχāĻŸā§‡āϰ āĻŽā§‚āϞ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ (āϏāĻžāϧāĻžāϰāĻŖ āϏāĻŽā§āĻĒāĻĻ āϰāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚, āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻŽāύ⧇ āϰāĻžāϖ⧇āύ , āϤāĻĨā§āϝ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰ⧁āύ)āĨ¤ āϏ⧁āϤāϰāĻžāĻ‚, āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āϚāĻŋāĻ¤ā§āϰāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āφāĻŽāĻĻāĻžāύāĻŋ āĻŦāĻŋāĻ­āĻžāϗ⧇ (āĻāĻŦāĻ‚, āĻ…āĻŦāĻļā§āϝāχ, āύāĻžāĻŽā§‡) āĻĒā§āϰāϧāĻžāύ āĻĨ⧇āϕ⧇ āĻĒ⧃āĻĨāĻ• āĻšāĻŦ⧇:

image: werf-dev
...
import:
- artifact: doc-root
  add: /app/_main_site
  to: /app/main_site
  before: setup
- artifact: doc-root
  add: /app/_ru_site
  to: /app/ru_site
  before: setup
{{- if .WerfReviewCommit  }}
- artifact: doc-review
  add: /app/_main_site
  to: /app/main_site/review
  before: setup
- artifact: doc-review
  add: /app/_ru_site
  to: /app/ru_site/review
  before: setup
{{- end }}

āωāĻĒāϰ⧇ āωāĻ˛ā§āϞāĻŋāĻ–āĻŋāϤ āĻšāĻŋāϏāĻžāĻŦ⧇, āĻĒāĻ°ā§āϝāĻžāϞ⧋āϚāύāĻž āĻĒā§āϰāϤāĻŋāĻļā§āϰ⧁āϤāĻŋāϰ āϜāĻ¨ā§āϝ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϤāĻ–āύāχ āϤ⧈āϰāĻŋ āĻšāĻŦ⧇ āϝāĻ–āύ āϏ⧇āϟ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϚāĻžāϞāĻžāύ⧋ āĻšāĻŦ⧇ REVIEW_SHA. āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞ āύāĻž āĻĨāĻžāĻ•āϞ⧇ werf-dev āχāĻŽā§‡āϜ āϤ⧈āϰāĻŋ āύāĻž āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ āĻšāĻŦ⧇ REVIEW_SHA, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āύ⧀āϤāĻŋ āĻĻā§āĻŦāĻžāϰāĻž āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ werf-āĻ āĻĄāĻ•āĻžāϰ āχāĻŽā§‡āϜāϗ⧁āϞāĻŋ werf-dev āχāĻŽā§‡āĻœā§‡āϰ āϜāĻ¨ā§āϝ āĻ•āĻžāϜ āĻ•āϰ⧇āϛ⧇, āφāĻŽāϰāĻž āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻ•āĻžāĻ āĻžāĻŽā§‹āϕ⧇ āϏāĻšāϜ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāϟāĻŋāϕ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϰ⧁āϟ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ (āĻāϟāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇) āĻĻāĻŋāϝāĻŧ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āϛ⧇āĻĄāĻŧ⧇ āĻĻ⧇āĻŦāĨ¤

āϏāĻŽāĻžāĻŦ⧇āĻļ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ! āφāϏ⧁āύ āϏāĻŋāφāχ/āϏāĻŋāĻĄāĻŋ āĻāĻŦāĻ‚ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āϏ⧂āĻ•ā§āĻˇā§āĻŽ āĻŦāĻŋāώāϝāĻŧāϗ⧁āϞāĻŋāϤ⧇ āĻāĻ—āĻŋāϝāĻŧ⧇ āϝāĻžāχāĨ¤

GitLab CI-āĻ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻāĻŦāĻ‚ āĻ—āϤāĻŋāĻļā§€āϞ āĻŦāĻŋāĻ˛ā§āĻĄā§‡āϰ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ

āĻŦāĻŋāĻ˛ā§āĻĄ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŽāϝāĻŧ āφāĻŽāĻžāĻĻ⧇āϰ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻĒāϰāĻŋāĻŦ⧇āĻļ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ werf.yaml. āĻāϟāĻŋ REVIEW_SHA āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻĒā§āϰāϝ⧋āĻœā§āϝ āύāϝāĻŧ, āϝāĻž āφāĻŽāϰāĻž GitHub āĻšā§āĻ• āĻĨ⧇āϕ⧇ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻ•āϞ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āϏ⧇āϟ āĻ•āϰāĻŦāĨ¤

āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻžāĻļ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āĻĄā§‡āϟāĻž āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ generate_artifacts, āϝāĻž āĻĻ⧁āϟāĻŋ āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻļāĻŋāĻ˛ā§āĻĒāĻ•āĻ°ā§āĻŽ āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ⧇:

  • Ņ„Đ°ĐšĐģ releases.yml āϰāĻŋāϞāĻŋāϜ āĻĄā§‡āϟāĻž āϏāĻš,
  • Ņ„Đ°ĐšĐģ common_envs.sh, āϰāĻĒā§āϤāĻžāύāĻŋ āĻ•āϰāĻž āĻĒāϰāĻŋāĻŦ⧇āĻļ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϧāĻžāϰāĻŖāĻ•āĻžāϰ⧀.

āĻĢāĻžāχāϞ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ generate_artifacts āφāĻĒāύāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻĒāĻžāĻŦ⧇āύ āωāĻĻāĻžāĻšāϰāĻŖ āϏāĻš āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ. āϤāĻĨā§āϝ āĻĒā§āϰāĻžāĻĒā§āϤāĻŋ āύāĻŋāĻœā§‡āχ āύāĻŋāĻŦāĻ¨ā§āϧ⧇āϰ āĻŦāĻŋāώāϝāĻŧ āύāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĢāĻžāχāϞ common_envs.sh āφāĻŽāĻžāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ, āĻ•āĻžāϰāĻŖ werf āĻāϰ āĻ•āĻžāϜ āĻāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤ āĻāϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁āϰ āĻāĻ•āϟāĻŋ āωāĻĻāĻžāĻšāϰāĻŖ:

export RELEASES='1.0%v1.0.6-4'
export CHANNELS='1.0-alpha%v1.0.7-1 1.0-beta%v1.0.7-1 1.0-ea%v1.0.6-4 1.0-stable%v1.0.6-4 1.0-rock-solid%v1.0.6-4'
export ROOT_VERSION='v1.0.6-4'

āφāĻĒāύāĻŋ āϝ⧇āĻŽāύ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡āϰ āφāωāϟāĻĒ⧁āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻŦā§āϝāĻžāĻļ āĻĢāĻžāĻ‚āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ source.

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

āĻ…āĻ¨ā§āϝ āĻ•āĻĨāĻžāϝāĻŧ, āϝāĻĻāĻŋ āϏāĻžāχāĻŸā§‡āϰ āϚāĻŋāĻ¤ā§āϰ⧇āϰ āϏāĻŽāĻžāĻŦ⧇āĻļ⧇āϰ āϏāĻŽāϝāĻŧ āϰāĻŋāϞāĻŋāϜ āĻāĻŦāĻ‚ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϗ⧁āϞāĻŋāϰ āϤāĻĨā§āϝ āĻāĻ•āχ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇āϰ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻŽāĻžāύ āĻĨāĻžāϕ⧇, āϤāĻžāĻšāϞ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϟāĻŋ āĻāĻ•āϟāĻŋ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāĻŦ⧇: āϏāĻ°ā§āĻŦā§‹āĻĒāϰāĻŋ, āύāϤ⧁āύ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āĻļāĻŋāĻ˛ā§āĻĒāĻ•āĻ°ā§āĻŽāϟāĻŋ āĻāĻ–āύāĻ“ āύāĻŋāĻ°ā§āĻŽāĻŋāϤ āĻšāϝāĻŧāύāĻŋāĨ¤

āϝāĻĻāĻŋ āĻĒā§āϰāϜāĻ¨ā§āĻŽ werf.yaml āĻŦāĻžāĻšā§āϝāĻŋāĻ• āĻĄā§‡āϟāĻžāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ (āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āϤāĻžāϞāĻŋāĻ•āĻž, āϝ⧇āĻŽāύ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇), āϤāĻžāϰāĻĒāϰ⧇ āĻāχ āϜāĻžāϤ⧀āϝāĻŧ āĻĄā§‡āϟāĻžāϰ āϰāϚāύāĻž āĻāĻŦāĻ‚ āĻŽāĻžāύāϗ⧁āϞāĻŋ āĻĒāĻžāχāĻĒāϞāĻžāχāύ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤ āĻāϟāĻŋ āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āϝāĻĻāĻŋ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋāϗ⧁āϞāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϝāĻŧāĨ¤

āφāĻŽāϰāĻž āĻ•āϰāĻŦ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āĻĄā§‡āϟāĻž āĻ—ā§āϰāĻšāĻŖ āĻāĻŦāĻ‚ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻ•āϰ⧁āύ āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ⧇ āĻĒāĻžāχāĻĒāϞāĻžāχāύ⧇āϰ āĻĒā§āϰāĻĨāĻŽ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇ (āĻĒā§‚āĻ°ā§āĻŦāύāĻŋāĻ°ā§āĻŽāĻžāĻŖ) āĻāĻŦāĻ‚ āϏ⧇āϗ⧁āϞāĻŋāϕ⧇ āφāϰāĻ“ āφāĻ•āĻžāϰ⧇ āĻĒā§āϰ⧇āϰāĻŖ āĻ•āϰ⧁āύ āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ āϏāĻŋāφāχ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ. āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āχ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻ•āĻžāϜāϗ⧁āϞāĻŋ (āĻŦāĻŋāĻ˛ā§āĻĄ, āĻ¸ā§āĻĨāĻžāĻĒāύ, āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ) āϚāĻžāϞāĻžāύ⧋ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞ⧁ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āĻŦ⧇ werf.yaml.

āĻŽāĻžā§āĻšā§‡āϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻĒā§‚āĻ°ā§āĻŦāύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻĢāĻžāχāϞ .gitlab-ci.yml:

Prebuild:
  stage: prebuild
  script:
    - bash ./generate_artifacts 1> common_envs.sh
    - cat ./common_envs.sh
  artifacts:
    paths:
      - releases.yml
      - common_envs.sh
    expire_in: 2 week

āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āĻŸā§‡ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āĻĄā§‡āϟāĻž āĻ•ā§āϝāĻžāĻĒāϚāĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āφāĻĒāύāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ āϏāĻŋāφāχ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āϧāĻžāĻĒāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϤ⧈āϰāĻŋ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ: āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰ⧁āύāĨ¤ āφāĻŽāϰāĻž āĻ—āĻŋāϟāĻšāĻžāĻŦ āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋ āĻĨ⧇āϕ⧇ āĻšā§āĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒāĻžāχāĻĒāϞāĻžāχāύāϟāĻŋ āύāĻŋāĻœā§‡āχ āϚāĻžāϞ⧁ āĻ•āϰāĻŋ (āĻ…āĻ°ā§āĻĨāĻžā§Ž, āϝāĻ–āύ āĻ—āĻŋāϟāĻšāĻžāĻŦ⧇āϰ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻšāϝāĻŧ)āĨ¤ āϤāĻžāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āĻĄā§‡āϟāĻž āĻŦāĻŋāĻ­āĻžāϗ⧇ āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ⧇ āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāĻŦ⧇ CI/CD āϏ⧇āϟāĻŋāĻ‚āϏ -> āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻŸā§āϰāĻŋāĻ—āĻžāϰ, āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āĻ—āĻŋāϟāĻšāĻžāĻŦ⧇ āϏāĻ‚āĻļā§āϞāĻŋāĻˇā§āϟ āĻ“āϝāĻŧ⧇āĻŦāĻšā§āĻ• āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ (āϏ⧇āϟāĻŋāĻ‚āϏ -> āĻ“āϝāĻŧ⧇āĻŦāĻšā§āĻ•).

āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸ā§āĻŸā§‡āϜ āĻāχ āĻŽāϤ āĻĻ⧇āĻ–āĻžāĻŦ⧇:

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

āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ āĻ¸ā§āĻŸā§‡āϜ āĻĨ⧇āϕ⧇ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸ā§āĻŸā§‡āĻœā§‡ āĻĻ⧁āϟāĻŋ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āϝ⧁āĻ•ā§āϤ āĻ•āϰāĻŦ⧇ āĻĒā§‚āĻ°ā§āĻŦāύāĻŋāĻ°ā§āĻŽāĻžāĻŖ, āϤāĻžāχ āφāĻŽāϰāĻž āĻ—āĻ āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āχāύāĻĒ⧁āϟ āĻĄā§‡āϟāĻž āϏāĻš āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϰāĻĒā§āϤāĻžāύāĻŋ āĻ•āϰāĻŋ source common_envs.sh. āĻāĻ•āϟāĻŋ āϏāĻŽāϝāĻŧāϏ⧂āĻšā§€ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āϚāĻžāϞ⧁ āĻ•āϰāĻž āĻ›āĻžāĻĄāĻŧāĻž āφāĻŽāϰāĻž āϏāĻŦ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇āχ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸ā§āĻŸā§‡āϜ āĻļ⧁āϰ⧁ āĻ•āϰāĻŋāĨ¤ āϏāĻŽāϝāĻŧāϏ⧂āĻšā§€ āĻ…āύ⧁āϏāĻžāϰ⧇, āφāĻŽāϰāĻž āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āϚāĻžāϞāĻžāĻŦ - āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āϏāĻŽāĻžāĻŦ⧇āĻļ āĻ•āϰāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āύ⧇āχāĨ¤

āĻ¸ā§āĻĨāĻžāĻĒāύāĻžāϰ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ⧇, āφāĻŽāϰāĻž āĻĻ⧁āϟāĻŋ āĻ•āĻžāϜ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāĻŦ - āĻāĻ•āϟāĻŋ YAML āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ‰ā§ŽāĻĒāĻžāĻĻāύ āĻāĻŦāĻ‚ āĻĄā§‡āĻ­ āϏāĻžāĻ°ā§āĻ•āĻŋāĻŸā§‡ āĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻžāĻ­āĻžāĻŦ⧇:

.base_deploy: &base_deploy
  stage: deploy
  script:
    - type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
    - type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
    - source common_envs.sh
    - werf deploy --stages-storage :local
  dependencies:
    - Prebuild
  except:
    refs:
      - schedules

Deploy to Production:
  <<: *base_deploy
  variables:
    WERF_KUBE_CONTEXT: prod
  environment:
    name: production
    url: werf.io
  only:
    refs:
      - master
  except:
    variables:
      - $REVIEW_SHA
    refs:
      - schedules

Deploy to Test:
  <<: *base_deploy
  variables:
    WERF_KUBE_CONTEXT: dev
  environment:
    name: test
    url: werf.test.flant.com
  except:
    refs:
      - schedules
  only:
    variables:
      - $REVIEW_SHA

āĻ•āĻžāĻ°ā§āϝāϗ⧁āϞāĻŋ āĻŽā§‚āϞāϤ āϕ⧇āĻŦāϞāĻŽāĻžāĻ¤ā§āϰ āĻ•ā§āϞāĻžāĻ¸ā§āϟāĻžāϰ āĻĒā§āϰ⧇āĻ•ā§āώāĻžāĻĒāϟ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻĒ⧃āĻĨāĻ• āĻšāϝāĻŧ āϝāĻžāϰ āĻŽāĻ§ā§āϝ⧇ werf āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āωāϚāĻŋāϤ (WERF_KUBE_CONTEXT), āĻāĻŦāĻ‚ āϞ⧁āĻĒ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϏ⧇āϟ āĻ•āϰāĻž (environment.name и environment.url), āϝāĻž āĻĒāϰ⧇ āĻšā§‡āϞāĻŽ āϚāĻžāĻ°ā§āϟ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϗ⧁āϞāĻŋāϤ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āĻšāϝāĻŧāĨ¤ āφāĻŽāϰāĻž āĻŸā§‡āĻŽāĻĒā§āϞ⧇āĻŸā§‡āϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻŦ āύāĻž, āĻ•āĻžāϰāĻŖ... āĻĒā§āϰāĻļā§āύ⧇ āĻĨāĻžāĻ•āĻž āĻŦāĻŋāώāϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āϏ⧇āĻ–āĻžāύ⧇ āφāĻ•āĻ°ā§āώāĻŖā§€āϝāĻŧ āĻ•āĻŋāϛ⧁ āύ⧇āχ, āϤāĻŦ⧇ āφāĻĒāύāĻŋ āϏ⧇āϗ⧁āϞāĻŋ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āύāĻŋāĻŦāĻ¨ā§āϧ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ.

āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āϤ āĻ¸ā§āĻĒāĻ°ā§āĻļ

āϝ⧇āĻšā§‡āϤ⧁ āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāϗ⧁āϞāĻŋ āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ āĻšāϝāĻŧ, āύāϤ⧁āύ āĻ›āĻŦāĻŋāϗ⧁āϞāĻŋ āϘāύ āϘāύ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋ āĻ•ā§āϰāĻŽāĻžāĻ—āϤ āĻŦ⧃āĻĻā§āϧāĻŋ āĻĒāĻžāĻŦ⧇āĨ¤ āĻ…āϤāĻāĻŦ, āύ⧀āϤāĻŋāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧ āϚāĻŋāĻ¤ā§āϰ āĻĒāϰāĻŋāĻšā§āĻ›āĻ¨ā§āύāϤāĻž āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āĻ…āĻĒāϰāĻŋāĻšāĻžāĻ°ā§āϝāĨ¤ āĻāϟāĻž āĻ•āϰāĻž āϖ⧁āĻŦāχ āϏāĻšāϜāĨ¤

āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻ•āϰāϤ⧇ āφāĻĒāύāĻžāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāĻŦ⧇:

  • āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻĒāĻĻāĻ•ā§āώ⧇āĻĒ āϝ⧋āĻ— āĻ•āϰ⧁āύ .gitlab-ci.yml;
  • āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻšā§āĻ›āĻ¨ā§āύāϤāĻžāϰ āĻ•āĻžāĻœā§‡āϰ āĻĒāĻ°ā§āϝāĻžāϝāĻŧāĻ•ā§āϰāĻŽāĻŋāĻ• āϏāĻŽā§āĻĒāĻžāĻĻāύ āϝ⧋āĻ— āĻ•āϰ⧁āύ;
  • āĻāĻ•āϟāĻŋ āϞ⧇āĻ–āĻžāϰ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āϏāĻš āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞ āϏ⧇āϟ āφāĻĒ āĻ•āϰ⧁āύāĨ¤

āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻĒāĻ°ā§āϝāĻžāϝāĻŧ āϝ⧋āĻ— āĻ•āϰāĻž āĻšāĻšā§āϛ⧇ .gitlab-ci.yml:

Cleanup:
  stage: cleanup
  script:
    - type multiwerf && . $(multiwerf use 1.0 alpha --as-file)
    - type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
    - source common_envs.sh
    - docker login -u nobody -p ${WERF_IMAGES_CLEANUP_PASSWORD} ${WERF_IMAGES_REPO}
    - werf cleanup --stages-storage :local
  only:
    refs:
      - schedules

āφāĻŽāϰāĻž āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ āĻāϰ āĻĒā§āϰāĻžāϝāĻŧ āϏāĻŦāϗ⧁āϞ⧋āχ āĻāĻ•āϟ⧁ āĻŦ⧇āĻļāĻŋ āĻĻ⧇āϖ⧇āĻ›āĻŋ - āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāϟāĻŋ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϕ⧇ āĻĒā§āϰāĻĨāĻŽā§‡ āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āĻ›āĻŦāĻŋ āĻŽā§āϛ⧇ āĻĢ⧇āϞāĻžāϰ āĻ…āϧāĻŋāĻ•āĻžāϰ āφāϛ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻŸā§‹āϕ⧇āύ āĻĻāĻŋāϝāĻŧ⧇ āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϤ⧇ āϞāĻ— āχāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ (āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āϜāĻžāϰāĻŋ āĻ•āϰāĻž āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ āϏāĻŋāφāχ āϟāĻžāĻ¸ā§āĻ• āĻŸā§‹āϕ⧇āύ āĻāχ āϧāϰāύ⧇āϰ āĻ…āϧāĻŋāĻ•āĻžāϰ āφāϛ⧇)āĨ¤ āĻŸā§‹āϕ⧇āύāϟāĻŋ āĻ…āĻŦāĻļā§āϝāχ āĻ—āĻŋāϟāĻ˛ā§āϝāĻžāĻŦ⧇ āφāϗ⧇ āĻĨ⧇āϕ⧇āχ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻāϰ āĻŽāĻžāύ āĻ…āĻŦāĻļā§āϝāχ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇ āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ WERF_IMAGES_CLEANUP_PASSWORD āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ (CI/CD āϏ⧇āϟāĻŋāĻ‚āϏ -> āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ).

āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āϏāĻŽāϝāĻŧāϏ⧂āĻšā§€āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ⧇āϰ āĻ•āĻžāϜ āϝ⧋āĻ— āĻ•āϰāĻž āĻšāϝāĻŧ CI/CD ->
āϏ⧂āĻšā§€
.

āĻāϟāĻŋāχ: āĻĄāĻ•āĻžāϰ āϰ⧇āϜāĻŋāĻ¸ā§āĻŸā§āϰāĻŋāϰ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āφāϰ āĻ…āĻŦā§āϝāĻŦāĻšā§ƒāϤ āϚāĻŋāĻ¤ā§āϰāϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇ āĻ•ā§āϰāĻŽāĻžāĻ—āϤ āĻŦ⧃āĻĻā§āϧāĻŋ āĻĒāĻžāĻŦ⧇ āύāĻžāĨ¤

āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āĻ…āĻ‚āĻļ⧇āϰ āĻļ⧇āώ⧇, āφāĻŽāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻŽāύ⧇ āĻ•āϰāĻŋāϝāĻŧ⧇ āĻĻāĻŋāĻšā§āĻ›āĻŋ āϝ⧇ āύāĻŋāĻŦāĻ¨ā§āϧ āĻĨ⧇āϕ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϤāĻžāϞāĻŋāĻ•āĻž āĻĒāĻžāĻ“āϝāĻŧāĻž āϝāĻžāϝāĻŧ git:

āĻĢāϞ

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

āϤāĻĨā§āϝāĻ“

  • werf āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻŋāϰ āĻ•ā§āϝāĻžāĻļāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻāĻ•ā§āϏāϟāĻžāĻ°ā§āύāĻžāϞ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻ•ā§āϝāĻžāĻļāĻŋāĻ‚ āωāĻ­āϝāĻŧ⧇āϰ āĻ•āĻžāϰāϪ⧇ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻŋāϕ⧇ āĻĻā§āϰ⧁āϤ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤
  • āĻŦāĻžāĻšā§āϝāĻŋāĻ• āĻ—āĻŋāϟ āϰāĻŋāĻĒā§‹āϜāĻŋāϟāϰāĻŋāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻž āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻŽāϝāĻŧ āϏāĻŽāĻ—ā§āϰ āϏāĻ‚āĻ—ā§āϰāĻšāĻ¸ā§āĻĨāϞ āĻ•ā§āϞ⧋āύ āĻ•āϰāĻžāϰ āĻŦāĻž āϚāϤ⧁āϰ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāĻœā§‡āĻļāĻžāύ āϞāϜāĻŋāĻ• āĻĻāĻŋāϝāĻŧ⧇ āϚāĻžāĻ•āĻžāϟāĻŋāϕ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āωāĻĻā§āĻ­āĻžāĻŦāύ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž āĻĻā§‚āϰ āĻ•āϰ⧇āĨ¤ werf āĻāĻ•āϟāĻŋ āĻ•ā§āϝāĻžāĻļ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻāĻ•āĻŦāĻžāϰ āĻ•ā§āϞ⧋āύāĻŋāĻ‚ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ fetch āĻāĻŦāĻ‚ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϝāĻ–āύ āĻĒā§āϰāϝāĻŧā§‹āϜāύāĨ¤
  • āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĢāĻžāχāϞ⧇ Go āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻ•ā§āώāĻŽāϤāĻž werf.yaml āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āϏāĻŽāĻžāĻŦ⧇āĻļ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ āϝāĻžāϰ āĻĢāϞāĻžāĻĢāϞ āĻŦāĻžāĻšā§āϝāĻŋāĻ• āĻĄā§‡āϟāĻžāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤
  • āĻŽāĻžāωāĻ¨ā§āϟ āχāύ āĻ“āϝāĻŧāĻžāĻ°ā§āĻĢ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āωāĻ˛ā§āϞ⧇āĻ–āϝ⧋āĻ—ā§āϝāĻ­āĻžāĻŦ⧇ āĻļāĻŋāĻ˛ā§āĻĒāĻ•āĻ°ā§āĻŽ āϏāĻ‚āĻ—ā§āϰāĻšā§‡āϰ āĻ—āϤāĻŋ āĻŦāĻžāĻĄāĻŧ⧇ - āĻ•ā§āϝāĻžāĻļ⧇āϰ āĻ•āĻžāϰāϪ⧇, āϝāĻž āϏāĻŽāĻ¸ā§āϤ āĻĒāĻžāχāĻĒāϞāĻžāχāύ⧇ āϏāĻžāϧāĻžāϰāĻŖāĨ¤
  • werf āĻ•ā§āϞāĻŋāύāφāĻĒ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāĻž āϏāĻšāϜ āĻ•āϰ⧇, āϝāĻž āĻ—āϤāĻŋāĻļā§€āϞāĻ­āĻžāĻŦ⧇ āύāĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻŦāĻŋāĻļ⧇āώāĻ­āĻžāĻŦ⧇ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤

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

āφāĻŽāĻžāĻĻ⧇āϰ āĻŦā§āϞāϗ⧇āĻ“ āĻĒāĻĄāĻŧ⧁āύ:

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

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster