ā§§ā§­ āĻĢ⧇āĻŦ, ⧍ā§Ļ⧍ā§Ģ¡8 āĻŽāĻŋāύāĻŋāϟ āĻĒāĻĄāĻŧāϤ⧇

Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ CI/CD: āĻŦāĻŋāĻ˛ā§āĻĄ, āĻŸā§‡āĻ¸ā§āϟ, āĻŽāĻžāχāĻ—ā§āϰ⧇āϟ, āĻĄāĻŋāĻĒā§āϞāϝāĻŧ

Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ CI/CD: āĻŦāĻŋāĻ˛ā§āĻĄ, āĻŸā§‡āĻ¸ā§āϟ, āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻāĻŦāĻ‚ āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ Kubernetes āĻŦāĻž VMs-āĻ āύāĻŋāϰāĻžāĻĒāĻĻ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ⧇āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āĻĒāĻžāχāĻĒāϞāĻžāχāύ āϧāĻžāĻĒāϗ⧁āϞ⧋āĨ¤

Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ CI/CD: āĻŦāĻŋāĻ˛ā§āĻĄ, āĻŸā§‡āĻ¸ā§āϟ, āĻŽāĻžāχāĻ—ā§āϰ⧇āϟ, āĻĄāĻŋāĻĒā§āϞāϝāĻŧ

āϕ⧇āύ Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ CI/CD āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ

āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻŦāĻžāϰāĻŦāĻžāϰ āĻāĻ•āχ āϰāĻ•āĻŽāĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϝāĻŧāĨ¤ āϕ⧇āω āĻ˛ā§āϝāĻžāĻĒāϟāĻĒ⧇ āĻ­āĻŋāĻ¨ā§āύ Go āĻ­āĻžāĻ°ā§āϏāύ⧇ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧇, āĻāĻ•āϟāĻŋ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻ­ā§āϝāĻžāϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϭ⧁āϞ⧇ āϝāĻžāϝāĻŧ, āĻāĻ•āϟāĻŋ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻŦāĻžāĻĻ āĻĻ⧇āϝāĻŧ, āĻŦāĻž āϭ⧁āϞ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰ⧇ āĻĢ⧇āϞ⧇āĨ¤ āϰāĻŋāϞāĻŋāϜ “āφāĻŽāĻžāϰ āĻ•āĻžāϛ⧇ āϚāĻ˛ā§‡â€, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āϚāϞ⧇ āύāĻžâ€”āĻāĻŦāĻ‚ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž āϤāĻž āĻ…āύ⧁āĻ­āĻŦ āĻ•āϰāĻžāϰ āĻĒāϰāχ āφāĻĒāύāĻŋ āϜāĻžāύāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻœā§‡āύāĻžāϰ⧇āĻŸā§‡āĻĄ āϕ⧋āĻĄ āĻĨāĻžāĻ•āϞ⧇ āϰāĻŋāϞāĻŋāϜ āĻĄāĻŋāϏāĻŋāĻĒā§āϞāĻŋāύ⧇āϰ āĻĻāϰāĻ•āĻžāϰ āĻ•āĻŽā§‡ āύāĻžāĨ¤ āϝāĻ–āύ āφāĻĒāύāĻŋ requirements āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇āύ, āϤāĻ–āύ āύāϤ⧁āύ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ, āĻĄā§‡āϟāĻž āĻļ⧇āĻĒ āĻŦāĻž āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋ āϝ⧁āĻ•ā§āϤ āĻšāϤ⧇ āĻĒāĻžāĻ°ā§‡â€”āĻāĻŽāύāĻ•āĻŋ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻšāĻžāϤ āĻĻāĻŋāϝāĻŧ⧇ āϕ⧋āĻĄāχ āύāĻž āϛ⧁āρāϝāĻŧ⧇āχ āĻĨāĻžāϕ⧇āύāĨ¤ āĻ āĻŋāĻ• āϤāĻ–āύāχ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻāĻ•āϟāĻŋ āϏ⧇āĻĢāϟāĻŋ āϰ⧇āϞ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāĻž āωāϚāĻŋāϤ: āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āϏāĻŦ āϏāĻŽāϝāĻŧ āĻāĻ•āχ āĻšā§‡āĻ• āĻĒāĻžāϰ āĻšāϤ⧇ āĻšāϝāĻŧāĨ¤

āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻŽāĻžāύ⧇ āφāĻĒāύāĻžāϰ āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻŦāĻ‚ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āϧāĻžāĻĒāϗ⧁āϞ⧋ āĻāĻŽāύ āĻļāĻ°ā§āϤ⧇ āϚāϞāĻŦ⧇ āϝāĻž āφāĻĒāύāĻŋ āύāĻžāĻŽ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āύāĻŋāϝāĻŧāĻŽ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āϕ⧇āϏ āĻ•āĻ­āĻžāϰ āĻ•āϰāĻŦ⧇:

  • āĻ­āĻžāĻ°ā§āϏāύ āĻĒāĻŋāύ āĻ•āϰ⧁āύ (Go āϟ⧁āϞāĻšā§‡āχāύ, āĻŦ⧇āϏ āχāĻŽā§‡āϜ, OS āĻĒā§āϝāĻžāϕ⧇āϜ)āĨ¤
  • āĻāĻ•āĻŦāĻžāϰ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧁āύ, āĻāĻ•āχ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āϏāĻŦ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύāĨ¤
  • āĻ•āύāĻĢāĻŋāĻ— āĻŦāĻžāχāύāĻžāϰāĻŋāϰ āĻŦāĻžāχāϰ⧇ āϰāĻžāϖ⧁āύ (env vars āĻŦāĻž āĻĒāϰāĻŋāĻŦ⧇āĻļāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ•āύāĻĢāĻŋāĻ— āĻĢāĻžāχāϞ)āĨ¤
  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻāĻ•āχ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āϟ⧁āϞ āĻāĻŦāĻ‚ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤
  • āϰ⧋āϞāĻŦā§āϝāĻžāĻ• āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻ•āϰ⧁āύ: āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āϰāĻžāϖ⧁āύ āĻāĻŦāĻ‚ āϜāĻžāύ⧁āύ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇āϰ āϕ⧀ āĻšāĻŦ⧇āĨ¤

Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ CI/CD-āĻāϰ āωāĻĻā§āĻĻ⧇āĻļā§āϝ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāϤāĻž āύāĻŋāĻœā§‡āχ āύāϝāĻŧ; āĻāϟāĻŋ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋāϝ⧋āĻ—ā§āϝ āϰāĻŋāϞāĻŋāϜ āϝāĻžāϤ⧇ āĻŽāĻžāύāϏāĻŋāĻ• āϚāĻžāĻĒ āĻ•āĻŽā§‡: āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧁āύ, āĻĒāĻžāχāĻĒāϞāĻžāχāύ āϚāĻžāϞāĻžāύ, āĻāĻŦāĻ‚ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āϰ⧁āύ āϝ⧇ āϝāĻž āĻŦ⧇āϰ āĻšāĻšā§āϛ⧇ āϤāĻž āĻĄāĻŋāĻĒā§āϞāϝāĻŧāϝ⧋āĻ—ā§āϝāĨ¤

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ AppMaster-āĻāϰ āĻŽāϤ⧋ āĻœā§‡āύāĻžāϰ⧇āϟāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ āϝāĻž Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āϤ⧈āϰāĻŋ āĻ•āϰ⧇, āϤāĻŦ⧇ āĻāϟāĻŋ āφāϰāĻ“ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖāĨ¤ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž āĻāĻ•āϟāĻŋ āϏ⧁āĻŦāĻŋāϧāĻž, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϤāĻ–āύāχ āύāĻŋāϰāĻžāĻĒāĻĻ āĻŦā§‹āϧ āĻ•āϰ⧇ āϝāĻ–āύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻĨ⧇āϕ⧇ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āϝāĻžāĻ“āϝāĻŧāĻžāϰ āĻĒāĻĨāϟāĻŋ āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻ•, āĻŸā§‡āĻ¸ā§āϟāĻ•ā§ƒāϤ āĻāĻŦāĻ‚ āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ āĻšāϝāĻŧāĨ¤

āϰāĻžāύāϟāĻžāχāĻŽ āĻŦ⧇āϛ⧇ āύāĻŋāύ āĻāĻŦāĻ‚ āφāϗ⧇āχ “āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ” āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ

“āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ” āĻŽāĻžāύ⧇ āĻāĻ•āχ āχāύāĻĒ⧁āϟ āĻĨ⧇āϕ⧇ āĻāĻ•āχ āϰ⧇āϜāĻžāĻ˛ā§āϟ āĻĒāĻžāĻ“āϝāĻŧāĻžâ€”āύ⧋ āĻŽā§‡āϟāĻžāϰ āϕ⧋āĻĨāĻžāϝāĻŧ āϚāĻžāϞāĻžāĻšā§āϛ⧇āύāĨ¤ Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āĻāϟāĻž āĻļ⧁āϰ⧁ āĻšāϝāĻŧ āĻāχ āĻŦāĻŋāώāϝāĻŧ⧇ āĻāĻ•āĻŽāϤ āĻšāĻ“āϝāĻŧāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡: āĻĄā§‡āĻ­, āĻ¸ā§āĻŸā§‡āϜ āĻāĻŦāĻ‚ āĻĒā§āϰ⧋āĻĄā§‡ āϕ⧀ āĻāĻ•āχ āĻĨāĻžāĻ•āϤ⧇ āĻšāĻŦ⧇āĨ¤

āϏāĻžāϧāĻžāϰāĻŖ āύāύ-āύ⧇āĻ—ā§‹āĻļāĻŋāϝāĻŧ⧇āĻŦāϞāϗ⧁āϞ⧋ āĻšāϞ Go āĻ­āĻžāĻ°ā§āϏāύ, āĻŦ⧇āϏ OS āχāĻŽā§‡āϜ, āĻŦāĻŋāĻ˛ā§āĻĄ āĻĢā§āĻ˛ā§āϝāĻžāĻ—, āĻāĻŦāĻ‚ āĻ•āύāĻĢāĻŋāĻ— āϞ⧋āĻĄāĻŋāĻ‚ āĻĒāĻĻā§āϧāϤāĻŋāĨ¤ āĻāϗ⧁āϞ⧋āϰ āϕ⧋āύ⧋āϟāĻž āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āĻŦāĻĻāϞāĻžāϞ⧇ āφāĻĒāύāĻŋ TLS āφāϚāϰāĻŖ, āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒā§āϝāĻžāϕ⧇āϜ, āĻŦāĻž āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āĻĻ⧇āĻ–āĻž āĻĻ⧇āϝāĻŧ āĻāĻŽāύ āĻŦāĻžāĻ— āĻĒ⧇āϝāĻŧ⧇ āϝāĻžāĻŦ⧇āύāĨ¤

āĻĒāϰāĻŋāĻŦ⧇āĻļāĻ—āϤ āĻĄā§āϰāĻŋāĻĢā§āϟ āϏāϚāϰāĻžāϚāϰ āĻāĻ•āχ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻĻ⧇āĻ–āĻž āĻĻ⧇āϝāĻŧ:

  • OS āĻāĻŦāĻ‚ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ (āĻ­āĻŋāĻ¨ā§āύ āĻĄāĻŋāĻ¸ā§āĻŸā§āϰ⧋ āĻ­āĻžāĻ°ā§āϏāύ, āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ CA āϏāĻžāĻ°ā§āϟāĻŋāĻĢāĻŋāϕ⧇āϟ, āϟāĻžāχāĻŽāĻœā§‹āύ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ)
  • āĻ•āύāĻĢāĻŋāĻ— āĻŽāĻžāύ (āĻĢāĻŋāϚāĻžāϰ āĻĢā§āĻ˛ā§āϝāĻžāĻ—, āϟāĻžāχāĻŽāφāωāϟ, allowed origins, āĻāĻ•ā§āϏāϟāĻžāĻ°ā§āύāĻžāϞ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ URL)
  • āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āφāĻ•āĻžāϰ āĻ“ āϏ⧇āϟāĻŋāĻ‚āϏ (āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ, āĻāĻ•ā§āϏāĻŸā§‡āύāĻļāύ, āĻ•āϞ⧇āĻļāύ, āĻ•āĻžāύ⧇āĻ•āĻļāύ āϞāĻŋāĻŽāĻŋāϟ)
  • āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞāĻŋāĻ‚ (āϕ⧋āĻĨāĻžāϝāĻŧ āĻĨāĻžāϕ⧇, āϕ⧀āĻ­āĻžāĻŦ⧇ āϰ⧋āĻŸā§‡āϟ āĻšāϝāĻŧ, āϕ⧇ āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰ⧇)
  • āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āĻ…āύ⧁āĻŽāĻžāύ (DNS, āĻĢāĻžāϝāĻŧāĻžāϰāĻ“āϝāĻŧāĻžāϞ, āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻĄāĻŋāϏāĻ•āĻ­āĻžāϰāĻŋ)

