āĻĄāĻ•āĻžāĻ° āĻ¸ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨

āĻ†āĻŽāĻ°āĻž āĻ¯ā§‡ āĻ…āĻ¨āĻ˛āĻžāĻ‡āĻ¨ āĻ­āĻŋāĻĄāĻŋāĻ“ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ›āĻŋ āĻ¤āĻž āĻāĻ•āĻŸāĻŋ āĻŦāĻ¨ā§āĻ§ āĻŦāĻžāĻŖāĻŋāĻœā§āĻ¯āĻŋāĻ• āĻŦāĻŋāĻ•āĻžāĻļ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ—āĻ¤āĻ­āĻžāĻŦā§‡ āĻŽāĻžāĻ˛āĻŋāĻ•āĻžāĻ¨āĻž āĻāĻŦāĻ‚ āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻšā§-āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§ˇ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ˛ā§‡āĻ–āĻžāĻ° āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ¸ā§€āĻŽāĻŋāĻ¤ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻˇā§āĻ āĻŋāĻ¤ āĻ•āĻ°ā§āĻŽāĻĒā§āĻ°āĻŦāĻžāĻšāĻ•ā§‡ āĻŦā§āĻ¯āĻžāĻšāĻ¤ āĻ¨āĻž āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§‡āĻœāĻŋāĻ‚ āĻ¸āĻžāĻ‡āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻ•āĻžāĻ° āĻ¸ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻŽ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°āĻŋāĻ‚ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻžāĨ¤ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĻā§ƒāĻˇā§āĻŸāĻŋāĻ¤ā§‡ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻ†āĻ–ā§āĻ¯āĻžāĻ¨ āĻĻā§āĻŸāĻŋ āĻ­āĻžāĻ—ā§‡ āĻŦāĻŋāĻ­āĻ•ā§āĻ¤āĨ¤ āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ‚āĻļāĻŸāĻŋ āĻĄāĻ•āĻžāĻ° āĻāĻžāĻāĻ• āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡ CI/CD āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻŸāĻŋ āĻāĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°ā§‡āĨ¤ āĻ¯āĻžāĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ‚āĻļ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻ†āĻ—ā§āĻ°āĻšā§€ āĻ¨āĻ¨ āĻ¤āĻžāĻ°āĻž āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻā§‡ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻ…āĻ‚āĻļā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻĒā§āĻ°āĻĨāĻŽ āĻ–āĻŖā§āĻĄ

āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€, āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻŦāĻ›āĻ°ā§‡, āĻ¯āĻ¤ āĻ¤āĻžāĻĄāĻŧāĻžāĻ¤āĻžāĻĄāĻŧāĻŋ āĻ¸āĻŽā§āĻ­āĻŦ āĻ¸āĻŋāĻ†āĻ‡/āĻ¸āĻŋāĻĄāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ›āĻŋāĻ˛āĨ¤ āĻļāĻ°ā§āĻ¤āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ›āĻŋāĻ˛ āĻĄāĻ•āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¨āĻž āĻ•āĻ°āĻž āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•āĻžāĻ°āĻŖā§‡ āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨:

  • āĻ‰āĻ¤ā§āĻĒāĻžāĻĻāĻ¨ā§‡ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ†āĻ°āĻ“ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¯ā§‹āĻ—ā§āĻ¯ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻļā§€āĻ˛ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ (āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛āĻžāĻ‡āĻœā§‡āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž)
  • āĻ¨ā§‡āĻ¤ā§ƒāĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻĄāĻ•āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¯āĻŧāĻ¨āĻŋ (āĻ…āĻĻā§āĻ­ā§āĻ¤, āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻāĻŽāĻ¨ āĻ›āĻŋāĻ˛)
  • R&D āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ†āĻĻāĻ°ā§āĻļāĻ—āĻ¤ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€