Kubernetes āĻāĻŦāĻ‚ VMs-āĻāϰ āĻŽāĻ§ā§āϝ⧇ āĻŦ⧇āϛ⧇ āύ⧇āĻ“āϝāĻŧāĻž “āϕ⧋āύāϟāĻž āϏ⧇āϰāĻžâ€-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻĻāϞ⧇āϰ āĻ•ā§āϝāĻžāĻĒāĻžāĻŦāĻŋāϞāĻŋāϟāĻŋāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤

Kubernetes āĻ­āĻžāϞ⧋ āϝāĻ–āύ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŸā§‹āĻ¸ā§āϕ⧇āϞāĻŋāĻ‚, āϰ⧋āϞāĻŋāĻ‚ āφāĻĒāĻĄā§‡āϟ āĻāĻŦāĻ‚ āĻ…āύ⧇āĻ• āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϚāĻžāϞāĻžāύ⧋āϰ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻĒāĻĻā§āϧāϤāĻŋāϰ āĻĻāϰāĻ•āĻžāϰāĨ¤ āĻāϟāĻŋ āĻ•āύāϏāĻŋāĻ¸ā§āĻŸā§‡āĻ¨ā§āϏāĻŋ āĻĒā§āϰāϝāĻŧā§‹āĻ— āĻ•āϰāϤ⧇āĻ“ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇ āĻ•āĻžāϰāĻŖ āĻĒāĻĄāϗ⧁āϞ⧋ āĻāĻ•āχ āχāĻŽā§‡āϜ āĻĨ⧇āϕ⧇ āϚāϞ⧇āĨ¤ VMs āĻ āĻŋāĻ• āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻ–āύ āφāĻĒāύāĻžāϰ āĻāĻ• āĻŦāĻž āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āφāϛ⧇, āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻĻāϞ, āĻāĻŦāĻ‚ āφāĻĒāύāĻŋ āĻ•āĻŽ āĻŽā§āĻ­āĻŋāĻ‚ āĻĒāĻžāĻ°ā§āϟāϏ āϚāĻžāύāĨ¤

āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻāĻ•āχ āϰāĻžāĻ–āĻž āϝāĻžāϝāĻŧ āĻāĻŽāύāĻ•āĻŋ āϝāĻĻāĻŋ āϰāĻžāύāϟāĻžāχāĻŽ āĻ­āĻŋāĻ¨ā§āύ āĻšāϝāĻŧ—āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻ“ āϤāĻžāϰ āĻ•āύāĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āϟ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻ•āϰ⧇āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖ: CI-āϤ⧇ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻ•āχ āĻ•āύāĻŸā§‡āχāύāĻžāϰ āχāĻŽā§‡āϜ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧁āύ, āĻāĻ•āχ āĻŸā§‡āĻ¸ā§āϟ āϧāĻžāĻĒ āϚāĻžāϞāĻžāύ, āĻāĻŦāĻ‚ āĻāĻ•āχ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻŦāĻžāĻ¨ā§āĻĄā§‡āϞ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰ⧁āύāĨ¤ āϤāĻžāϰāĻĒāϰ āϕ⧇āĻŦāϞ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āϧāĻžāĻĒ āĻŦāĻĻāϞāĻžāĻŦ⧇: Kubernetes āύāϤ⧁āύ āχāĻŽā§‡āϜ āĻŸā§āϝāĻžāĻ— āĻ…ā§āϝāĻžāĻĒā§āϞāĻžāχ āĻ•āϰāĻŦ⧇, āφāϰ VMs āχāĻŽā§‡āϜ āĻŸā§‡āύ⧇ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰāĻŦ⧇āĨ¤

āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻžāϝāĻŧā§‹āĻ—āĻŋāĻ• āωāĻĻāĻžāĻšāϰāĻŖ: āĻāĻ•āϟāĻŋ āĻĻāϞ AppMaster āĻĨ⧇āϕ⧇ Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚-āĻ Kubernetes-āĻ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āĻāĻ–āύ⧋ VM āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ āϝāĻĻāĻŋ āĻĻ⧁āĻŸā§‹āχ āĻāĻ•āχ āχāĻŽā§‡āϜ āĻŸā§‡āύ⧇ āύ⧇āϝāĻŧ āĻāĻŦāĻ‚ āĻāĻ•āχ āϧāϰāύ⧇āϰ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ¸ā§āĻŸā§‹āϰ āĻĨ⧇āϕ⧇ āĻ•āύāĻĢāĻŋāĻ— āϞ⧋āĻĄ āĻ•āϰ⧇, āϤāĻžāĻšāϞ⧇ “āĻ­āĻŋāĻ¨ā§āύ(runtime)” āϕ⧇āĻŦāϞ āĻāĻ•āϟāĻŋ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻŦāĻŋāĻŦāϰāϪ⧇ āĻĒāϰāĻŋāĻŖāϤ āĻšāϝāĻŧ, āĻŦāĻžāϗ⧇āϰ āĻ‰ā§ŽāϏ āύāϝāĻŧāĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ AppMaster (appmaster.io) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ, āĻāχ āĻŽāĻĄā§‡āϞāϟāĻŋ āĻ­āĻžāϞ⧋ āĻĢāĻŋāϟ āĻ•āϰ⧇ āĻ•āĻžāϰāĻŖ āφāĻĒāύāĻŋ āĻŽā§āϝāĻžāύ⧇āϜāĻĄ āĻ•ā§āϞāĻžāωāĻĄ āϟāĻžāĻ°ā§āϗ⧇āĻŸā§‡ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻŦāĻž āϏ⧋āĻ°ā§āϏ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇ āύāĻŋāĻœā§‡āϰ āχ⤍āĨā¤Ģā§āϰāĻž-āϤ⧇ āĻāĻ•āχ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻāĻŽāύ āĻāĻ•āϟāĻŋ āϏāĻšāϜ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻŽā§āϝāĻžāĻĒ āϝāĻž āϏāĻŦāĻžāχāϕ⧇ āĻŦā§āϝāĻžāĻ–ā§āϝāĻž āĻ•āϰāĻž āϝāĻžāϝāĻŧ

āĻāĻ•āϟāĻŋ āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āϏāĻšāϜāĻ­āĻžāĻŦ⧇ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰāĻž āϝāĻžāϝāĻŧ: āϕ⧋āĻĄ āĻšā§‡āĻ• āĻ•āϰ⧁āύ, āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧁āύ, āĻĒā§āϰāĻŽāĻžāĻŖ āĻ•āϰ⧁āύ āĻ•āĻžāϜ āĻ•āϰāϛ⧇, āĻāĻ•āχ āϜāĻŋāύāĻŋāϏ āĻļāĻŋāĻĒ āĻ•āϰ⧁āύ āϝ⧇āϟāĻž āφāĻĒāύāĻŋ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰ⧇āϛ⧇āύ, āϤāĻžāϰāĻĒāϰ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύāĨ¤ āĻāχ āĻ¸ā§āĻĒāĻˇā§āϟāϤāĻž āĻ…āĻ°ā§āĻĨāĻŦāĻšâ€”āĻŦāĻŋāĻļ⧇āώāϤ āϝāĻ–āύ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻšāϝāĻŧ (āωāĻĻāĻžāĻšāϰāĻŖ: AppMaster), āĻ•āĻžāϰāĻŖ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞ⧋ āĻ…āύ⧇āĻ• āĻĢāĻžāχāϞ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻŋ āĻĻā§āϰ⧁āϤ, āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻ• āĻĢāĻŋāĻĄāĻŦā§āϝāĻžāĻ• āϚāĻžāύāĨ¤

āϏ⧋āϜāĻžāϏāĻžāĻĒā§āϟāĻž CI/CD āĻĢā§āϞ⧋ āĻĻ⧇āĻ–āϤ⧇ āĻāχ āϰāĻ•āĻŽ:

  • Lint āĻāĻŦāĻ‚ āĻŦ⧇āϏāĻŋāĻ• āĻšā§‡āĻ•
  • Build
  • Unit tests
  • Integration checks
  • Package (immutable artifacts)
  • Migrate (āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŋāϤ āϧāĻžāĻĒ)
  • Deploy

āĻ—āĻ āύ āĻāĻŽāύ āϰāĻžāϖ⧁āύ āϝāĻžāϤ⧇ āĻĢ⧇āχāϞāĻžāϞāϗ⧁āϞāĻŋ āĻļ⧁āϰ⧁āϰ āĻĻāĻŋāϕ⧇ āĻĨāĻžāĻŽāĻžāϝāĻŧāĨ¤ āϝāĻĻāĻŋ lint āĻĢ⧇āχāϞ āĻ•āϰ⧇, āĻŦāĻžāĻ•āĻŋāϗ⧁āϞ⧋ āϚāϞāĻž āωāϚāĻŋāϤ āύāĻžāĨ¤ āϝāĻĻāĻŋ āĻŦāĻŋāĻ˛ā§āĻĄ āĻĢ⧇āχāϞ āĻ•āϰ⧇, āϤāĻžāĻšāϞ⧇ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻšā§‡āϕ⧇āϰ āϜāĻ¨ā§āϝ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŽāϝāĻŧ āύāĻˇā§āϟ āĻ•āϰāĻž āωāϚāĻŋāϤ āύāϝāĻŧāĨ¤ āĻāϤ⧇ āĻ–āϰāϚ āĻ•āĻŽā§‡ āĻāĻŦāĻ‚ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻĻā§āϰ⧁āϤ āĻŽāύ⧇ āĻšāϝāĻŧāĨ¤

āĻĒā§āϰāϤāĻŋāϟāĻŋ āϧāĻžāĻĒ āϏāĻŦ āĻ•āĻŽāĻŋāĻŸā§‡ āϰāĻžāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇ āĻāĻŽāύ āϜāϰ⧁āϰāĻŋ āύ⧇āχāĨ¤ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻŦāĻŋāĻ­āĻžāϜāύ āĻšāĻšā§āϛ⧇:

  • āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āĻŽāĻŋāϟ/PR: lint, build, unit tests
  • Main āĻŦā§āϰāĻžāĻžā§āϚ: integration checks, packaging
  • Release āĻŸā§āϝāĻžāĻ—: migrate, deploy

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

āĻ¸ā§āĻŸā§‡āĻĒ-āĻŦāĻžāχ-āĻ¸ā§āĻŸā§‡āĻĒ: āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻāĻŦāĻ‚ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋāϝ⧋āĻ—ā§āϝ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸ā§āĻŸā§‡āϜ

āĻŦāĻŋāĻ˛ā§āĻĄ āĻ¸ā§āĻŸā§‡āϜ āĻāĻ• āĻĒā§āϰāĻļā§āύ⧇āϰ āωāĻ¤ā§āϤāϰ āĻĻ⧇āĻŦ⧇: āφāϜ, āφāĻ—āĻžāĻŽā§€āĻ•āĻžāϞ āĻŦāĻž āĻ­āĻŋāĻ¨ā§āύ āϰāĻžāύāĻžāϰ-āĻ āĻ•āĻŋ āφāĻŽāϰāĻž āĻāĻ•āχ āĻŦāĻžāχāύāĻžāϰāĻŋ āωāĻ¤ā§āĻĒāĻ¨ā§āύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋ? āϝāĻĻāĻŋ āϤāĻž āύāĻž āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϧāĻžāĻĒ (āĻŸā§‡āĻ¸ā§āϟ, āĻŽāĻžāχāĻ—ā§āϰ⧇āϟ, āĻĄāĻŋāĻĒā§āϞāϝāĻŧ) āĻ­āϰāϏāĻž āĻ•āϰāĻž āĻ•āĻ āĻŋāύ āĻšāϝāĻŧ⧇ āĻĒāĻĄāĻŧ⧇āĨ¤

āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻĒāĻŋāύ āĻ•āϰ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύāĨ¤ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ Go āĻ­āĻžāĻ°ā§āϏāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ 1.22.x) āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϰāĻžāύāĻžāϰ āχāĻŽā§‡āϜ (Linux distro āĻāĻŦāĻ‚ āĻĒā§āϝāĻžāϕ⧇āϜ āĻ­āĻžāĻ°ā§āϏāύ)āĨ¤ "latest" āĻŸā§āϝāĻžāĻ— āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻĨ⧇āϕ⧇ āĻŦāĻŋāϰāϤ āĻĨāĻžāϕ⧁āύāĨ¤ libc, Git āĻŦāĻž Go āϟ⧁āϞāĻšā§‡āχāύ⧇ āϛ⧋āϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻ“ ‘āφāĻŽāĻžāϰ āĻŽā§‡āĻļāĻŋāύ⧇ āϚāĻ˛ā§‡â€™ āϧāϰāύ⧇āϰ āĻ¤ā§āϰ⧁āϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻž āĻĄāĻŋāĻŦāĻžāĻ— āĻ•āϰāĻž āĻ•āĻˇā§āϟāĻ•āϰāĨ¤