MVP-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹, āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻāĻŦāĻ‚ āĻ†āĻ¨ā§āĻŽāĻžāĻ¨āĻŋāĻ• āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§‚āĻĒ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:

  • āĻĄā§‡āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ āĻ¸āĻš 4 IntelÂŽ X5650 āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° (āĻ†āĻ°ā§‹ āĻāĻ•āĻŸāĻŋ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻŦāĻŋāĻ•āĻļāĻŋāĻ¤)
  • āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻŦāĻŋāĻ•āĻžāĻļ C++, Python3-āĻ¤ā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ
  • āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻĒā§āĻ°āĻ§āĻžāĻ¨ 3āĻ¯āĻŧ āĻĒāĻ•ā§āĻˇā§‡āĻ° āĻŸā§āĻ˛: āĻ•āĻžāĻĢāĻ•āĻž, āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸, āĻāĻ¯āĻŧāĻžāĻ°āĻĢā§āĻ˛ā§‹, āĻ°ā§‡āĻĄāĻŋāĻ¸, āĻ—ā§āĻ°āĻžāĻĢāĻžāĻ¨āĻž, āĻĒā§‹āĻ¸ā§āĻŸāĻ—ā§āĻ°ā§‡āĻ¸ā§āĻ•āĻāĻ˛, āĻŽāĻžāĻ‡āĻāĻ¸āĻ•āĻŋāĻ‰āĻāĻ˛, â€Ļ
  • āĻĄāĻŋāĻŦāĻžāĻ— āĻāĻŦāĻ‚ āĻ°āĻŋāĻ˛āĻŋāĻœā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻ˛āĻžāĻĻāĻžāĻ­āĻžāĻŦā§‡ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻāĻŦāĻ‚ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨

āĻĒā§āĻ°āĻĨāĻŽ āĻĒā§āĻ°āĻļā§āĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¯āĻž āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§‡ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻž āĻĻāĻ°āĻ•āĻžāĻ° āĻ¤āĻž āĻšāĻ˛ āĻ¯ā§‡ āĻ•ā§‹āĻ¨āĻ“ āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡ (CI/CD) āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤

āĻ†āĻŽāĻ°āĻž āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ—āĻ¤āĻ­āĻžāĻŦā§‡ āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻĒāĻ•ā§āĻˇā§‡āĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ C++ āĻŦāĻž āĻĒāĻžāĻ‡āĻĨāĻ¨ā§‡ āĻŦāĻŋāĻ•āĻļāĻŋāĻ¤ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ‰āĻĒāĻžāĻ¯āĻŧā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¤āĻžāĻĻā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ: āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž, āĻŦāĻŋāĻ˛ā§āĻŸ āĻ‡āĻŽā§‡āĻœ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĨ¤ āĻāĻ•āĻŸāĻŋ āĻ…āĻœāĻžāĻ¨āĻž āĻ•āĻžāĻ°āĻŖā§‡, āĻ…āĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§‡āĻ›ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻ¯āĻĨāĻž: CI āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻŸā§‡āĻŦāĻ˛ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸ āĻāĻ¨āĻ­āĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§‡āĻ¨ā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, py āĻŽāĻĄāĻŋāĻ‰āĻ˛āĻ—ā§āĻ˛āĻŋ requirements.txt āĻĨā§‡āĻ•ā§‡ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ†āĻ°ā§āĻŸāĻŋāĻĢā§āĻ¯āĻžāĻ•ā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°, āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻāĻŦāĻ‚ āĻ¸āĻš āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧāĨ¤ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻ¸āĻšāĻ—āĻžāĻŽā§€āĨ¤ āĻāĻ° āĻĒāĻ°ā§‡, āĻĒā§āĻ°āĻļāĻžāĻ¸āĻ•ā§‡āĻ° āĻ…āĻ§āĻŋāĻ•āĻžāĻ° āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ¸āĻŋāĻ†āĻ‡ āĻ¸āĻŋāĻ†āĻ‡/āĻ¸āĻŋāĻĄāĻŋ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦā§‡āĻ›ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ āĻāĻ‡ āĻŽāĻ¤ āĻ•āĻŋāĻ›ā§ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ:

āĻĄāĻ•āĻžāĻ° āĻ¸ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨
āĻ•āĻžāĻ āĻžāĻŽā§‹āĻ—āĻ¤āĻ­āĻžāĻŦā§‡, gitlab-ci.yml āĻāĻ° āĻŽāĻ¤ āĻ˛āĻžāĻ—āĻ›āĻŋāĻ˛

---
variables:
  # ĐŧиĐŊиĐŧĐ°ĐģŅŒĐŊĐ°Ņ вĐĩŅ€ŅĐ¸Ņ ĐĻПĐŖ ĐŊĐ° ŅĐĩŅ€Đ˛ĐĩŅ€Đ°Ņ…, ĐŗĐ´Đĩ Ņ€Đ°ĐˇĐ˛ĐžŅ€Đ°Ņ‡Đ¸Đ˛Đ°ĐĩŅ‚ŅŅ ĐēĐģĐ°ŅŅ‚ĐĩŅ€
  CMAKE_CPUTYPE: "westmere"

  DEBIAN: "MYREGISTRY:5000/debian:latest"

before_script:
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$SSH_PRIVATE_KEY")
  - mkdir -p ~/.ssh && echo -e "Host *ntStrictHostKeyChecking nonn" > ~/.ssh/config

stages:
  - build
  - testing
  - deploy

debug.debian:
  stage: build
  image: $DEBIAN
  script:
    - cd builds/release && ./build.sh
    paths:
      - bin/
      - builds/release/bin/
    when: always
release.debian:
  stage: build
  image: $DEBIAN
  script:
    - cd builds/release && ./build.sh
    paths:
      - bin/
      - builds/release/bin/
    when: always

## testing stage
tests.codestyle:
  stage: testing
  image: $DEBIAN
  dependencies:
    - release.debian
  script:
    - /bin/bash run_tests.sh -t codestyle -b "${CI_COMMIT_REF_NAME}_codestyle"
tests.debug.debian:
  stage: testing
  image: $DEBIAN
  dependencies:
    - debug.debian
  script:
    - /bin/bash run_tests.sh -e codestyle/test_pylint.py -b "${CI_COMMIT_REF_NAME}_debian_debug"
  artifacts:
    paths:
      - run_tests/username/
    when: always
    expire_in: 1 week
tests.release.debian:
  stage: testing
  image: $DEBIAN
  dependencies:
    - release.debian
  script:
    - /bin/bash run_tests.sh -e codestyle/test_pylint.py -b "${CI_COMMIT_REF_NAME}_debian_release"
  artifacts:
    paths:
      - run_tests/username/
    when: always
    expire_in: 1 week

## staging stage
deploy_staging:
  stage: deploy
  environment: staging
  image: $DEBIAN
  dependencies:
    - release.debian
  script:
    - cd scripts/deploy/ &&
        python3 createconfig.py -s $CI_ENVIRONMENT_NAME &&
        /bin/bash install_venv.sh -d -r ../../requirements.txt &&
        python3 prepare_init.d.py &&
        python3 deploy.py -s $CI_ENVIRONMENT_NAME
  when: manual