āĻŽāĻĄāĻŋāωāϞ āĻ•ā§āϝāĻžāϚāĻŋāĻ‚ āϏāĻšāĻžāϝāĻŧāĻ•, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋāϕ⧇ āĻ¸ā§āĻĒāĻŋāĻĄ āĻŦ⧁āĻ¸ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĻ⧇āϖ⧁āĻ¨â€”āϏ⧋āĻ°ā§āϏ-āĻ…āĻĢ-āĻŸā§āϰ⧁āĻĨ āĻšāĻŋāϏ⧇āĻŦ⧇ āύāϝāĻŧāĨ¤ Go build cache āĻāĻŦāĻ‚ module download cache āĻ•ā§āϝāĻžāĻļ āĻ•āϰ⧁āύ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāϟāĻŋāϕ⧇ go.sum āĻĻā§āĻŦāĻžāϰāĻž āϕ⧀ āĻ•āϰ⧁āύ (āĻ…āĻĨāĻŦāĻž āĻĄāĻŋāĻĒāϏ āĻŦāĻĻāϞāĻžāϞ⧇ main-āĻ āĻ•ā§āϞāĻŋāϝāĻŧāĻžāϰ āĻ•āϰ⧁āύ) āϝāĻžāϤ⧇ āύāϤ⧁āύ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋ āϏāĻŦāϏāĻŽāϝāĻŧ āĻ•ā§āϞāĻŋāύ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻŸā§āϰāĻŋāĻ—āĻžāϰ āĻ•āϰ⧇āĨ¤

āĻ•āĻŽā§āĻĒāĻžāχāϞ⧇āĻļāύ⧇āϰ āφāϗ⧇ āĻāĻ•āϟāĻŋ āĻĻā§āϰ⧁āϤ āϗ⧇āϟ āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤ āĻāϟāĻžāϕ⧇ āĻĻā§āϰ⧁āϤ āϰāĻžāϖ⧁āύ āϝāĻžāϤ⧇ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāϰāĻž āĻŦāĻžāχāĻĒāĻžāϏ āύāĻž āĻ•āϰ⧇āĨ¤ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϏ⧇āϟ āĻšāĻšā§āϛ⧇ gofmt āĻšā§‡āĻ•, go vet, āĻāĻŦāĻ‚ (āϝāĻĻāĻŋ āĻĻā§āϰ⧁āϤ āĻĨāĻžāϕ⧇) staticcheckāĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āĻŦāĻž āĻĒ⧁āϰ⧋āύ⧋ āĻœā§‡āύāĻžāϰ⧇āĻŸā§‡āĻĄ āĻĢāĻžāχāϞāϗ⧁āϞāĻŋāϤ⧇ āĻĢ⧇āχāϞ āĻ•āϰ⧁āĻ¨â€”āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āĻŸā§‡āĻĄ āϕ⧋āĻĄāĻŦ⧇āϏ⧇ āĻāϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϏāĻŽāĻ¸ā§āϝāĻžāĨ¤

āϰāĻŋāĻĒā§āϰāĻĄāĻŋāωāϏāĻŋāĻŦāϞāĻ­āĻžāĻŦ⧇ āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻ­āĻžāĻ°ā§āϏāύ āχāύāĻĢā§‹ āĻāĻŽāĻŦ⧇āĻĄ āĻ•āϰ⧁āύāĨ¤ -trimpath-āĻāϰ āĻŽāϤ⧋ āĻĢā§āĻ˛ā§āϝāĻžāĻ— āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āφāĻĒāύāĻŋ -ldflags āϏ⧇āϟ āĻ•āϰ⧇ commit SHA āĻ“ build time āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āύāĻžāĻŽāĻ•ā§ƒāϤ āĻāĻ•āĻ• āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύāĨ¤ āĻāϤ⧇ Kubernetes āĻŦāĻž VM-āĻ āĻ•āĻŋ āϚāϞāϛ⧇ āĻŸā§āϰ⧇āϏ āĻ•āϰāĻž āϏāĻšāϜ āĻšāϝāĻŧ, āĻŦāĻŋāĻļ⧇āώāϤ āϝāĻ–āύ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻšāϝāĻŧāĨ¤

āĻ¸ā§āĻŸā§‡āĻĒ-āĻŦāĻžāχ-āĻ¸ā§āĻŸā§‡āĻĒ: āĻĄāĻŋāĻĒā§āϞāϝāĻŧ⧇āϰ āφāϗ⧇ āχāĻ¸ā§āϝ⧁ āϧāϰāĻž āχāωāύāĻŋāϟ āĻ“ āĻŸā§‡āĻ¸ā§āϟ

Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĻā§āϰ⧁āϤ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ
āĻāĻ•āϟāĻŋ Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“ āĻĒ⧁āύāϰāĻžāĻŦ⧃āĻ¤ā§āϤāĻŋāϝ⧋āĻ—ā§āϝ āĻĒāĻžāχāĻĒāϞāĻžāχāύ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻļāĻŋāĻĒ āĻ•āϰ⧁āύāĨ¤
AppMaster āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ

āĻŸā§‡āĻ¸ā§āϟ āϕ⧇āĻŦāϞ āϤāĻ–āύāχ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇ āϝāĻ–āύ āϤāĻž āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ āϚāϞ⧇āĨ¤ āĻĒā§āϰāĻĨāĻŽā§‡ āĻĻā§āϰ⧁āϤ āĻĢāĻŋāĻĄāĻŦā§āϝāĻžāĻ• āϞāĻ•ā§āĻˇā§āϝ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āĻ—āĻ­ā§€āϰ āĻšā§‡āĻ• āϝ⧋āĻ— āĻ•āϰ⧁āύ āϝāĻž āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ āϏāĻŽāϝāĻŧ⧇āϰ āĻŽāĻ§ā§āϝ⧇ āĻļ⧇āώ āĻšāϝāĻŧāĨ¤

āĻĒā§āϰāϤāĻŋ āĻ•āĻŽāĻŋāĻŸā§‡ āχāωāύāĻŋāϟ āĻŸā§‡āĻ¸ā§āϟ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύāĨ¤ āĻāĻ•āϟāĻŋ āĻ•āĻ ā§‹āϰ āϟāĻžāχāĻŽāφāωāϟ āϏ⧇āϟ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻāĻ•āϟāĻŋ āφāϟāϕ⧇ āĻĨāĻžāĻ•āĻž āĻŸā§‡āĻ¸ā§āϟ āĻĒ⧁āϰ⧋ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻšā§āϝāĻžāĻ‚ āύāĻž āĻ•āĻ°ā§‡â€”āĻŦāϰāĻ‚ āϤāĻž āĻœā§‹āϰāĻžāϞ⧋āĻ­āĻžāĻŦ⧇ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϝāĻŧāĨ¤ āφāĻĒāύāĻžāϰ āĻĻāϞ⧇āϰ āϜāĻ¨ā§āϝ “āĻĒā§āϰāϤāĻŋāĻĨāĻ¤ā§āĻ¤ā§āĻŦ” āĻ•āĻŋ āĻŽāĻžāύ⧇ āϤāĻž āĻ āĻŋāĻ• āĻ•āϰ⧁āύāĨ¤ āĻ•āĻ­āĻžāϰ⧇āϜ āĻŸā§āϰāĻĢāĻŋ āύāϝāĻŧ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ•āϟāĻŋ āĻ¨ā§āϝ⧂āύāϤāĻŽ āĻŽāĻžāύ āĻĻāϞāϕ⧇ āϧ⧀āϰāĻŽāĻžāύ āϗ⧁āĻŖāĻ—āϤ āĻŦāĻŋāϞ⧋āĻĒ āϰ⧋āϧ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤

āĻāĻ•āϟāĻŋ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻŸā§‡āĻ¸ā§āϟ āĻ¸ā§āĻŸā§‡āϜ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰ⧇:

  • go test ./... āϚāĻžāϞāĻžāύ⧋ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϝāĻžāϕ⧇āĻœā§‡ āĻĒāĻžāϰ-āĻĒā§āϝāĻžāϕ⧇āϜ āϟāĻžāχāĻŽāφāωāϟ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ—ā§āϞ⧋āĻŦāĻžāϞ āϜāĻŦ āϟāĻžāχāĻŽāφāωāϟ āϏāĻšāĨ¤
  • āϟāĻžāχāĻŽāφāωāϟ āϞāĻžāĻ—āĻž āϝ⧇āϕ⧋āύ⧋ āĻŸā§‡āĻ¸ā§āϟāϕ⧇ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻŦāĻžāĻ— āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŸā§āϰāĻŋāϟ āĻ•āϰ⧁āύ, āύāĻž āϝ⧇ "CI āĻĢā§āϞ⧇āχāĻ•āĻŋ"āĨ¤
  • āϏāĻŽāĻžāϞ⧋āϚāύāĻžāĻŽā§‚āϞāĻ• āĻĒā§āϝāĻžāϕ⧇āĻœā§‡āϰ (auth, billing, permissions) āϜāĻ¨ā§āϝ āĻ•āĻ­āĻžāϰ⧇āϜ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻž āϏ⧇āϟ āĻ•āϰ⧁āύ, āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āϰāĻŋāĻĒā§‹ āύāĻž-āĻ“ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • āĻ•āύāĻ•āĻžāϰ⧇āĻ¨ā§āϏāĻŋ āĻšā§āϝāĻžāĻ¨ā§āĻĄāϞ āĻ•āϰāĻž āϕ⧋āĻĄā§‡āϰ āϜāĻ¨ā§āϝ race detector āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ (āĻ•āĻŋāω, āĻ•ā§āϝāĻžāĻļ, āĻĢā§āϝāĻžāύ-āφāωāϟ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻžāϰ)āĨ¤

āϰ⧇āϏ āĻĄāĻŋāĻŸā§‡āĻ•ā§āϟāϰ āĻŽā§‚āĻ˛ā§āϝāĻŦāĻžāύ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ…āύ⧇āĻ• āϧ⧀āϰ āĻ•āϰ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āϏāĻŽāĻā§‹āϤāĻž āĻšāϞ⧋ pull request āĻ“ āύāĻžāχāϟāϞāĻŋ āĻŦāĻŋāĻ˛ā§āĻĄā§‡ āϚāĻžāϞāĻžāύ⧋, āĻ…āĻĨāĻŦāĻž āύāĻŋāĻ°ā§āĻŦāĻžāϚāĻŋāϤ āĻĒā§āϝāĻžāϕ⧇āĻœā§‡ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āϰāĻžāĻ–āĻž, āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒ⧁āĻļ⧇ āύāĻž āϚāĻžāϞāĻžāύ⧋āĨ¤

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

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

āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋ āύāĻŋāϝāĻŧ⧇ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻšā§‡āĻ•, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϧ⧀āϰ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ›āĻžāĻĄāĻŧāĻžāχ

āĻĄāĻŋāĻĒā§āϞāϝāĻŧāĻŽā§‡āĻ¨ā§āϟāϕ⧇ āĻ•āĻŽ āĻ¸ā§āĻŸā§āϰ⧇āϏāĻĢ⧁āϞ āĻ•āϰ⧁āύ
āĻ¸ā§āĻŽā§‹āĻ• āĻšā§‡āĻ• āĻĒāĻžāϏ āĻ•āϰāĻž āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ: āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ āĻ•āύāĻĢāĻŋāĻ—, āĻ¸ā§āĻĨāĻŋāϰ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ, āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟāĨ¤
āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ

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

āφāĻĒāύāĻžāϰ āϕ⧋āĻĄ āϝāĻĻāĻŋ āĻļ⧁āϰ⧁ āϏāĻ‚āĻŦāĻžāĻĻ āĻŦāĻž āĻŽā§‚āϞ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋ āϚāĻžāϝāĻŧ, āϤāĻŦ⧇ āĻāĻĢāĻŋāĻŽā§‡āϰāĻžāϞ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧇ āĻāĻ•āϟāĻŋ āĻ…āĻ¸ā§āĻĨāĻžāϝāĻŧā§€ PostgreSQL (āφāϰ⧋ āĻĨāĻžāĻ•āϞ⧇ Redis) āĻ•āĻžāϜāϟāĻŋ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āϝāĻĨ⧇āĻˇā§āϟāĨ¤ āĻ­āĻžāĻ°ā§āϏāύāϗ⧁āϞ⧋ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇āϰ āύāĻŋāĻ•āϟ āϰāĻžāϖ⧁āύ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻĄāĻŋāĻŸā§‡āχāϞ āĻ…āύ⧁āĻ•āϰāĻŖ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤

āĻāĻ•āϟāĻŋ āĻ­āĻžāϞ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻ¸ā§āĻŸā§‡āϜ āϛ⧋āϟ āĻšāĻ“āϝāĻŧāĻž āωāĻĻā§āĻĻ⧇āĻļā§āϝāĻĒā§āϰāĻŖā§‹āĻĻāĻŋāϤ:

  • āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇āϰ āĻŽāϤ⧋ env vars āĻĻāĻŋāϝāĻŧ⧇ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ (āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŸā§‡āĻ¸ā§āϟ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ)
  • āĻāĻ•āϟāĻŋ āĻšā§‡āϞāĻĨ āĻšā§‡āĻ• āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ (āωāĻĻāĻžāĻšāϰāĻŖ: /health 200 āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰ⧇)
  • āĻāĻ• āĻŦāĻž āĻĻ⧁āχāϟāĻŋ āĻ•ā§āϰāĻŋāϟāĻŋāĻ•ā§āϝāĻžāϞ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻ•āϞ āĻ•āϰ⧇ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϕ⧋āĻĄ āĻāĻŦāĻ‚ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻļ⧇āĻĒ āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ
  • PostgreSQL (āĻāĻŦāĻ‚ í•„ėš”ā§‡ Redis) āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻĒ⧌āρāĻ›āĻžāϤ⧇ āĻĒāĻžāϰ⧇ āĻ•āĻŋāύāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύ

API āĻ•āύāĻŸā§āϰāĻžāĻ•ā§āϟ āĻšā§‡āϕ⧇āϰ āϜāĻ¨ā§āϝ, āĻāĻŽāύ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟāϗ⧁āϞ⧋āϰ āĻ“āĻĒāϰ āĻĢā§‹āĻ•āĻžāϏ āĻ•āϰ⧁āύ āϭ⧇āϙ⧇ āϗ⧇āϞ⧇ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻ•ā§āώāϤāĻŋ āĻšāĻŦ⧇āĨ¤ āĻĒ⧁āϰ⧋ āĻāĻ¨ā§āĻĄ-āϟ⧁-āĻāĻ¨ā§āĻĄ āĻ¸ā§āϝ⧁āϟ āĻĻāϰāĻ•āĻžāϰ āύ⧇āχāĨ¤ āĻ•āĻŋāϛ⧁ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ/āϰ⧇āϏāĻĒāĻ¨ā§āϏ āϏāĻ¤ā§āϝāĻŋāχ āϝāĻĨ⧇āĻˇā§āϟ: āĻŦāĻžāĻ§ā§āϝāϤāĻžāĻŽā§‚āϞāĻ• āĻĢāĻŋāĻ˛ā§āĻĄ āĻšāϞ⧇ 400, auth āύāĻž āĻĨāĻžāĻ•āϞ⧇ 401, āĻāĻŦāĻ‚ āĻšā§āϝāĻžāĻĒāĻŋ-āĻĒāĻžāĻĨ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ 200 āϏāĻš āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤ JSON āĻ•āĻŋ āĻĻ⧇āϝāĻŧāĨ¤

āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻŸā§‡āĻ¸ā§āϟāϗ⧁āϞ⧋āϕ⧇ āĻĒā§āϰāĻžāϝāĻŧāχ āϚāĻžāϞāĻžāύ⧋āϰ āĻŽāϤ⧋ āĻĻā§āϰ⧁āϤ āϰāĻžāĻ–āϤ⧇, āĻ¸ā§āϕ⧋āĻĒ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻ•ā§āϞāĻ• āĻ•āύāĻŸā§āϰ⧋āϞ āĻ•āϰ⧁āύāĨ¤ āĻāĻ• āĻĄā§‡āϟāĻžāĻŦ⧇āϏ, āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻĄāĻžāϟāĻžāϏ⧇āϟ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰ⧁āύāĨ¤ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟāχ āϚāĻžāϞāĻžāύāĨ¤ āĻ•āĻ ā§‹āϰ āϟāĻžāχāĻŽāφāωāϟ āĻĻāĻŋāύ āϝāĻžāϤ⧇ āφāϟāϕ⧇ āĻĨāĻžāĻ•āĻž āĻŦ⧁āϟ āĻ•āϝāĻŧ⧇āĻ• āĻŽāĻŋāύāĻŋāϟ āύāϝāĻŧ, āĻ•āϝāĻŧ⧇āĻ• āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ āĻĢ⧇āχāϞ āĻšāϝāĻŧāĨ¤

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇āύ (āωāĻĻāĻžāĻšāϰāĻŖ: AppMaster), āĻāχ āĻšā§‡āĻ•āϗ⧁āϞ⧋āϰ āĻ“āϜāύ āĻŦāĻžāĻĄāĻŧ⧇: āϤāĻžāϰāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϟāĻŋ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻŦ⧁āϟ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻ“āϝāĻŧ⧇āĻŦ āĻŦāĻž āĻŽā§‹āĻŦāĻžāχāϞ āĻ…ā§āϝāĻžāĻĒ āϝ⧇ API āφāĻļāĻž āĻ•āϰ⧇, āϤāĻž āĻŦāϜāĻžāϝāĻŧ āĻĨāĻžāϕ⧇āĨ¤

āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ: āύāĻŋāϰāĻžāĻĒāĻĻ āĻ…āĻ°ā§āĻĄāĻžāϰāĻŋāĻ‚, āϗ⧇āϟ āĻāĻŦāĻ‚ āϰ⧋āϞāĻŦā§āϝāĻžāĻ• āĻŦāĻžāĻ¸ā§āϤāĻŦāϤāĻž

āĻļ⧁āϰ⧁āϤ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰ⧁āύ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āϕ⧋āĻĨāĻžāϝāĻŧ āϚāϞāĻŦ⧇āĨ¤ CI-āϤ⧇ āϤāĻžāĻĻ⧇āϰ āϚāĻžāϞāĻžāύ⧋ āĻ¤ā§āϰ⧁āϟāĻŋ āϧāϰāĻžāϰ āϜāĻ¨ā§āϝ āĻ­āĻžāϞ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϏāĻžāϧāĻžāϰāĻŖāϤ CI-āϕ⧇ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ•āϰāĻž āωāϚāĻŋāϤ āύāϝāĻŧāĨ¤ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āĻĻāϞ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ⧇āϰ āϏāĻŽāϝāĻŧ āϚāĻžāϞāĻžāϝāĻŧ (āĻāĻ•āϟāĻŋ āĻĄā§‡āĻĄāĻŋāϕ⧇āĻŸā§‡āĻĄ āϧāĻžāĻĒ) āĻ…āĻĨāĻŦāĻž āĻāĻ•āϟāĻŋ āφāϞāĻžāĻĻāĻž “migrate” āϜāĻŦ āĻšāĻŋāϏ⧇āĻŦ⧇ āϚāĻžāϞāĻžāϝāĻŧ āϝāĻž āύāϤ⧁āύ āĻ­āĻžāĻ°ā§āϏāύ āĻļ⧁āϰ⧁ āĻšāĻ“āϝāĻŧāĻžāϰ āφāϗ⧇ āĻļ⧇āώ āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āύāĻŋāϝāĻŧāĻŽ: CI-āϤ⧇ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ“ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āϝāϤāϟāĻž āϏāĻŽā§āĻ­āĻŦ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇āϰ āĻ•āĻžāĻ›āĻžāĻ•āĻžāĻ›āĻŋ āϚāϞāĻžāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϝāĻŧ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āϚāĻžāϞāĻžāύ, āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ āĻāĻŦāĻ‚ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ-āϏāĻĻ⧃āĻļ āϞāĻŋāĻŽāĻŋāϟ āĻĻāĻŋāϝāĻŧ⧇āĨ¤ Kubernetes-āĻ āĻāϟāĻž āĻĒā§āϰāĻžāϝāĻŧāĻļāχ āĻāĻ•āϟāĻŋ one-off Job āĻšāϝāĻŧāĨ¤ VMs-āĻ āĻāϟāĻž āϰāĻŋāϞāĻŋāϜ āϧāĻžāĻĒ⧇ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻ•āϰāĻž āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻ…āĻ°ā§āĻĄāĻžāϰāĻŋāĻ‚ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻžāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āύāĨ¤ āϟāĻžāχāĻŽāĻ¸ā§āϟāĻžāĻŽā§āĻĒ⧇āĻĄ āĻĢāĻžāχāϞ (āĻ…āĻĨāĻŦāĻž āϏāĻŋāϕ⧋āϝāĻŧ⧇āύāĻļāĻŋāϝāĻŧāĻžāϞ āύāĻžāĻŽā§āĻŦāĻžāϰ) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ “āĻ āĻŋāĻ• āĻ•ā§āϰāĻŽā§‡, āĻāĻ•āĻŦāĻžāϰāχ āĻĒā§āϰāϝāĻŧā§‹āĻ—â€ āĻāύāĻĢā§‹āĻ°ā§āϏ āĻ•āϰ⧁āύāĨ¤ āϝ⧇āĻ–āĻžāύ⧇ āϏāĻŽā§āĻ­āĻŦ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύāϗ⧁āϞ⧋ idempotent āϰāĻžāϖ⧁āύ āϝāĻžāϤ⧇ retry āĻ•āϰāϞ⧇ āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āύāĻž āϤ⧈āϰāĻŋ āĻšāϝāĻŧ āĻŦāĻž āĻŽāĻžāĻāĻĒāĻĨ⧇ āĻ•ā§āĻ°ā§āϝāĻžāĻļ āύāĻž āĻ•āϰ⧇āĨ¤

āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻ¸ā§āĻŸā§āĻ°ā§āϝāĻžāĻŸā§‡āϜāĻŋ āϏāĻŋāĻŽā§āĻĒāϞ āϰāĻžāϖ⧁āύ:

  • āĻĒā§āϰāĻĨāĻŽā§‡ āĻ…ā§āϝāĻžāĻĄāĻŋāϟāĻŋāĻ­ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āϰ⧁āύ (āύāϤ⧁āύ āĻŸā§‡āĻŦāĻŋāϞ/āĻ•āϞāĻžāĻŽ, nullable āĻ•āϞāĻžāĻŽ, āύāϤ⧁āύ āχāύāĻĄā§‡āĻ•ā§āϏ)
  • āĻāĻ•āϟāĻŋ āϰāĻŋāϞāĻŋāĻœā§‡ āϕ⧋āĻĄ āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύ āϝ⧇ āϤāĻž āĻĒ⧁āϰāĻžāύ⧋ āĻāĻŦāĻ‚ āύāϤ⧁āύ āĻ¸ā§āĻ•āĻŋāĻŽāĻž āωāĻ­āϝāĻŧ āϏāĻžāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧇
  • āϤāĻžāϰāĻĒāϰāχ āĻ•āύāĻ¸ā§āĻŸā§āϰ⧇āχāĻ¨ā§āϟ āϰāĻŋāĻŽā§āĻ­ āĻŦāĻž āϟāĻžāχāĻŸā§‡āύ āĻ•āϰ⧁āύ (āĻ•āϞāĻžāĻŽ āĻĄā§āϰāĻĒ āĻŦāĻž NOT NULL āĻ•āϰāĻž)
  • āĻĻā§€āĻ°ā§āϘ āĻ…āĻĒāĻžāϰ⧇āĻļāύāϗ⧁āϞ⧋ āϏ⧇āĻĢ āĻ•āϰ⧁āύ (āϝ⧇āĻŽāύ, āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ āĻšāϞ⧇ āχāύāĻĄā§‡āĻ•ā§āϏ āĻ•āύāĻ•āĻžāϰ⧇āĻ¨ā§āϟāϞāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻž)

āĻ•āĻŋāϛ⧁ āϚāĻžāϞāĻžāύ⧋āϰ āφāϗ⧇ āĻāĻ•āϟāĻŋ āϏ⧇āĻĢāϟāĻŋ āϗ⧇āϟ āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āϞāĻ• āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻžāϤ⧇ āĻāĻ•āĻŦāĻžāϰ⧇ āĻāĻ•āϟāĻŋāχ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āϚāϞ⧇, āĻĒā§āϞāĻžāϏ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āύ⧀āϤāĻŋ āϝ⧇ “āĻŦāĻŋāĻĒāĻœā§āϜāύāĻ• āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ›āĻžāĻĄāĻŧāĻž āύ⧇āχāĨ¤â€ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ⧇ DROP TABLE āĻŦāĻž DROP COLUMN āĻĨāĻžāϕ⧇ āϤāĻžāĻšāϞ⧇ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞ āϗ⧇āϟ āĻ›āĻžāĻĄāĻŧāĻž āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻĢ⧇āϞ āĻ•āϰ⧁āύāĨ¤

āϰ⧋āϞāĻŦā§āϝāĻžāĻ• āĻ•āĻ āĻŋāύ āĻŦāĻžāĻ¸ā§āϤāĻŦāϤāĻž: āĻ…āύ⧇āĻ• āĻ¸ā§āĻ•āĻŋāĻŽāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āωāĻ˛ā§āϟāĻžāύ⧋ āϝāĻžāϝāĻŧ āύāĻžāĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āĻ•āϞāĻžāĻŽ āĻĄā§āϰāĻĒ āĻ•āϰ⧇āύ, āĻĄā§‡āϟāĻž āĻĢāĻŋāϰ⧇ āφāύāĻžāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻžāĨ¤ āϰ⧋āϞāĻŦā§āϝāĻžāĻ• āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻĢāϰāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻĢāĻŋāĻ•ā§āϏ⧇āϰ āϚāĻžāϰāĻĒāĻžāĻļ⧇ āĻ•āϰ⧁āύ: āĻĄāĻžāωāύ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻļ⧁āϧ⧁ āϤāĻ–āύāχ āϰāĻžāϖ⧁āύ āϝāĻ–āύ āύāĻŋāϰāĻžāĻĒāĻĻ, āĻ…āĻ¨ā§āϝāĻĨāĻžāϝāĻŧ āĻŦā§āϝāĻžāĻ•āφāĻĒ āĻāĻŦāĻ‚ āĻĢāϰāĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻ­āϰāϏāĻž āĻ•āϰ⧁āύāĨ¤

āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ⧇āϰ āϏāĻ™ā§āϗ⧇ āĻāĻ•āϟāĻŋ āϰāĻŋāĻ•āĻ­āĻžāϰāĻŋ āĻĒā§āĻ˛ā§āϝāĻžāύ āϜ⧁āϟāĻžāύ: āĻŽāĻžāĻāĻĒāĻĨ⧇ āĻĢ⧇āϞ āĻšāϞ⧇ āϕ⧀ āĻ•āϰāĻŦ⧇āύ, āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻĒ āϰ⧋āϞāĻŦā§āϝāĻžāĻ• āĻ•āϰāϤ⧇ āĻšāϞ⧇ āϕ⧀ āĻšāĻŦ⧇āĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇āύ (āωāĻĻāĻžāĻšāϰāĻŖ: AppMaster), āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύāϕ⧇ āφāĻĒāύāĻžāϰ āϰāĻŋāϞāĻŋāϜ āĻ•āύāĻŸā§āĻ°ā§āϝāĻžāĻ•ā§āĻŸā§‡āϰ āĻ…āĻ‚āĻļ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĻ⧇āϖ⧁āύ āϝāĻžāϤ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āϕ⧋āĻĄ āĻāĻŦāĻ‚ āĻ¸ā§āĻ•āĻŋāĻŽāĻž āϏāĻŋāĻ™ā§āϕ⧇ āĻĨāĻžāϕ⧇āĨ¤

āĻĒā§āϝāĻžāϕ⧇āϜāĻŋāĻ‚ āĻ“ āĻ•āύāĻĢāĻŋāĻ—: āφāĻĒāύāĻŋ āĻŦāĻŋāĻļā§āĻŦāĻžāϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŽāύ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ

āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āϟ āĻ¸ā§āĻŸā§āϝāĻžāĻ• āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ
āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϞ⧇ āĻāĻ• āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ, āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒ āĻāĻŦāĻ‚ āύ⧇āϟāĻŋāĻ­ āĻŽā§‹āĻŦāĻžāχāϞ āĻ…ā§āϝāĻžāĻĒ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧁āύāĨ¤
AppMaster āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ

āĻĒāĻžāχāĻĒāϞāĻžāχāύāϟāĻŋ āϤāĻ–āύāχ āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ āĻŽāύ⧇ āĻšāϝāĻŧ āϝāĻ–āύ āφāĻĒāύāĻŋ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧇āύ āϏ⧇āϟāĻž āϏāĻŦāϏāĻŽāϝāĻŧ āφāĻĒāύāĻŋ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰāĻž āĻāĻ•āχ āϜāĻŋāύāĻŋāϏ āĻšāϝāĻŧāĨ¤ āĻāϟāĻŋ āĻĒā§āϝāĻžāϕ⧇āϜāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ•āύāĻĢāĻŋāϗ⧇ āύ⧇āĻŽā§‡ āφāϏ⧇āĨ¤ āĻŦāĻŋāĻ˛ā§āĻĄ āφāωāϟāĻĒ⧁āϟāϕ⧇ āϏ⧀āϞāĻĄ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āϏāĻŦ āĻĒāϰāĻŋāĻŦ⧇āĻļāĻ—āϤ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻŦāĻžāχāύāĻžāϰāĻŋāϰ āĻŦāĻžāχāϰ⧇ āϰāĻžāϖ⧁āύāĨ¤

āĻĒā§āϝāĻžāϕ⧇āϜāĻŋāĻ‚ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻĻ⧁āĻŸā§‹ āĻĒāĻĨ⧇ āϝāĻžāϝāĻŧāĨ¤ āĻ•āύāĻŸā§‡āχāύāĻžāϰ āχāĻŽā§‡āϜ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āϝāĻ–āύ āφāĻĒāύāĻŋ Kubernetes-āĻ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧇āύ, āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ OS āϞ⧇āϝāĻŧāĻžāϰ āĻĒāĻŋāύ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϰ⧋āϞāφāωāϟ āĻ•āύāϏāĻŋāĻ¸ā§āĻŸā§‡āĻ¨ā§āϟ āĻ•āϰ⧇āĨ¤ āϝāĻĻāĻŋ VM āϞāĻžāϗ⧇, VM āĻŦāĻžāĻ¨ā§āĻĄā§‡āϞāĻ“ āĻŦāĻŋāĻļā§āĻŦāĻžāϏāϝ⧋āĻ—ā§āϝ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻĻāĻŋ āϤāĻž āĻ•āĻŽā§āĻĒāĻžāχāϞ āĻ•āϰāĻž āĻŦāĻžāχāύāĻžāϰāĻŋ āĻĒā§āϞāĻžāϏ āϰāĻžāύāϟāĻžāχāĻŽā§‡ āĻĻāϰāĻ•āĻžāϰāĻŋ āϛ⧋āϟ āĻĢāĻžāχāϞāϗ⧁āϞ⧋ (CA certs, āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ, āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ• āĻ…ā§āϝāĻžāϏ⧇āϟ) āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāĻŦāĻžāϰ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āĻ•āύāĻĢāĻŋāĻ— āĻŦāĻžāχāύāĻžāϰāĻŋāϰ āĻ­āĻŋāϤāϰ⧇ āύāĻž āϰāĻžāϖ⧁āύāĨ¤ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— āϏ⧇āϟāĻŋāĻ‚āϏ⧇āϰ āϜāĻ¨ā§āϝ environment variables āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ (āĻĒā§‹āĻ°ā§āϟ, DB host, āĻĢāĻŋāϚāĻžāϰ āĻĢā§āĻ˛ā§āϝāĻžāĻ—)āĨ¤ āĻ•āύāĻĢāĻŋāĻ— āĻĢāĻžāχāϞ āϤāĻ–āύāχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻ–āύ āĻŽāĻžāύāϗ⧁āϞ⧋ āĻŦāĻĄāĻŧ āĻŦāĻž āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāĻ°ā§āĻĄ āĻšāϝāĻŧ, āĻāĻŦāĻ‚ āĻāϟāĻŋāϕ⧇ āĻĒāϰāĻŋāĻŦ⧇āĻļāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āϰāĻžāϖ⧁āύāĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻ•āύāĻĢāĻŋāĻ— āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύ, āĻāϟāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦāĻŋāĻŦ⧇āϚāύāĻž āĻ•āϰ⧁āύ: āϞāĻ•āĻĄ āĻĒāĻžāϰāĻŽāĻŋāĻļāύ, āĻ…āĻĄāĻŋāϟ āϞāĻ—, āĻāĻŦāĻ‚ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻĢāϞāĻŦā§āϝāĻžāĻ• āĻĒā§āĻ˛ā§āϝāĻžāύāĨ¤

āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻšāϞ⧋ āϞāĻžāχāύ āφāĻĒāύāĻŋ āĻ•ā§āϰāϏ āĻ•āϰāĻŦ⧇āύ āύāĻžāĨ¤ āϏ⧇āϗ⧁āϞ⧋ āϰāĻŋāĻĒā§‹āϤ⧇, āχāĻŽā§‡āĻœā§‡ āĻŦāĻž CI āϞāϗ⧇ āϝāĻžāĻŦ⧇ āύāĻžāĨ¤ āĻ¸ā§āϟāĻžāĻ°ā§āϟāφāĻĒ⧇ āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻ•āϰāĻž āĻāĻĄāĻŧāĻžāύāĨ¤ CI āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ¸ā§āĻŸā§‹āϰ⧇ āϏāĻŋāĻ•ā§āϰ⧇āϟ āϰāĻžāϖ⧁āύ āĻāĻŦāĻ‚ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āϟāĻžāχāĻŽā§‡ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧁āύāĨ¤

āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻŸā§āϰ⧇āϏ⧇āĻŦāϞ āĻ•āϰāϤ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻŦāĻŋāĻ˛ā§āĻĄā§‡ āφāχāĻĄā§‡āĻ¨ā§āϟāĻŋāϟāĻŋ āĻāĻŽāĻŦ⧇āĻĄ āĻ•āϰ⧁āύ: āĻ•āĻŽāĻŋāϟ SHA āϏāĻš āĻŸā§āϝāĻžāĻ— āĻ•āϰ⧁āύ, āĻŦāĻŋāĻ˛ā§āĻĄ āĻŽā§‡āϟāĻžāĻĄāĻžāϟāĻž (āĻ­āĻžāĻ°ā§āϏāύ, āĻ•āĻŽāĻŋāϟ, āĻŦāĻŋāĻ˛ā§āĻĄ āϟāĻžāχāĻŽ) āĻāĻ•āϟāĻŋ info endpoint-āĻ āϰāĻžāϖ⧁āύ, āĻāĻŦāĻ‚ āĻĄāĻŋāĻĒā§āϞāϝāĻŧāĻŽā§‡āĻ¨ā§āϟ āϞāϗ⧇ āφāĻ°ā§āĻ•āĻžāχāĻ­ āĻ•āϰ⧁āύāĨ¤ āĻāĻ• āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦāĻž āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ āĻĨ⧇āϕ⧇ “āĻ•āĻŋ āϚāϞāĻ›ā§‡â€ āϜāĻŦāĻžāĻŦ āĻĒāĻžāĻ“āϝāĻŧāĻž āϏāĻšāϜ āĻ•āϰ⧁āύāĨ¤

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇āύ (āωāĻĻāĻžāĻšāϰāĻŖ: AppMaster), āϤāĻžāĻšāϞ⧇ āĻāχ āĻĄāĻŋāϏāĻŋāĻĒā§āϞāĻŋāύ āφāϰāĻ“ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ: āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž āϤāĻ–āύāχ āύāĻŋāϰāĻžāĻĒāĻĻ āϝāĻ–āύ āφāĻĒāύāĻžāϰ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āύāĻžāĻŽāĻ•āϰāĻŖ āĻ“ āĻ•āύāĻĢāĻŋāĻ— āύāĻŋāϝāĻŧāĻŽ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰāĻŋāϞāĻŋāϜāϕ⧇ āĻĒ⧁āύāĻ°ā§ā§ŽāĻĒāĻžāĻĻāύāϝ⧋āĻ—ā§āϝ āĻ•āϰ⧇āĨ¤

Kubernetes āĻŦāĻž VMs-āĻ āφāĻļā§āϚāĻ°ā§āϝ āĻ›āĻžāĻĄāĻŧāĻž āĻĄāĻŋāĻĒā§āϞāϝāĻŧ

āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻŦā§āϝāĻ°ā§āĻĨāϤāĻž “āĻ–āĻžāϰāĻžāĻĒ āϕ⧋āĻĄâ€ āύāĻž; āĻāϗ⧁āϞ⧋ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇āϰ āĻ…āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝ: āĻ­āĻŋāĻ¨ā§āύ āĻ•āύāĻĢāĻŋāĻ—, āĻ…āύ⧁āĻĒāĻ¸ā§āĻĨāĻŋāϤ āϏāĻŋāĻ•ā§āϰ⧇āϟ, āĻŦāĻž āĻāĻŽāύ āĻāĻ•āϟāĻŋ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϝāĻž āĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻšāϝāĻŧ āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāϏāϞ⧇ āϰ⧇āĻĄāĻŋ āύāϝāĻŧāĨ¤ āϞāĻ•ā§āĻˇā§āϝ āϏāϰāϞ: āĻāĻ•āχ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āϏāĻŦ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰāĻž, āĻāĻŦāĻ‚ āϕ⧇āĻŦāϞ āĻ•āύāĻĢāĻŋāĻ— āĻŦāĻĻāϞāĻžāύ⧋āĨ¤

Kubernetes: āĻĄāĻŋāĻĒā§āϞāϝāĻŧāϕ⧇ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŋāϤ āϰ⧋āϞāφāωāϟ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĻ⧇āϖ⧁āύ

Kubernetes-āĻ āĻāĻ•āϟāĻŋ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŋāϤ āϰ⧋āϞāφāωāϟ āϞāĻ•ā§āĻˇā§āϝ āĻ•āϰ⧁āύāĨ¤ āϰ⧋āϞāĻŋāĻ‚ āφāĻĒāĻĄā§‡āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āϧ⧀āϰ⧇ āϧ⧀āϰ⧇ āĻĒāĻĄ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāϤ āĻšāϝāĻŧ, āĻāĻŦāĻ‚ readiness āĻ“ liveness āĻšā§‡āĻ• āϝ⧋āĻ— āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āϜāĻžāύ⧇ āĻ•āĻ–āύ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āĻĒāĻžāĻ āĻžāϤ⧇ āĻšāĻŦ⧇ āĻāĻŦāĻ‚ āĻ•āĻ–āύ āφāϟāϕ⧇ āϗ⧇āϞ⧇ āĻ•āύāĻŸā§‡āχāύāĻžāϰ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤ resource requests āĻ“ limits āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖâ€”āĻāĻ•āϟāĻŋ Go āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϝāĻž āĻŦāĻĄāĻŧ CI āϰāĻžāύāĻžāϰ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇, āĻāĻ•āϟāĻŋ āϛ⧋āϟ āύ⧋āĻĄā§‡ OOM-killed āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻ•āύāĻĢāĻŋāĻ— āĻ“ āϏāĻŋāĻ•ā§āϰ⧇āϟ āχāĻŽā§‡āĻœā§‡āϰ āĻŦāĻžāχāϰ⧇ āϰāĻžāϖ⧁āύāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āĻŽāĻŋāĻŸā§‡ āĻāĻ•āϟāĻŋ āχāĻŽā§‡āϜ āĻŦāĻžāύāĻžāύ, āϤāĻžāϰāĻĒāϰ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āϟāĻžāχāĻŽā§‡ āĻĒāϰāĻŋāĻŦ⧇āĻļ-āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āϏ⧇āϟāĻŋāĻ‚ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧁āύ (ConfigMaps, Secrets, āĻ…āĻĨāĻŦāĻž āφāĻĒāύāĻžāϰ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻŽā§āϝāĻžāύ⧇āϜāĻžāϰ)āĨ¤ āĻāĻ­āĻžāĻŦ⧇ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻ“ āĻĒā§āϰ⧋āĻĄ āĻāĻ•āχ āĻŦāĻŋāϟ āϚāĻžāϞāĻžāϝāĻŧāĨ¤