āĻāĻŸāĻŋ āĻ˛āĻ•ā§āĻˇāĻŖā§€āĻ¯āĻŧ āĻ¯ā§‡ āĻ¸āĻŽāĻžāĻŦā§‡āĻļ āĻāĻŦāĻ‚ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻŸāĻŋ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻšāĻŋāĻ¤ā§āĻ°ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¸āĻžā§āĻšāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ¯āĻĻāĻŋāĻ“ āĻ•āĻžāĻœā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ‰āĻĒāĻžāĻ¯āĻŧā§‡ āĻ†āĻ•āĻ°ā§āĻˇāĻŖā§€āĻ¯āĻŧ, āĻ¤āĻŦā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ†āĻŽāĻŋ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻŦ āĻ¨āĻžāĨ¤ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋāĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§‡āĻŦā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ āĻ¨āĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ†āĻĒāĻ¨āĻžāĻ° āĻĻā§ƒāĻˇā§āĻŸāĻŋ āĻ†āĻ•āĻ°ā§āĻˇāĻŖ āĻ•āĻ°āĻŦ āĻ¯ā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§‡ āĻ•āĻ˛āĻŋāĻ‚ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ°āĻŽ āĻĨāĻžāĻ•ā§‡:

  1. createconfig.py - āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻ¸ā§‡āĻŸāĻŋāĻ‚āĻ¸ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ settings.ini āĻĢāĻžāĻ‡āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ (āĻĒā§āĻ°āĻŋāĻĒā§āĻ°ā§‹āĻĄāĻžāĻ•āĻļāĻ¨, āĻĒā§āĻ°ā§‹āĻĄāĻžāĻ•āĻļāĻ¨, āĻŸā§‡āĻ¸ā§āĻŸāĻŋāĻ‚, ...)
  2. install_venv.sh - āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ py āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻ•āĻ°ā§‡
  3. ready_init.d.py — āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ•āĻŽā§āĻĒā§‹āĻ¨ā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸ-āĻ¸ā§āĻŸāĻĒ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°ā§‡
  4. deploy.py - āĻ¨āĻ¤ā§āĻ¨ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĒāĻšā§‡ āĻāĻŦāĻ‚ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡

āĻ•ā§āĻ¸. āĻ¸ā§āĻŸā§‡āĻœāĻŋāĻ‚ āĻ¸ā§āĻŸā§‡āĻœ āĻĒā§āĻ°āĻŋāĻĒā§āĻ°ā§‹āĻĄāĻžāĻ•āĻļāĻ¨ āĻāĻŦāĻ‚ āĻĒā§āĻ°ā§‹āĻĄāĻžāĻ•āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ†āĻ°āĻ“ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖā§‡ āĻĒāĻŖā§āĻ¯ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ (CentOS)āĨ¤ āĻ†āĻ°āĻ“ 5āĻŸāĻŋ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻļāĻžāĻ°ā§€āĻ°āĻŋāĻ• āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻāĻŦāĻ‚ āĻāĻ• āĻĄāĻœāĻ¨ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ āĻāĻŦāĻ‚ āĻĄā§‡āĻ­ā§‡āĻ˛āĻĒāĻžāĻ° āĻāĻŦāĻ‚ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻ•āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻ°ā§āĻŽāĻ°āĻ¤ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ° āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋ āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻ†āĻ°āĻ“ āĻŦā§‡āĻļāĻŋ āĻ•āĻ āĻŋāĻ¨ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡āĨ¤ āĻāĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡, āĻāĻŸāĻŋ āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻšāĻ¯āĻŧā§‡ āĻ“āĻ ā§‡ āĻ¯ā§‡ āĻ¤āĻžāĻ•ā§‡ āĻ›āĻžāĻĄāĻŧāĻž āĻ•āĻ°āĻž āĻ…āĻ¸āĻŽā§āĻ­āĻŦ āĻ›āĻŋāĻ˛ ...

āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻ–āĻŖā§āĻĄ

āĻĄāĻ•āĻžāĻ° āĻ¸ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨

āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°āĻŸāĻŋ āĻ•āĻ¯āĻŧā§‡āĻ• āĻĄāĻœāĻ¨ āĻĒā§ƒāĻĨāĻ• āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĻāĻ°ā§āĻļāĻ¨ā§€āĻ¯āĻŧ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ¯āĻž āĻĄāĻ•āĻžāĻ°āĻĢāĻžāĻ‡āĻ˛āĻ¸ āĻĻā§āĻŦāĻžāĻ°āĻž āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋāĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŸāĻŋ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻœ āĻšāĻ˛ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°āĻŸāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§‡āĻœāĻŋāĻ‚ āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¤ā§‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ•-āĻ°āĻŋāĻ˛āĻŋāĻœ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ†āĻ—ā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤

āĻ¤āĻžāĻ¤ā§āĻ¤ā§āĻŦāĻŋāĻ•āĻ­āĻžāĻŦā§‡, āĻāĻ•āĻ¸āĻžāĻĨā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻšāĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡: āĻ¯āĻ¤āĻ—ā§āĻ˛āĻŋ āĻ•āĻžāĻœ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¯āĻŧ āĻ†āĻ›ā§‡ āĻŦāĻž āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋāĻ° āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋ āĻ†āĻ›ā§‡āĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻˇā§āĻĒāĻ¤ā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¸ā§āĻŸā§‡āĻœāĻŋāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āĻ¨ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡ (āĻĒā§‹āĻ°ā§āĻŸ, āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĻ¤ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻ›ā§‡āĻĻ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¨āĻž)āĨ¤

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻŽā§‚āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨ āĻ¸āĻŽā§āĻĒāĻĻ āĻšāĻ˛ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŦāĻ‚ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻāĻ° āĻŦā§‡āĻļāĻŋ āĻ•āĻŋāĻ›ā§ āĻ›āĻŋāĻ˛ āĻ¨āĻžāĨ¤

āĻāĻ•āĻŸāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻāĻ° āĻ¸āĻ°āĻ˛āĻ¤āĻž āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯ā§‡āĻ° āĻ¨āĻŽāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻžāĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻĄāĻ•āĻžāĻ° āĻ¸ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻŽ āĻŦā§‡āĻ›ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻĨāĻŽ āĻ¯ā§‡ āĻ•āĻžāĻœāĻŸāĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¤āĻž āĻšāĻ˛ āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻžāĻ° āĻāĻŦāĻ‚ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ¨ā§‹āĻĄ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž:

$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
kilqc94pi2upzvabttikrfr5d     nop-test-1     Ready               Active                                  19.03.2
jilwe56pl2zvabupryuosdj78     nop-test-2     Ready               Active                                  19.03.2
j5a4yz1kr2xke6b1ohoqlnbq5 *   nop-test-3     Ready               Active              Leader              19.03.2

āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€, āĻāĻ•āĻŸāĻŋ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨:


$ docker network create --driver overlay --subnet 10.10.10.0/24 nw_swarm

āĻāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž CI āĻĨā§‡āĻ•ā§‡ āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ° āĻ°āĻŋāĻŽā§‹āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ā§‡āĻ° āĻĒāĻ°āĻŋāĻĒā§āĻ°ā§‡āĻ•ā§āĻˇāĻŋāĻ¤ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ¸āĻŋāĻ†āĻ‡ āĻāĻŦāĻ‚ āĻ¸ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻŽ āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ: āĻ¸āĻžāĻ°ā§āĻŸāĻŋāĻĢāĻŋāĻ•ā§‡āĻŸ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž, āĻ—ā§‹āĻĒāĻ¨ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻĄāĻ•āĻžāĻ° āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻžāĨ¤ āĻāĻ‡āĻŸāĻž āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻ¨ā§‡āĻ• āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻžāĻāĻšāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž .gitlab-ci .yml-āĻ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻ¤ā§ˆāĻ°āĻŋ āĻāĻŦāĻ‚ āĻ§ā§āĻŦāĻ‚āĻ¸ā§‡āĻ° āĻ•āĻžāĻœ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

.gitlab-ci .yml-āĻ āĻ†āĻ°āĻ“ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻšāĻžāĻ•āĻ°āĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡

## staging stage
deploy_staging:
  stage: testing
  before_script:
    - echo "override global 'before_script'"
  image: "REGISTRY:5000/docker:latest"
  environment: staging
  dependencies: []
  variables:
    DOCKER_CERT_PATH: "/certs"
    DOCKER_HOST: tcp://10.50.173.107:2376
    DOCKER_TLS_VERIFY: 1
    CI_BIN_DEPENDENCIES_JOB: "release.centos.7"
  script:
    - mkdir -p $DOCKER_CERT_PATH
    - echo "$TLSCACERT" > $DOCKER_CERT_PATH/ca.pem
    - echo "$TLSCERT" > $DOCKER_CERT_PATH/cert.pem
    - echo "$TLSKEY" > $DOCKER_CERT_PATH/key.pem
    - docker stack deploy -c docker-compose.yml ${CI_ENVIRONMENT_NAME}_${CI_COMMIT_REF_NAME} --with-registry-auth
    - rm -rf $DOCKER_CERT_PATH
  when: manual

## stop staging stage
stop_staging:
  stage: testing
  before_script:
    - echo "override global 'before_script'"
  image: "REGISTRY:5000/docker:latest"
  environment: staging
  dependencies: []
  variables:
    DOCKER_CERT_PATH: "/certs"
    DOCKER_HOST: tcp://10.50.173.107:2376
    DOCKER_TLS_VERIFY: 1
  script:
    - mkdir -p $DOCKER_CERT_PATH
    - echo "$TLSCACERT" > $DOCKER_CERT_PATH/ca.pem
    - echo "$TLSCERT" > $DOCKER_CERT_PATH/cert.pem
    - echo "$TLSKEY" > $DOCKER_CERT_PATH/key.pem
    - docker stack rm ${CI_ENVIRONMENT_NAME}_${CI_COMMIT_REF_NAME}
    # TODO: need check that stopped
  when: manual

āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ•ā§‹āĻĄ āĻ¸ā§āĻ¨āĻŋāĻĒā§‡āĻŸ āĻĨā§‡āĻ•ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›ā§‡āĻ¨ āĻ¯ā§‡ āĻĻā§āĻŸāĻŋ āĻŦā§‹āĻ¤āĻžāĻŽ (deploy_staging, stop_staging) āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ā§‡ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻ…ā§āĻ¯āĻžāĻ•āĻļāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤

āĻĄāĻ•āĻžāĻ° āĻ¸ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨
āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻ¨āĻžāĻŽ āĻļāĻžāĻ–āĻžāĻ° āĻ¨āĻžāĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻŋāĻ˛ā§‡ āĻ¯āĻžāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻ‡ āĻ¸ā§āĻŦāĻ¤āĻ¨ā§āĻ¤ā§āĻ°āĻ¤āĻž āĻ¯āĻĨā§‡āĻˇā§āĻŸ āĻšāĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋ āĻ…āĻ¨āĻ¨ā§āĻ¯ āĻ†āĻ‡āĻĒāĻŋ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻāĻŦāĻ‚ āĻĒā§‹āĻ°ā§āĻŸ, āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡āĨ¤ āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āĻ¨ āĻ•āĻ°āĻž āĻšāĻŦā§‡, āĻ¤āĻŦā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻĨā§‡āĻ•ā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻ•āĻ‡ (āĻ•āĻžāĻ°āĻŖ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻ‡) - āĻ†āĻŽāĻ°āĻž āĻ¯āĻž āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤ āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• (āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°) āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻŋ Docker-compose.yml, āĻ¯āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°ā§‡āĨ¤

Docker-compose.yml

---
version: '3'