VMs: systemd āφāĻĒāύāĻžāϕ⧇ āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧ āĻ…āύ⧇āĻ• āĻ•āĻŋāϛ⧁ āĻĻ⧇āϝāĻŧ

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞ āĻŽā§‡āĻļāĻŋāύ⧇ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧇āύ, systemd āφāĻĒāύāĻžāϰ "āĻŽāĻŋāύāĻŋ āĻ…āĻ°ā§āϕ⧇āĻ¸ā§āĻŸā§āϰ⧇āϟāϰ" āĻšāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāĻ•āϟāĻŋ āχāωāύāĻŋāϟ āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āĻ¸ā§āĻĒāĻˇā§āϟ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻŋāĻ‚ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋ, environment file, āĻāĻŦāĻ‚ restart policy āϏāĻšāĨ¤ āϞāĻ—āϗ⧁āϞ⧋ predictable āϰāĻžāϖ⧁āύ stdout/stderr-āϕ⧇ āφāĻĒāύāĻžāϰ āϞāĻ— āĻ•āĻžāϞ⧇āĻ•ā§āϟāϰ⧇ āĻŦāĻž journald-āĻ āĻĒāĻžāĻ āĻŋāϝāĻŧ⧇, āϝāĻžāϤ⧇ incidents SSH āĻ¸ā§āĻ•ā§āϝāĻžāϭ⧇āĻžā§āϜāĻžāϰ āĻšāĻžāĻ¨ā§āĻŸā§‡ āĻĒāϰāĻŋāĻŖāϤ āύāĻž āĻšāϝāĻŧāĨ¤

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

āĻāĻ•āϟāĻŋ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ "āϏāĻŽā§āĻĒāĻ¨ā§āύ" āϚāĻŋāĻšā§āύāĻŋāϤ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϜāĻžāϝāĻŧāĻ—āĻžāϝāĻŧ āĻāĻ•āχ āĻĒā§‹āĻ¸ā§āϟ-āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ¸ā§āĻŽā§‹āĻ• āĻšā§‡āĻ• āϚāĻžāϞāĻžāύ:

  • āĻšā§‡āϞāĻĨ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ OK āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāϛ⧇ āĻāĻŦāĻ‚ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋāϗ⧁āϞ⧋ āĻĒ⧌āρāĻ›āĻžāϝāĻŧ
  • āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻ•ā§āϰāĻŋāϝāĻŧāĻž āϚāĻžāϞāĻžāύ (āωāĻĻāĻžāĻšāϰāĻŖ: āĻāĻ•āϟāĻŋ āĻŸā§‡āĻ¸ā§āϟ āϰ⧇āĻ•āĻ°ā§āĻĄ āϤ⧈āϰāĻŋ āĻ“ āĻĒāĻĄāĻŧāĻž)
  • āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ version/build ID āĻ•āĻŽāĻŋāĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻŽāĻŋāϞāϛ⧇
  • āϝāĻĻāĻŋ āĻšā§‡āĻ• āĻĢ⧇āϞ āĻ•āϰ⧇, āϰ⧋āϞ āĻŦā§āϝāĻžāĻ• āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāϞāĻžāĻ°ā§āϟ āĻĒāĻžāĻ āĻžāύ

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇āύ (āωāĻĻāĻžāĻšāϰāĻŖ: AppMaster), āĻāχ āĻ…ā§āϝāĻžāĻĒā§āϰ⧋āϚāϟāĻŋ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻĨāĻžāϕ⧇: āĻāĻ•āĻŦāĻžāϰ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧁āύ, āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻ•āύāĻĢāĻŋāĻ—āχ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻĄāĻŋāĻ•āĻŸā§‡āϟ āĻ•āϰ⧁āĻ•â€”āĻ…ā§āϝāĻžāĻĄ-āĻšāĻ• āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āύāϝāĻŧāĨ¤

āϏāĻžāϧāĻžāϰāĻŖ āϭ⧁āϞāϗ⧁āϞ⧋ āϝāĻž āĻĒāĻžāχāĻĒāϞāĻžāχāύāϕ⧇ āĻ…āĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ā§āϝ āĻ•āϰ⧇ āϤ⧋āϞ⧇

āĻāĻ•āϟāĻŋ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ, āĻāĻ•āĻžāϧāĻŋāĻ• āĻĒāϰāĻŋāĻŦ⧇āĻļ
āĻāĻ•āĻŦāĻžāϰ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧁āύ, āϏāĻŦ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύ — āϏ⧋āĻ°ā§āϏ āĻāĻ•ā§āϏāĻĒā§‹āĻ°ā§āϟ āĻ•āϰ⧁āύ āĻŦāĻž āĻŽā§āϝāĻžāύ⧇āϜāĻĄ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āϟāĻžāĻ°ā§āϗ⧇āϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤
AppMaster āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧁āύ

āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āĻ­āĻžāĻ™āĻž āϰāĻŋāϞāĻŋāϜ "āĻ–āĻžāϰāĻžāĻĒ āϕ⧋āĻĄ"-āĻāϰ āĻ•āĻžāϰāϪ⧇ āύāϝāĻŧāĨ¤ āĻāϗ⧁āϞ⧋ āϘāĻŸā§‡ āϝāĻ–āύ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŽāϝāĻŧ āĻĨ⧇āϕ⧇ āϏāĻŽāϝāĻŧ āĻ­āĻŋāĻ¨ā§āύ āφāϚāϰāĻŖ āĻ•āϰ⧇āĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ CI/CD-āϕ⧇ āĻļāĻžāĻ¨ā§āϤ āĻ“ āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ āĻ•āϰāϤ⧇ āϚāĻžāύ, āύāĻŋāĻšā§‡āϰ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύāϗ⧁āϞ⧋āϰ āĻĻāĻŋāϕ⧇ āϞāĻ•ā§āĻˇā§āϝ āϰāĻžāϖ⧁āύāĨ¤

āφāϚāϰāĻŖāĻ—āϤ āϭ⧁āϞ āϝāĻž āφāϚāĻŽāĻ•āĻž āĻ¤ā§āϰ⧁āϟāĻŋ āĻĻ⧇āϝāĻŧ

āĻĒā§āϰāϤāĻŋ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āύāĻŋāĻœā§‡ āĻĨ⧇āϕ⧇āχ āϚāĻžāϞāĻžāύ⧋āϰ āĻ…āĻ­ā§āϝāĻžāϏ āĻāĻ•āϟāĻŋ āĻ•ā§āϞāĻžāϏāĻŋāĻ• āϏāĻŽāĻ¸ā§āϝāĻžāĨ¤ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŦāĻŋāϞ āϞāĻ• āĻ•āϰāĻž āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻ¸ā§āϤ āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϕ⧇ āύāĻŋāĻšā§‡ āύāĻžāĻŽāĻŋāϝāĻŧ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύāϕ⧇ āĻāĻ•ā§āϏāĻĒā§āϞāĻŋāϏāĻŋāϟ āĻ¸ā§āĻŸā§‡āĻĒ⧇ āϰāĻžāϖ⧁āύ, āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āϰāĻžāϖ⧁āύ, āĻāĻŦāĻ‚ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύāϕ⧇ āύāĻŋāϰāĻžāĻĒāĻĻ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϚāĻžāϞāĻžāύ⧋ āϝāĻžāĻŦ⧇ āĻāĻŽāύāĻ­āĻžāĻŦ⧇ āĻŦāĻžāύāĻžāύāĨ¤

latest āĻŸā§āϝāĻžāĻ— āĻŦāĻž āφāύāĻĒāĻŋāĻ¨ā§āĻĄ āĻŦ⧇āϏ āχāĻŽā§‡āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāĻ“ āϏāĻšāĻœā§‡ āϰāĻšāĻ¸ā§āϝāĻŽāϝāĻŧ āĻ¤ā§āϰ⧁āϟāĻŋ āϏ⧃āĻˇā§āϟāĻŋ āĻ•āϰ⧇āĨ¤ Docker āχāĻŽā§‡āϜ āĻ“ Go āĻ­āĻžāĻ°ā§āϏāύ āĻĒāĻŋāύ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āφāĻĒāύāĻžāϰ āĻŦāĻŋāĻ˛ā§āĻĄ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻĄā§āϰāĻŋāĻĢāϟ āύāĻž āĻ•āϰ⧇āĨ¤

āϏāĻŽāϝāĻŧāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻāĻ• āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāĻž “āĻŸā§‡āĻŽā§āĻĒā§‹āϰāĻžāϰāĻŋ” āĻšāϝāĻŧ⧇ āĻ¸ā§āĻĨāĻžāϝāĻŧā§€ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ, āĻāĻŦāĻ‚ āĻāϟāĻŋāχ āĻŸā§‡āĻ¸ā§āϟ āĻĄā§‡āϟāĻž āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚-āĻ āϞāĻŋāĻ• āĻšāĻ“āϝāĻŧāĻžāϰ āĻ“ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĒā§āϰ⧋āĻĄā§‡ āϚāĻžāϞāĻžāύ⧋āϰ āϰāĻžāĻ¸ā§āϤāĻžāĨ¤ āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻ…āύ⧁āϝāĻžāϝāĻŧā§€ āφāϞāĻžāĻĻāĻž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ (āĻ“ āĻ•ā§āϰ⧇āĻĄā§‡āύāĻļāĻŋāϝāĻŧāĻžāϞ) āϰāĻžāϖ⧁āĻ¨â€”āĻ¸ā§āĻ•āĻŋāĻŽāĻž āĻāĻ•āχ āĻšāϞ⧇āĻ“āĨ¤

āĻšā§‡āϞāĻĨ āĻ“ āϰ⧇āĻĄāĻŋāύ⧇āϏ āĻšā§‡āĻ• āύāĻž āĻĨāĻžāĻ•āϞ⧇ āĻāĻ•āϟāĻŋ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ "āϏāĻĢāϞ" āĻŦāϞ⧇ āϰ⧇āĻ•āĻ°ā§āĻĄ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āϝāĻ–āύ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻ­āĻžāĻ™āĻž āĻĨāĻžāϕ⧇, āĻāĻŦāĻ‚ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āĻ…āϤāĻŋ āĻĻā§āϰ⧁āϤ āύāϤ⧁āύ āĻ­āĻžāĻ°ā§āϏāύ⧇ āϰ⧁āϟ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧāĨ¤ āĻŦāĻžāĻ¸ā§āϤāĻŦ āφāϚāϰāĻŖ āĻŽā§‡āϞāĻžāύ⧋ āĻšā§‡āĻ• āϝ⧋āĻ— āĻ•āϰ⧁āύ: āĻ…ā§āϝāĻžāĻĒ āĻ•āĻŋ āĻļ⧁āϰ⧁ āĻšāϤ⧇ āĻĒāĻžāϰāϛ⧇, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻ•āĻžāύ⧇āĻ•ā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāϛ⧇, āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āϰāĻŋāϕ⧋āϝāĻŧ⧇āĻ¸ā§āϟ āϏāĻžāĻ°ā§āĻ­ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāϛ⧇āĨ¤

āĻļ⧇āώ⧇, āϏāĻŋāĻ•ā§āϰ⧇āϟ, āĻ•āύāĻĢāĻŋāĻ—, āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ⧇āϰ āĻ…āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŽāĻžāϞāĻŋāĻ•āĻžāύāĻž āϰāĻŋāϞāĻŋāϜāϗ⧁āϞ⧋āϕ⧇ āĻ…āύ⧁āĻŽāĻžāύāĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻ•āĻžāωāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āϏāĻŋāĻ•ā§āϰ⧇āϟ āϤ⧈āϰāĻŋ, āϰ⧋āĻŸā§‡āĻļāύ āĻāĻŦāĻ‚ āχāύāĻœā§‡āĻ•āĻļāύ⧇āϰ āĻŽāĻžāϞāĻŋāĻ• āĻšāϤ⧇ āĻšāĻŦ⧇āĨ¤

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

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇āύ (āωāĻĻāĻžāĻšāϰāĻŖ: AppMaster), āĻāχ āύāĻŋāϝāĻŧāĻŽāϗ⧁āϞ⧋ āφāϰāĻ“ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻžāϰāĻŖ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ…āύ⧇āĻ• āĻĢāĻžāχāϞ āĻāĻ•āϏāĻžāĻĨ⧇ āĻ¸ā§āĻĒāĻ°ā§āĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ āχāύāĻĒ⧁āϟ āĻ“ āĻāĻ•ā§āϏāĻĒā§āϞāĻŋāϏāĻŋāϟ āϗ⧇āϟ āĻŦāĻĄāĻŧ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞ⧋āϕ⧇ āĻā§āρāĻ•āĻŋāĻĒā§‚āĻ°ā§āĻŖ āϰāĻŋāϞāĻŋāĻœā§‡ āĻĒāϰāĻŋāĻŖāϤ āĻšāĻ“āϝāĻŧāĻž āĻĨ⧇āϕ⧇ āϰ⧋āϧ āĻ•āϰ⧇āĨ¤

āĻĒā§‚āĻ°ā§āĻŦāĻžāύ⧁āĻŽā§‡āϝāĻŧ CI/CD āϏ⧇āϟāφāĻĒ⧇āϰ āĻĻā§āϰ⧁āϤ āĻšā§‡āĻ•āϞāĻŋāĻ¸ā§āϟ

āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻŦā§āϝāĻŦāϏāĻžāϝāĻŧāĻŋāĻ• āϞāϜāĻŋāĻ• āϏāϰāϞ āĻ•āϰ⧁āύ
āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧇āϰ āϜāĻ¨ā§āϝ āĻšāĻžāϤ āĻĻāĻŋāϝāĻŧ⧇ āϕ⧋āĻĄ āĻ•āϰāĻžāϰ āĻŦāĻĻāϞ⧇ āĻĄā§āĻ°ā§āϝāĻžāĻ—-āĻ…ā§āϝāĻžāĻ¨ā§āĻĄ-āĻĄā§āϰāĻĒ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋ āĻĻāĻŋā§Ÿā§‡ āĻŦā§āϝāĻŦāϏāĻžāϝāĻŧāĻŋāĻ• āϞāϜāĻŋāĻ• āϝ⧋āĻ— āĻ•āϰ⧁āύāĨ¤
āĻāĻ–āύāχ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧁āύ

Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ CI/CD-āĻāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ—āĻžāϟ-āĻšā§‡āĻ• āĻšāĻŋāϏ⧇āĻŦ⧇ āύāĻŋāĻšā§‡āϰāϗ⧁āϞ⧋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϰāĻļā§āύ⧇āϰ āĻ¸ā§āĻĒāĻˇā§āϟ “āĻšā§āϝāĻžāĻâ€ āĻŦāϞāϤ⧇ āĻĒāĻžāϰ⧇āύ, āϰāĻŋāϞāĻŋāϜ āϏāĻšāϜ āĻšāĻŦ⧇āĨ¤

  • āĻ…āύāĻŋāĻŦāĻ¨ā§āϧāĻŋāϤ āϕ⧋āĻĄ āύāϝāĻŧ—āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ-āĻ“ āϞāĻ• āĻ•āϰ⧁āύāĨ¤ Go āĻ­āĻžāĻ°ā§āϏāύ āĻ“ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āύāĻŸā§‡āχāύāĻžāϰ āχāĻŽā§‡āϜ āĻĒāĻŋāύ āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ āϞ⧋āĻ•āĻžāϞ āĻ“ CI-āϤ⧇ āĻāĻ•āχ āϏ⧇āϟāφāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤
  • āĻĒāĻžāχāĻĒāϞāĻžāχāύāϕ⧇ ā§ŠāϟāĻŋ āϏāĻšāϜ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡ āϚāĻžāϞāĻžāύ⧋āϰ āϝ⧋āĻ—ā§āϝ āĻ•āϰ⧁āύāĨ¤ āĻāĻ•āϟāĻŋ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧇, āĻāĻ•āϟāĻŋ āĻŸā§‡āĻ¸ā§āϟ āϚāĻžāϞāĻžāϝāĻŧ, āĻāĻ•āϟāĻŋ āĻĄā§‡āĻĒā§āϞāϝāĻŧ⧇āĻŦāϞ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻ‰ā§ŽāĻĒāĻ¨ā§āύ āĻ•āϰ⧇āĨ¤
  • āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύāϗ⧁āϞ⧋āϕ⧇ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āϕ⧋āĻĄā§‡āϰ āĻŽāϤ⧋ āĻŸā§āϰāĻŋāϟ āĻ•āϰ⧁āύāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āϞāĻ— āĻĻāĻžāĻŦāĻŋ āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āϜāĻ¨ā§āϝ “āϰ⧋āϞāĻŦā§āϝāĻžāĻ•â€ āĻŽāĻžāύ⧇ āϕ⧀ āϤāĻž āϞāĻŋāϖ⧇ āϰāĻžāϖ⧁āύāĨ¤
  • āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧀āϝāĻŧ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āϝ⧇āϗ⧁āϞ⧋ āĻŸā§āϰ⧇āϏ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤ āĻāĻ•āĻŦāĻžāϰ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧁āύ, āĻ•āĻŽāĻŋāϟ SHA āĻĻāĻŋāϝāĻŧ⧇ āĻŸā§āϝāĻžāĻ— āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ›āĻžāĻĄāĻŧāĻž āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇āϰ āĻŽāĻ§ā§āϝ āĻĻāĻŋāϝāĻŧ⧇ āĻĒā§āϰ⧋āĻŽā§‹āϟ āĻ•āϰ⧁āύāĨ¤
  • āĻĻā§āϰ⧁āϤ āĻĢ⧇āϞ āĻ•āϰāĻž āĻšā§‡āĻ• āϏāĻš āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύāĨ¤ āϰ⧇āĻĄāĻŋāύ⧇āϏ/āϞāĻŋāĻ­āύ⧇āϏ āĻšā§‡āϞāĻĨ āĻšā§‡āĻ• āϝ⧋āĻ— āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ⧇ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻ¸ā§āĻŽā§‹āĻ• āĻŸā§‡āĻ¸ā§āϟ āϚāĻžāϞāĻžāύāĨ¤

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

āĻāĻ•āϟāĻŋ āĻŦāĻžāĻ¸ā§āϤāĻŦāϏāĻŽā§āĻŽāϤ āωāĻĻāĻžāĻšāϰāĻŖ āĻ“ āĻāχ āϏāĻĒā§āϤāĻžāĻšā§‡ āĻļ⧁āϰ⧁ āĻ•āϰāĻžāϰ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒ

āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻ…āĻĒāϏ āĻĻāϞ āϚāĻžāϰ āϜāύ āĻŽāĻŋāϞ⧇ āϏāĻĒā§āϤāĻžāĻšā§‡ āĻāĻ•āĻŦāĻžāϰ āĻļāĻŋāĻĒ āĻ•āϰ⧇āĨ¤ āϤāĻžāϰāĻž āĻĒā§āϰāĻžāϝāĻŧāχ āϤāĻžāĻĻ⧇āϰ Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇ āĻ•āĻžāϰāĻŖ āĻĒā§āϰ⧋āĻĄāĻžāĻ•ā§āϟ āĻĻāϞ āĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āĻĢā§āϞ⧋ āĻŦāĻžāϰāĻŦāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇āĨ¤ āϤāĻžāĻĻ⧇āϰ āϞāĻ•ā§āĻˇā§āϝ āϏāĻšāϜ: āϰāĻžāϤ⧇āϰ āĻĻāĻŋāϕ⧇āϰ āĻ•āĻŽ āĻĢāĻŋāĻ•ā§āϏ āĻāĻŦāĻ‚ āĻāĻŽāύ āϰāĻŋāϞāĻŋāϜ āϝ⧇āϗ⧁āϞ⧋ āĻ•āĻžāωāϕ⧇ āĻ…āĻŦāĻžāĻ• āĻ•āϰ⧇ āύāĻžāĨ¤

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

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

āĻŸā§‡āĻ¸ā§āϟ āĻĢ⧇āϞ āĻ•āϰāϞ⧇ āĻ•āĻŋāϛ⧁āχ āĻāĻ—ā§‹āĻŦ⧇ āύāĻžāĨ¤ āĻāĻ•āχ āĻ•āĻĨāĻž āĻĒā§āϰāĻŋ-āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻĢ⧇āϞ āĻ•āϰāϞ⧇ āĻĒā§āϰāϝ⧋āĻœā§āϝāĨ¤ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻ•āĻ–āύāχ “āĻļ⧁āϧ⧁ āĻāχ āĻāĻ•āĻŦāĻžāĻ°â€ āĻŦāϞ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āϠ⧇āϞāĻŦ⧇ āύāĻžāĨ¤

āĻ…āϧāĻŋāĻ•āĻžāĻ‚āĻļ āĻĻāϞ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āϧāĻžāĻĒ⧇āϰ āϏ⧇āϟ:

  • āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ (āĻāĻ•āϟāĻŋ āĻĄā§‡āĻ­ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āϝāĻž āφāĻĒāύāĻŋ āϏāĻšāĻœā§‡ āϰāĻŋāϏ⧇āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ)
  • āĻĒāĻžāχāĻĒāϞāĻžāχāύāϕ⧇ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻ•āϟāĻŋ āĻ­āĻžāĻ°ā§āϏāĻ¨ā§āĻĄ āĻŦāĻŋāĻ˛ā§āĻĄ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻ‰ā§ŽāĻĒāĻ¨ā§āύ āĻ•āϰāϤ⧇ āĻŦāϞ⧁āύ
  • āĻĄā§‡āϭ⧇ āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύ āĻ…āĻŸā§‹āĻŽā§‡āϟāĻŋāĻ• āϚāĻžāϞāĻžāύ, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻŦāĻžāĻ§ā§āϝāϤ āĻ•āϰ⧁āύ
  • āĻ•āϝāĻŧ⧇āĻ• āϏāĻĒā§āϤāĻžāĻš āĻĄā§‡āĻ­ āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻšāϞ⧇ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āϝ⧋āĻ— āĻ•āϰ⧁āύ
  • āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āϗ⧇āĻŸā§‡ āϏāĻŦ⧁āϜ āĻŸā§‡āĻ¸ā§āϟ āĻ“ āϏāĻĢāϞ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻŦāϞ⧁āύ

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ AppMaster āĻĻāĻŋāϝāĻŧ⧇ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰ⧇āύ, āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āĻŸā§‡āĻļāύāϕ⧇ āĻāĻ•āχ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻ¸ā§āĻŸā§‡āĻœā§‡ āϰāĻžāϖ⧁āύ: regenerate, build, test, migrate āϏ⧇āĻĢ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡, āϤāĻžāϰāĻĒāϰ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ āĻ•āϰ⧁āύāĨ¤ āĻœā§‡āύāĻžāϰ⧇āĻŸā§‡āĻĄ āϏ⧋āĻ°ā§āϏāϕ⧇ āĻ…āĻ¨ā§āϝ āϏ⧋āĻ°ā§āϏ⧇āϰ āĻŽāϤ⧋ āφāϚāϰāĻŖ āĻ•āϰ⧁āύāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϰāĻŋāϞāĻŋāϜ āĻāĻ•āϟāĻŋ āĻŸā§āϝāĻžāĻ— āĻ•āϰāĻž āĻ­āĻžāĻ°ā§āϏāύ āĻĨ⧇āϕ⧇ āĻĒ⧁āύāĻ°ā§ā§ŽāĻĒāĻžāĻĻāύāϝ⧋āĻ—ā§āϝ āĻšāĻ“āϝāĻŧāĻž āωāϚāĻŋāϤ, āĻāĻŦāĻ‚ āĻĒā§āϰāĻ¤ā§āϝ⧇āĻ•āĻŦāĻžāϰ āĻāĻ•āχ āϧāĻžāĻĒ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤

āĻĒā§āϰāĻļā§āύ⧋āĻ¤ā§āϤāϰ

What’s the first thing to lock down for predictable Go CI/CD?

Go āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ˛ā§āĻĄ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āĻĒāĻŋāύ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻāĻ•āχ āχāύāĻĒ⧁āϟ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻ•āχ āĻŦāĻžāχāύāĻžāϰāĻŋ āĻŦāĻž āχāĻŽā§‡āϜ āωāĻ¤ā§āĻĒāĻ¨ā§āύ āĻ•āϰ⧇āĨ¤ āĻāϤ⧇ “āφāĻŽāĻžāϰ āĻŽā§‡āĻļāĻŋāύ⧇ āϚāĻ˛ā§‡â€ āϧāĻžāρāĻšā§‡āϰ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āϝ āĻ•āĻŽā§‡ āĻāĻŦāĻ‚ āĻ¤ā§āϰ⧁āϟāĻŋ āĻĒ⧁āύāϰāĻžāϝāĻŧ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āϏāĻšāϜ āĻšāϝāĻŧāĨ¤

Why do regenerated Go backends still need CI/CD?

āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āĻļāύ āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ, āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻŽāĻĄā§‡āϞ, āĻāĻŦāĻ‚ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋ āĻŦāĻĻāϞ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāĻ°ā§‡â€”even āϝāĻĻāĻŋ āϕ⧇āω āĻšāĻžāϤ⧇ āϕ⧋āĻĄ āύāĻž āĻŦāĻĻāϞāĻžāϝāĻŧāĨ¤ āĻāĻ•āϟāĻŋ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āϏ⧇āχ āϏāĻŦ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϕ⧇ āĻāĻ•āχ āĻšā§‡āϕ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒāĻžāĻ āĻžāϝāĻŧ, āϤāĻžāχ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāĻž āĻā§āρāĻ•āĻŋāĻŽā§āĻ•ā§āϤ āĻĨāĻžāϕ⧇āĨ¤

Should I rebuild the backend separately for staging and production?

āĻāĻ•āĻŦāĻžāϰ āĻŦāĻŋāĻ˛ā§āĻĄ āĻ•āϰ⧇ āĻāĻ•āχ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟāϕ⧇ āĻĄā§‡āĻ­, āĻ¸ā§āĻŸā§‡āϜ āĻāĻŦāĻ‚ āĻĒā§āϰ⧋āĻĄā§‡ āĻĒā§āϰ⧋āĻŽā§‹āϟ āĻ•āϰ⧁āύāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇āϰ āϜāĻ¨ā§āϝ āφāϞāĻžāĻĻāĻž āĻ•āϰ⧇ rebuild āĻ•āϰāϞ⧇ āφāĻĒāύāĻŋ āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āĻļāĻŋāĻĒ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āϝāĻž āφāĻĒāύāĻŋ āĻ•āĻ–āύāχ āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰ⧇āύāύāĻŋ, āĻāĻŽāύāĻ•āĻŋ āĻāĻ•āχ āĻ•āĻŽāĻŋāϟ āĻĨāĻžāĻ•āϞ⧇āĻ“āĨ¤

What should run on every commit for a Go backend?

āĻĒā§āϰāϤāĻŋ PR/āĻ•āĻŽāĻŋāĻŸā§‡ āĻĻā§āϰ⧁āϤ āϗ⧇āϟ āϚāĻžāϞāĻžāύ: āĻĢāϰāĻŽā§āϝāĻžāϟāĻŋāĻ‚, āĻŦ⧇āϏāĻŋāĻ• āĻ¸ā§āĻŸā§āϝāĻžāϟāĻŋāĻ• āĻšā§‡āĻ•, āĻŦāĻŋāĻ˛ā§āĻĄ, āĻāĻŦāĻ‚ āϟāĻžāχāĻŽāφāωāϟāϏāĻš āχāωāύāĻŋāϟ āĻŸā§‡āĻ¸ā§āϟāĨ¤ āĻāϟāĻžāϕ⧇ āĻāϤ āĻĻā§āϰ⧁āϤ āϰāĻžāϖ⧁āύ āϝ⧇ āĻŽāĻžāύ⧁āώ āĻāϟāĻžāϕ⧇ āĻŦāĻžāχāĻĒāĻžāϏ āύāĻž āĻ•āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āϤ⧇āĻŽāύ āĻ•āĻ ā§‹āϰāĻ“ āĻšā§‹āĻ• āϝ⧇ āĻ­āĻžāĻ™āĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞ⧋ āĻĻā§āϰ⧁āϤ āĻĨāĻžāĻŽāĻžāύ⧋ āϝāĻžāϝāĻŧāĨ¤

How do I add integration checks without making the pipeline slow?

āĻāĻ•āϟāĻŋ āϛ⧋āϟ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āĻ¸ā§āĻŸā§‡āϜ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻž āϏāĻžāĻ°ā§āĻ­āĻŋāϏāϕ⧇ āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ⧇āϰ āĻŽāϤ⧋ āĻ•āύāĻĢāĻŋāĻ— āĻĻāĻŋāϝāĻŧ⧇ āĻŦ⧁āϟ āĻ•āϰ⧇ āĻāĻŦāĻ‚ PostgreSQL-āĻāϰ āĻŽāϤ⧋ āϰāĻŋāϝāĻŧ⧇āϞ āĻĄāĻŋāĻĒ⧇āĻ¨ā§āĻĄā§‡āĻ¨ā§āϏāĻŋāϗ⧁āϞ⧋āϰ āϏāĻžāĻĨ⧇ āĻ•āĻĨāĻž āĻŦāϞ⧇āĨ¤ āϞāĻ•ā§āĻˇā§āϝ āĻšāĻšā§āϛ⧇ “āϕ⧋āĻŽā§āĻĒāĻžāχāϞ āĻšāϞ⧇āĻ“ āĻļ⧁āϰ⧁ āĻšāĻŦ⧇ āύāĻžâ€ āĻŦāĻž āĻ¸ā§āĻĒāĻˇā§āϟ āĻ•āύāĻŸā§āϰāĻžāĻ•ā§āϟ āĻŦā§āϰ⧇āĻ•āϗ⧁āϞāĻŋ āϧāϰāĻžāύ⧋, āĻĒ⧁āϰ⧋ āĻāĻ¨ā§āĻĄ-āϟ⧁-āĻāĻ¨ā§āĻĄ āĻ¸ā§āϝ⧁āϟ āύāĻž āϚāĻžāϞāĻŋāϝāĻŧ⧇āĨ¤

Where should database migrations run in CI/CD?

āĻŽāĻžāχāĻ—ā§āϰ⧇āĻļāύāϗ⧁āϞ⧋āϕ⧇ āĻ•āĻ¨ā§āĻŸā§āϰ⧋āϞāĻĄ āϰāĻŋāϞāĻŋāϜ āĻ¸ā§āĻŸā§‡āĻĒ āĻšāĻŋāϏ⧇āĻŦ⧇ āĻĻ⧇āϖ⧁āύ, āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ⧇āϰ āϏāĻžāĻĨ⧇ āϚāĻžāϞāĻžāĻŦ⧇āύ āύāĻžāĨ¤ āĻ¸ā§āĻĒāĻˇā§āϟ āϞāĻ— āĻĨāĻžāĻ•āĻž, āĻāĻ•-āĻŦāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āϞāĻ•, āĻāĻŦāĻ‚ āĻŦāĻžāĻ¸ā§āϤāĻŦ āĻĒā§āϰāϤāĻŋāĻĢāϞāύ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻ āĻŋāĻ• āĻ…āύ⧁āĻŽā§‹āĻĻāύ āϰāĻžāϖ⧁āĻ¨â€”āĻāĻŦāĻ‚ āϰ⧋āϞāĻŦā§āϝāĻžāĻ• āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻ¸ā§Ž āĻĨāĻžāϕ⧁āύ: āĻ…āύ⧇āĻ• āĻ¸ā§āĻ•āĻŋāĻŽāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āϏāĻšāĻœā§‡ āωāĻ˛ā§āϟāĻžāύ⧋ āϝāĻžāϝāĻŧ āύāĻžāĨ¤

What’s the most common Kubernetes deploy issue for Go services?

āϰ⧇āĻĄāĻŋāύ⧇āϏ āĻšā§‡āĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āύāϤ⧁āύ āĻĒāĻĄā§‡ āϤāĻ–āύāχ āϝāĻžāϝāĻŧ āϝāĻ–āύ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āϏāĻ¤ā§āϝāĻŋāχ āϰ⧇āĻĄāĻŋ; āϞāĻŋāĻ­āύ⧇āϏ āĻšā§‡āĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āĻ…āĻŦāϰ⧁āĻĻā§āϧ āĻ•āύāĻŸā§‡āχāύāĻžāϰ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻšāϝāĻŧāĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻž āĻŦāĻžāĻ¸ā§āϤāĻŦāϏāĻŽā§āĻŽāϤ resource requests/limits āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ CI-āϤ⧇ āϚāϞāĻž āϏāĻžāĻ°ā§āĻ­āĻŋāϏ āĻĒā§āϰ⧋āĻĄuction-āĻ OOM-kill āύāĻž āĻ–āĻžāϝāĻŧāĨ¤

How can I deploy Go services safely on VMs without Kubernetes?

āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ systemd āχāωāύāĻŋāϟāĻĢāĻžāχāϞ āĻāĻŦāĻ‚ āĻ•āύāϏāĻŋāĻ¸ā§āĻŸā§‡āĻ¨ā§āϟ āϰāĻŋāϞāĻŋāϜ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻŦ⧇āĻļāĻŋāϰāĻ­āĻžāĻ— VM āĻĄāĻŋāĻĒā§āϞāϝāĻŧ⧇āϰ āϜāĻ¨ā§āϝ āϝāĻĨ⧇āĻˇā§āϟāĨ¤ āĻ•āύāĻŸā§‡āχāύāĻžāϰ⧇āϰ āĻŽāϤ⧋āχ āĻāĻ•āχ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻŽāĻĄā§‡āϞ āϰāĻžāϖ⧁āύ, āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĄāĻŋāĻĒā§āϞāϝāĻŧ⧇āϰ āĻĒāϰ⧇ āĻāĻ•āϟāĻŋ āϛ⧋āϟ āĻ¸ā§āĻŽā§‹āĻ• āĻšā§‡āĻ• āϚāĻžāϞāĻžāύ āϝāĻžāϤ⧇ “āϏāĻĢāϞ āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āĻŸâ€ āϭ⧇āϤāϰ⧇ āĻ­āĻžāĻ™āĻžāĻšā§‹āϝāĻŧ āĻĻ⧇āĻ–āĻž āύāĻž āĻĻ⧇āϝāĻŧāĨ¤

How should I handle secrets in a Go CI/CD pipeline?

āϏāĻŋāĻ•ā§āϰ⧇āϟāϗ⧁āϞ⧋ āĻ•āĻ–āύ⧋āχ āϰāĻŋāĻĒā§‹, āĻŦāĻŋāĻ˛ā§āĻĄ āφāĻ°ā§āϟāĻŋāĻĢā§āϝāĻžāĻ•ā§āϟ āĻŦāĻž CI āϞāϗ⧇ āϰāĻžāĻ–āĻŦ⧇āύ āύāĻžāĨ¤ āĻĄā§‡āĻĒā§āϞāϝāĻŧ āϟāĻžāχāĻŽā§‡ āĻāĻ•āϟāĻŋ āĻŽā§āϝāĻžāύ⧇āϜāĻĄ āϏāĻŋāĻ•ā§āϰ⧇āϟ āĻ¸ā§āĻŸā§‹āϰ āĻĨ⧇āϕ⧇ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧁āύ, āϝāĻžāϰāĻž āĻĒāĻĄāĻŧāϤ⧇ āĻĒāĻžāϰāĻŦ⧇ āϤāĻžāĻĻ⧇āϰ āϏ⧀āĻŽāĻŋāϤ āĻ•āϰ⧁āύ, āĻāĻŦāĻ‚ āϰ⧋āĻŸā§‡āĻļāύāϕ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāϝāĻŧāĻŽāĻŋāϤ āĻ•āĻžāϜ āĻŦāĻžāύāĻžāύāĨ¤

How do I fit AppMaster regeneration into an existing CI/CD workflow?

āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻœā§‡āύāĻžāϰ⧇āĻļāύāϕ⧇ āĻāĻ•āχ āĻĒāĻžāχāĻĒāϞāĻžāχāύ āĻ¸ā§āĻŸā§‡āĻœā§‡ āϰāĻžāϖ⧁āύ: regenerate, build, test, package, āϤāĻžāϰāĻĒāϰ gated āĻŽāĻžāχāĻ—ā§āϰ⧇āϟ āĻāĻŦāĻ‚ deployāĨ¤ AppMaster āĻĻāĻŋāϝāĻŧ⧇ Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻœā§‡āύāĻžāϰ⧇āϟ āĻ•āϰāϞ⧇ āĻāχ āĻĒā§āϰāĻŦāĻžāĻš āφāĻĒāύāĻžāϕ⧇ āĻĻā§āϰ⧁āϤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŋāϤāĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāĻŦ⧇āĨ¤

āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϏāĻšāϜ
āĻ•āĻŋāϛ⧁ āφāĻļā§āϚāĻ°ā§āϝāϜāύāĻ•āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ

āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇āϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āϏāĻš āĻ…ā§āϝāĻžāĻĒāĻŽāĻžāĻ¸ā§āϟāĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧁āύāĨ¤
āφāĻĒāύāĻŋ āϝāĻ–āύ āĻĒā§āϰāĻ¸ā§āϤ⧁āϤ āĻšāĻŦ⧇āύ āϤāĻ–āύ āφāĻĒāύāĻŋ āϏāĻ āĻŋāĻ• āϏāĻĻāĻ¸ā§āϝāϤāĻž āĻŦ⧇āϛ⧇ āύāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎

āĻāĻŦāĻžāϰ āĻļ⧁āϰ⧁ āĻ•āϰāĻž āϝāĻžāĻ•
Go āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ CI/CD: āĻŦāĻŋāĻ˛ā§āĻĄ, āĻŸā§‡āĻ¸ā§āϟ, āĻŽāĻžāχāĻ—ā§āϰ⧇āϟ, āĻĄāĻŋāĻĒā§āϞāϝāĻŧ | AppMaster