services:
  userprop:
    image: redis:alpine
    deploy:
      replicas: 1
      placement:
        constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
      restart_policy:
        condition: none
    networks:
      nw_swarm:
  celery_bcd:
    image: redis:alpine
    deploy:
      replicas: 1
      placement:
        constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
      restart_policy:
        condition: none
    networks:
      nw_swarm:

  schedulerdb:
    image: mariadb:latest
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
      MYSQL_DATABASE: schedulerdb
      MYSQL_USER: ****
      MYSQL_PASSWORD: ****
    command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--explicit_defaults_for_timestamp=1']
    deploy:
      replicas: 1
      placement:
        constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
      restart_policy:
        condition: none
    networks:
      nw_swarm:

  celerydb:
    image: mariadb:latest
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
      MYSQL_DATABASE: celerydb
      MYSQL_USER: ****
      MYSQL_PASSWORD: ****
    deploy:
      replicas: 1
      placement:
        constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
      restart_policy:
        condition: none
    networks:
      nw_swarm:

  cluster:
    image: $CENTOS7
    environment:
      - CENTOS
      - CI_ENVIRONMENT_NAME
      - CI_API_V4_URL
      - CI_REPOSITORY_URL
      - CI_PROJECT_ID
      - CI_PROJECT_URL
      - CI_PROJECT_PATH
      - CI_PROJECT_NAME
      - CI_COMMIT_REF_NAME
      - CI_BIN_DEPENDENCIES_JOB
    command: >
      sudo -u myusername -H /bin/bash -c ". /etc/profile &&
        mkdir -p /storage1/$CI_COMMIT_REF_NAME/$CI_PROJECT_NAME &&
        cd /storage1/$CI_COMMIT_REF_NAME/$CI_PROJECT_NAME &&
            git clone -b $CI_COMMIT_REF_NAME $CI_REPOSITORY_URL . &&
            curl $CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/artifacts/$CI_COMMIT_REF_NAME/download?job=$CI_BIN_DEPENDENCIES_JOB -o artifacts.zip &&
            unzip artifacts.zip ;
        cd /storage1/$CI_COMMIT_REF_NAME/$CI_PROJECT_NAME/scripts/deploy/ &&
            python3 createconfig.py -s $CI_ENVIRONMENT_NAME &&
            /bin/bash install_venv.sh -d -r ../../requirements.txt &&
            python3 prepare_init.d.py &&
            python3 deploy.py -s $CI_ENVIRONMENT_NAME"
    deploy:
      replicas: 1
      placement:
        constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
      restart_policy:
        condition: none
    tty: true
    stdin_open: true
    networks:
      nw_swarm:

networks:
  nw_swarm:
    external: true

āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›ā§‡āĻ¨ āĻ¯ā§‡ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻāĻ•āĻŸāĻŋ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• (nw_swarm) āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻāĻŦāĻ‚ āĻāĻ•ā§‡ āĻ…āĻĒāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§āĨ¤

āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ (redis, mysql-āĻāĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡) āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻĒā§ƒāĻĨāĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ (āĻĒāĻ°āĻŋāĻ•āĻ˛ā§āĻĒāĻ¨āĻžāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ•āĻžāĻ¸ā§āĻŸāĻŽāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦāĻŋāĻ­āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ)āĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡āĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻĄāĻŧ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻ›āĻŦāĻŋāĻ¤ā§‡ āĻ¸āĻŋāĻāĻŽāĻĄāĻŋ āĻĒāĻžāĻ¸ āĻ•āĻ°āĻžāĻ° āĻŽāĻ¤ āĻĻā§‡āĻ–āĻžāĻšā§āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡, āĻ…āĻ‚āĻļ I-āĻ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻ•āĻžāĻ°ā§āĻ¯āĻ¤ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¨āĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻŋ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯āĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ‡āĻ˛āĻžāĻ‡āĻŸ āĻ•āĻ°āĻŦ:

  • git āĻ•ā§āĻ˛ā§‹āĻ¨... - āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻĒāĻžāĻ¨ (createconfig.py, install_venv.sh, āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋ)
  • āĻ•āĻžāĻ°ā§āĻ˛... && āĻ†āĻ¨āĻœāĻŋāĻĒ... - āĻŦāĻŋāĻ˛ā§āĻĄ āĻ†āĻ°ā§āĻŸāĻŋāĻĢā§āĻ¯āĻžāĻ•ā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻāĻŦāĻ‚ āĻ†āĻ¨āĻœāĻŋāĻĒ āĻ•āĻ°ā§āĻ¨ (āĻ¸āĻ‚āĻ•āĻ˛āĻŋāĻ¤ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋāĻ—ā§āĻ˛āĻŋ)

āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻāĻ–āĻ¨āĻ“ āĻ…āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡: āĻ¯ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ¨āĻ¯āĻŧā§ˇ āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻĒāĻ°ā§€āĻ¤ āĻĒā§āĻ°āĻ•ā§āĻ¸āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻŋ, āĻāĻ­āĻžāĻŦā§‡:

.gitlab-ci.yml-āĻ, āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ¯āĻžāĻ˛ā§‡āĻ¨ā§āĻ¸āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻ˛āĻžāĻ‡āĻ¨ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻŋ (āĻ¯āĻž, āĻ¯āĻ–āĻ¨ āĻ•āĻŽāĻŋāĻŸ āĻ•āĻ°ā§‡, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻžāĻ° āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°ā§‡ (āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ āĻ¨āĻ¤ā§āĻ¨ nginx āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡: /etc/nginx/conf)āĨ¤ d/${CI_COMMIT_REF_NAME}.conf) - docker-compose-nginx.yml āĻ•ā§‹āĻĄ āĻĻā§‡āĻ–ā§āĻ¨)

    - docker stack deploy -c docker-compose-nginx.yml ${CI_ENVIRONMENT_NAME} --with-registry-auth

docker-compose-nginx.yml

---
version: '3'

services:
  nginx:
    image: nginx:latest
    environment:
      CI_COMMIT_REF_NAME: ${CI_COMMIT_REF_NAME}
      NGINX_CONFIG: |-
            server {
                listen 8080;
                server_name staging_${CI_COMMIT_REF_NAME}_cluster.dev;

                location / {
                    proxy_pass http://staging_${CI_COMMIT_REF_NAME}_cluster:8080;
                }
            }
            server {
                listen 5555;
                server_name staging_${CI_COMMIT_REF_NAME}_cluster.dev;

                location / {
                    proxy_pass http://staging_${CI_COMMIT_REF_NAME}_cluster:5555;
                }
            }
    volumes:
      - /tmp/staging/nginx:/etc/nginx/conf.d
    command:
      /bin/bash -c "echo -e "$$NGINX_CONFIG" > /etc/nginx/conf.d/${CI_COMMIT_REF_NAME}.conf;
        nginx -g "daemon off;";
        /etc/init.d/nginx reload"
    ports:
      - 8080:8080
      - 5555:5555
      - 3000:3000
      - 443:443
      - 80:80
    deploy:
      replicas: 1
      placement:
        constraints: [node.id == kilqc94pi2upzvabttikrfr5d]
      restart_policy:
        condition: none
    networks:
      nw_swarm:

networks:
  nw_swarm:
    external: true

āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°ā§‡, āĻ†āĻĒāĻĄā§‡āĻŸ /etc/hosts; nginx āĻ url āĻ˛āĻŋāĻ–ā§āĻ¨:

10.50.173.106 staging_BRANCH-1831_cluster.dev

āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āĻ¨ āĻ¸ā§āĻŸā§‡āĻœāĻŋāĻ‚ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻāĻ–āĻ¨ āĻ¤āĻžāĻĻā§‡āĻ° āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻ¸āĻ‚āĻ–ā§āĻ¯āĻžāĻ¯āĻŧ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ­āĻŦāĻŋāĻˇā§āĻ¯ā§Ž āĻĒāĻ°āĻŋāĻ•āĻ˛ā§āĻĒāĻ¨āĻž:

  • āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻĒā§ƒāĻĨāĻ• āĻ•āĻ°ā§āĻ¨
  • āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĄāĻ•āĻžāĻ°āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻ›ā§‡
  • āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ•āĻŽ āĻ˛ā§‹āĻĄ āĻ¨ā§‹āĻĄ āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°ā§āĻ¨
  • āĻ¨āĻžāĻŽā§‡āĻ° āĻĒā§āĻ¯āĻžāĻŸāĻžāĻ°ā§āĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨ā§‹āĻĄāĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§āĻ¨ (āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻŽāĻ¤ā§‹ āĻ†āĻ‡āĻĄāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¨āĻž āĻ•āĻ°ā§‡)
  • āĻāĻ•āĻŸāĻŋ āĻšā§‡āĻ• āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•āĻŸāĻŋ āĻ§ā§āĻŦāĻ‚āĻ¸ āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡
  • ...

āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻļā§‡āĻˇ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