āĻĄāĻ•āĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

āĻĄāĻ•āĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ
āĻšā§‡ āĻšāĻžāĻŦāĻ°!

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

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

āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ

āĻĒā§āĻ°āĻšā§āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻ• āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ• āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ āĻāĻŦāĻ‚ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻĄāĻ•āĻžāĻ° āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹āĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĻāĻŋāĻ• āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§‡āĨ¤ āĻ¤āĻžāĻĻā§‡āĻ° āĻ•āĻŋāĻ›ā§ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§€ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ (https://habr.com/ru/company/swordfish_security/blog/518758/#docker-security), āĻāĻŦāĻ‚ āĻāĻ‡ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻŸāĻŋāĻ¤ā§‡ āĻ†āĻŽāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¤āĻŋāĻ¨āĻŸāĻŋāĻ° āĻ‰āĻĒāĻ° āĻĢā§‹āĻ•āĻžāĻ¸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡, āĻ¯āĻž āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻšāĻ˛āĻžāĻ•āĻžāĻ˛ā§€āĻ¨ āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĄāĻ•āĻžāĻ° āĻšāĻŋāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻŋāĻ‚āĻšāĻ­āĻžāĻ— āĻ•āĻ­āĻžāĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ‰āĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ“ āĻĻā§‡āĻ–āĻžāĻŦ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ā§‡ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻšā§āĻ¯āĻžāĻĄā§‹āĻ˛āĻŋāĻ¨ā§āĻŸ
https://github.com/hadolint/hadolint

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

āĻĄāĻ•āĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

āĻĄāĻ•āĻ˛
https://github.com/goodwithtech/dockle

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

āĻŸā§āĻ°āĻŋāĻ­āĻŋ
https://github.com/aquasecurity/trivy

āĻāĻ‡ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻĻā§āĻŸāĻŋ āĻ§āĻ°āĻŖā§‡āĻ° āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°āĻžāĻ° āĻ˛āĻ•ā§āĻˇā§āĻ¯ā§‡ - āĻ“āĻāĻ¸ āĻŦāĻŋāĻ˛ā§āĻĄā§‡āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž (āĻ†āĻ˛āĻĒāĻžāĻ‡āĻ¨, āĻ°ā§‡āĻĄāĻšā§āĻ¯āĻžāĻŸ (āĻ‡āĻāĻ˛), āĻ¸ā§‡āĻ¨ā§āĻŸā§‹āĻ¸, āĻĄā§‡āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ āĻœāĻŋāĻāĻ¨āĻ‡āĻ‰, āĻ‰āĻŦā§āĻ¨ā§āĻŸā§ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤) āĻāĻŦāĻ‚ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž (Gemfile.lock, Pipfile.lock, composer.lock, āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ) -lock.json , yarn.lock, cargo.lock)āĨ¤ āĻŸā§āĻ°āĻŋāĻ­āĻŋ āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ›āĻŦāĻŋ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ›āĻŦāĻŋ āĻ‰āĻ­āĻ¯āĻŧāĻ‡ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāĻ° āĻ‡āĻŽā§‡āĻœā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ .tar āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻĄāĻ•āĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ

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

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

āĻšā§‡āĻ• āĻ¨āĻŋāĻœā§‡āĻ‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒāĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ—āĻ āĻŋāĻ¤:

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

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

āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻĢāĻžāĻ‡āĻ˛ āĻāĻŦāĻ‚ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤: https://github.com/Swordfish-Security/docker_cicd

āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻ†āĻ‡/āĻ¸āĻŋāĻĄāĻŋ-āĻ¤ā§‡ āĻ‡āĻ¨ā§āĻŸāĻŋāĻ—ā§āĻ°ā§‡āĻļāĻ¨

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

āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡
1. āĻĄāĻ•āĻžāĻ° āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§āĻ¨:

sudo apt-get update && sudo apt-get install docker.io

2. āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ•ā§‡ āĻĄāĻ•āĻžāĻ° āĻ—ā§āĻ°ā§āĻĒā§‡ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§āĻ¨ āĻ¯āĻžāĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻŋ sudo āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ¨āĻž āĻ•āĻ°ā§‡ āĻĄāĻ•āĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨:

sudo addgroup <username> docker

3. āĻ†āĻĒāĻ¨āĻžāĻ° āĻ†āĻ‡āĻĒāĻŋ āĻ–ā§āĻāĻœā§āĻ¨:

ip addr

4. āĻ•āĻ¨āĻŸā§‡āĻ‡āĻ¨āĻžāĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§āĻ¨, āĻšā§‹āĻ¸ā§āĻŸāĻ¨āĻžāĻŽā§‡āĻ° IP āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻœā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨:

docker run --detach 
--hostname 192.168.1.112 
--publish 443:443 --publish 80:80 
--name gitlab 
--restart always 
--volume /srv/gitlab/config:/etc/gitlab 
--volume /srv/gitlab/logs:/var/log/gitlab 
--volume /srv/gitlab/data:/var/opt/gitlab 
gitlab/gitlab-ce:latest

āĻ†āĻŽāĻ°āĻž āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŋ āĻ¯āĻ¤āĻ•ā§āĻˇāĻŖ āĻ¨āĻž āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻ•āĻ°ā§‡ (āĻ†āĻĒāĻ¨āĻŋ āĻ˛āĻ— āĻĢāĻžāĻ‡āĻ˛ āĻ†āĻ‰āĻŸāĻĒā§āĻŸā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§€āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨: āĻĄāĻ•āĻžāĻ° āĻ˛āĻ—āĻ¸ -āĻāĻĢ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ)āĨ¤

5. āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ†āĻ‡āĻĒāĻŋ āĻ–ā§āĻ˛ā§āĻ¨ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻˇā§āĻ āĻž āĻĻā§‡āĻ–ā§āĻ¨ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ°ā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻĒāĻžāĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻŦāĻ˛āĻ›ā§‡:
āĻĄāĻ•āĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ
āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒāĻžāĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻ¯āĻžāĻ¨āĨ¤

6. āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨, āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ cicd-āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻāĻŦāĻ‚ āĻ¸ā§āĻŸāĻžāĻ°ā§āĻŸ āĻĢāĻžāĻ‡āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻāĻŸāĻŋ āĻļā§āĻ°ā§ āĻ•āĻ°ā§āĻ¨ README.md:
āĻĄāĻ•āĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ
7. āĻāĻ–āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° GitLab Runner āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡: āĻāĻ•āĻŸāĻŋ āĻāĻœā§‡āĻ¨ā§āĻŸ āĻ¯ā§‡āĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ¤ā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒ āĻšāĻžāĻ˛āĻžāĻŦā§‡āĨ¤
āĻ¸āĻ°ā§āĻŦāĻļā§‡āĻˇ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°ā§āĻ¨ (āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ 64-āĻŦāĻŋāĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯):

sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

8. āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ•āĻ°ā§āĻ¨:

sudo chmod +x /usr/local/bin/gitlab-runner

9. āĻ°āĻžāĻ¨āĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ OS āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻļā§āĻ°ā§ āĻ•āĻ°ā§āĻ¨:

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start

āĻāĻŸāĻŋ āĻāĻ‡ āĻŽāĻ¤ āĻ•āĻŋāĻ›ā§ āĻĻā§‡āĻ–āĻž āĻ‰āĻšāĻŋāĻ¤:

local@osboxes:~$ sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
Runtime platform arch=amd64 os=linux pid=8438 revision=0e5417a3 version=12.0.1
local@osboxes:~$ sudo gitlab-runner start
Runtime platform arch=amd64 os=linux pid=8518 revision=0e5417a3 version=12.0.1

10. āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ°āĻžāĻ¨āĻžāĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻ•āĻ°āĻŋ āĻ¯āĻžāĻ¤ā§‡ āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, Settings-CI/CD āĻĒā§ƒāĻˇā§āĻ āĻž āĻ–ā§āĻ˛ā§āĻ¨ (http://OUR_IP_ADDRESS/root/cicd-test/-/settings/ci_cd) āĻāĻŦāĻ‚ āĻ°āĻžāĻ¨āĻžāĻ°ā§āĻ¸ āĻŸā§āĻ¯āĻžāĻŦā§‡ URL āĻāĻŦāĻ‚ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻ–ā§āĻāĻœā§āĻ¨:
āĻĄāĻ•āĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ
11. URL āĻāĻŦāĻ‚ āĻ°ā§‡āĻœāĻŋāĻ¸ā§āĻŸā§āĻ°ā§‡āĻļāĻ¨ āĻŸā§‹āĻ•ā§‡āĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡ āĻ°āĻžāĻ¨āĻžāĻ° āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻ•āĻ°ā§āĻ¨:

sudo gitlab-runner register 
--non-interactive 
--url "http://<URL>/" 
--registration-token "<Registration Token>" 
--executor "docker" 
--docker-privileged 
--docker-image alpine:latest 
--description "docker-runner" 
--tag-list "docker,privileged" 
--run-untagged="true" 
--locked="false" 
--access-level="not_protected"

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

āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨

1. āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡ āĻĢāĻžāĻ‡āĻ˛ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨ mydockerfile.df (āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻ¸ā§āĻŸ āĻĄāĻ•āĻžāĻ°āĻĢāĻžāĻ‡āĻ˛ āĻ¯āĻž āĻ†āĻŽāĻ°āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦ) āĻāĻŦāĻ‚ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻ†āĻ‡/āĻ¸āĻŋāĻĄāĻŋ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ gitlab-cicd.yml, āĻ¯āĻž āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡ (āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ¨āĻžāĻŽā§‡āĻ° āĻŦāĻŋāĻ¨ā§āĻĻā§āĻŸāĻŋ āĻ¨ā§‹āĻŸ āĻ•āĻ°ā§āĻ¨)āĨ¤

YAML āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ (āĻšā§āĻ¯āĻžāĻĄā§‹āĻ˛āĻŋāĻ¨ā§āĻŸ, āĻĄāĻ•āĻ˛ āĻāĻŦāĻ‚ āĻŸā§āĻ°āĻŋāĻ­āĻŋ) āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻŋāĻ¤ āĻĄāĻ•āĻžāĻ°āĻĢāĻžāĻ‡āĻ˛ āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāĻ°āĻĢāĻžāĻ‡āĻ˛ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻž āĻšāĻŋāĻ¤ā§āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻŦā§‡āĨ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨā§‡āĻ•ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡: https://github.com/Swordfish-Security/docker_cicd/

āĻĨā§‡āĻ•ā§‡ āĻ¨āĻŋāĻˇā§āĻ•āĻžāĻļāĻ¨ mydockerfile.df (āĻāĻŸāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋāĻ° āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻšāĻžāĻ°ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻŽā§‚āĻ°ā§āĻ¤ āĻĢāĻžāĻ‡āĻ˛)āĨ¤ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ˛āĻŋāĻ™ā§āĻ•: mydockerfile.df

mydockerfile.df āĻāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§

FROM amd64/node:10.16.0-alpine@sha256:f59303fb3248e5d992586c76cc83e1d3700f641cbcd7c0067bc7ad5bb2e5b489 AS tsbuild
COPY package.json .
COPY yarn.lock .
RUN yarn install
COPY lib lib
COPY tsconfig.json tsconfig.json
COPY tsconfig.app.json tsconfig.app.json
RUN yarn build
FROM amd64/ubuntu:18.04@sha256:eb70667a801686f914408558660da753cde27192cd036148e58258819b927395
LABEL maintainer="Rhys Arkins <[email protected]>"
LABEL name="renovate"
...
COPY php.ini /usr/local/etc/php/php.ini
RUN cp -a /tmp/piik/* /var/www/html/
RUN rm -rf /tmp/piwik
RUN chown -R www-data /var/www/html
ADD piwik-cli-setup /piwik-cli-setup
ADD reset.php /var/www/html/
## ENTRYPOINT ##
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
USER root

āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ YAML āĻāĻ° āĻŽāĻ¤ āĻĻā§‡āĻ–āĻžāĻšā§āĻ›ā§‡ (āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ˛āĻŋāĻ™ā§āĻ•ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻāĻ–āĻžāĻ¨ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡: gitlab-ci.yml):

.gitlab-ci.yml-āĻāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§

variables:
    DOCKER_HOST: "tcp://docker:2375/"
    DOCKERFILE: "mydockerfile.df" # name of the Dockerfile to analyse   
    DOCKERIMAGE: "bkimminich/juice-shop" # name of the Docker image to analyse
    # DOCKERIMAGE: "knqyf263/cve-2018-11235" # test Docker image with several CRITICAL CVE
    SHOWSTOPPER_PRIORITY: "CRITICAL" # what level of criticality will fail Trivy job
    TRIVYCACHE: "$CI_PROJECT_DIR/.cache" # where to cache Trivy database of vulnerabilities for faster reuse
    ARTIFACT_FOLDER: "$CI_PROJECT_DIR"
 
services:
    - docker:dind # to be able to build docker images inside the Runner
 
stages:
    - scan
    - report
    - publish
 
HadoLint:
    # Basic lint analysis of Dockerfile instructions
    stage: scan
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/hadolint_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/hadolint/hadolint/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/hadolint/hadolint/releases/download/v${VERSION}/hadolint-Linux-x86_64 && chmod +x hadolint-Linux-x86_64
     
    # NB: hadolint will always exit with 0 exit code
    - ./hadolint-Linux-x86_64 -f json $DOCKERFILE > $ARTIFACT_FOLDER/hadolint_results.json || exit 0
 
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/hadolint_results.json
 
Dockle:
    # Analysing best practices about docker image (users permissions, instructions followed when image was built, etc.)
    stage: scan   
    image: docker:git
 
    after_script:
    - cat $ARTIFACT_FOLDER/dockle_results.json
 
    script:
    - export VERSION=$(wget -q -O - https://api.github.com/repos/goodwithtech/dockle/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/goodwithtech/dockle/releases/download/v${VERSION}/dockle_${VERSION}_Linux-64bit.tar.gz && tar zxf dockle_${VERSION}_Linux-64bit.tar.gz
    - ./dockle --exit-code 1 -f json --output $ARTIFACT_FOLDER/dockle_results.json $DOCKERIMAGE   
     
    artifacts:
        when: always # return artifacts even after job failure       
        paths:
        - $ARTIFACT_FOLDER/dockle_results.json
 
Trivy:
    # Analysing docker image and package dependencies against several CVE bases
    stage: scan   
    image: docker:git
 
    script:
    # getting the latest Trivy
    - apk add rpm
    - export VERSION=$(wget -q -O - https://api.github.com/repos/knqyf263/trivy/releases/latest | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/1/')
    - wget https://github.com/knqyf263/trivy/releases/download/v${VERSION}/trivy_${VERSION}_Linux-64bit.tar.gz && tar zxf trivy_${VERSION}_Linux-64bit.tar.gz
     
    # displaying all vulnerabilities w/o failing the build
    - ./trivy -d --cache-dir $TRIVYCACHE -f json -o $ARTIFACT_FOLDER/trivy_results.json --exit-code 0 $DOCKERIMAGE    
    
    # write vulnerabilities info to stdout in human readable format (reading pure json is not fun, eh?). You can remove this if you don't need this.
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 0 $DOCKERIMAGE    
 
    # failing the build if the SHOWSTOPPER priority is found
    - ./trivy -d --cache-dir $TRIVYCACHE --exit-code 1 --severity $SHOWSTOPPER_PRIORITY --quiet $DOCKERIMAGE
         
    artifacts:
        when: always # return artifacts even after job failure
        paths:
        - $ARTIFACT_FOLDER/trivy_results.json
 
    cache:
        paths:
        - .cache
 
Report:
    # combining tools outputs into one HTML
    stage: report
    when: always
    image: python:3.5
     
    script:
    - mkdir json
    - cp $ARTIFACT_FOLDER/*.json ./json/
    - pip install json2html
    - wget https://raw.githubusercontent.com/shad0wrunner/docker_cicd/master/convert_json_results.py
    - python ./convert_json_results.py
     
    artifacts:
        paths:
        - results.html

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

āĻĻā§āĻ°āĻˇā§āĻŸāĻŦā§āĻ¯: Trivy āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ RPM и āĻĢāĻžāĻ˛āĻ¤ā§ āĻŦāĻž āĻāĻ˛ā§‡āĻŦā§‡āĻ˛ā§‡ āĻ˛ā§‹āĻ•. āĻ…āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ, āĻāĻŸāĻŋ RedHat-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻ›āĻŦāĻŋ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻ†āĻĒāĻĄā§‡āĻŸ āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦā§‡āĨ¤

2. āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋāĻ¤ā§‡ āĻĢāĻžāĻ‡āĻ˛ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻĒāĻ°, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€, āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻŦāĻŋāĻ˛ā§āĻĄ āĻāĻŦāĻ‚ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻŦā§‡āĨ¤ CI/CD → āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ āĻŸā§āĻ¯āĻžāĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€āĻ° āĻ…āĻ—ā§āĻ°āĻ—āĻ¤āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

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

āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻžāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻ•ā§‹āĻĄ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ¯āĻžāĻ¤ā§‡ āĻāĻ‡ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋāĻ—ā§āĻ˛āĻŋ āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻœāĻŸāĻŋāĻ˛āĻ¤āĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°ā§‡, āĻ¤āĻ–āĻ¨ āĻ¤āĻžāĻ°āĻž āĻŦāĻŋāĻ˛ā§āĻĄ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋāĻ“ āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°ā§‡ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻŦāĻŋāĻ˛ā§āĻĄāĻŸāĻŋ āĻ¤āĻ–āĻ¨āĻ‡ āĻŦāĻ¨ā§āĻ§ āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻŦā§‡ āĻ¯āĻĻāĻŋ āĻŸā§āĻ°āĻŋāĻ­āĻŋ āĻ¸ā§‡āĻ‡ āĻ¸āĻŽāĻžāĻ˛ā§‹āĻšāĻ¨āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°ā§‡ āĻ¯āĻž āĻ†āĻŽāĻ°āĻž SHOWSTOPPER āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ– āĻ•āĻ°ā§‡āĻ›āĻŋ gitlab-ci.yml.
āĻĄāĻ•āĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨āĻŋāĻ‚ āĻŸāĻžāĻ¸ā§āĻ•ā§‡āĻ° āĻ˛āĻ—ā§‡, āĻ†āĻ°ā§āĻŸāĻŋāĻĢā§āĻ¯āĻžāĻ•ā§āĻŸ āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ json āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻŦāĻž āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ HTML āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸā§‡ āĻĻā§‡āĻ–āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ (āĻ¨ā§€āĻšā§‡ āĻ†āĻ°āĻ“ āĻŦā§‡āĻļāĻŋ):
āĻĄāĻ•āĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

3. āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ•āĻŋāĻ›ā§āĻŸāĻž āĻŦā§‡āĻļāĻŋ āĻŽāĻžāĻ¨āĻŦ-āĻĒāĻžāĻ āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ†āĻ•āĻžāĻ°ā§‡ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡, āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¤āĻŋāĻ¨āĻŸāĻŋ JSON āĻĢāĻžāĻ‡āĻ˛āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ HTML āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ° āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻšāĻ¯āĻŧāĨ¤
āĻāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ āĻŸāĻžāĻ¸ā§āĻ• āĻĻā§āĻŦāĻžāĻ°āĻž āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻāĻŦāĻ‚ āĻāĻ° āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻĻāĻ°ā§āĻļāĻ¨ āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ HTML āĻĢāĻžāĻ‡āĻ˛āĨ¤ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻ‰āĻ¤ā§āĻ¸āĻŸāĻŋāĻ“ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻ°āĻ™ āĻ‡āĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
āĻĄāĻ•āĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻšā§‡āĻ• āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

āĻļā§‡āĻ˛ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ

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

āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻ¸āĻĢāĻ˛āĻ­āĻžāĻŦā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯, āĻĄāĻ•āĻžāĻ°āĻ•ā§‡ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ•ā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻĄāĻ•āĻžāĻ° āĻ—ā§āĻ°ā§āĻĒā§‡ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻāĻ–āĻžāĻ¨ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡: docker_sec_check.sh

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

āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻšāĻŦā§‡ docker_tools, āĻ¤āĻžāĻĻā§‡āĻ° āĻ•āĻžāĻœā§‡āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ āĻ†āĻ›ā§‡ docker_tools/json, āĻāĻŦāĻ‚ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ āĻ¸āĻš HTML āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻĨāĻžāĻ•āĻŦā§‡ āĻĢāĻ˛āĻžāĻĢāĻ˛.html.

āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ

~/docker_cicd$ ./docker_sec_check.sh

[+] Setting environment variables
[+] Installing required packages
[+] Preparing necessary directories
[+] Fetching sample Dockerfile
2020-10-20 10:40:00 (45.3 MB/s) - ‘Dockerfile’ saved [8071/8071]
[+] Pulling image to scan
latest: Pulling from bkimminich/juice-shop
[+] Running Hadolint
...
Dockerfile:205 DL3015 Avoid additional packages by specifying `--no-install-recommends`
Dockerfile:248 DL3002 Last USER should not be root
...
[+] Running Dockle
...
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
...
[+] Running Trivy
juice-shop/frontend/package-lock.json
=====================================
Total: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 2, CRITICAL: 0)

+---------------------+------------------+----------+---------+-------------------------+
|       LIBRARY       | VULNERABILITY ID | SEVERITY | VERSION |             TITLE       |
+---------------------+------------------+----------+---------+-------------------------+
| object-path         | CVE-2020-15256   | HIGH     | 0.11.4  | Prototype pollution in  |
|                     |                  |          |         | object-path             |
+---------------------+------------------+          +---------+-------------------------+
| tree-kill           | CVE-2019-15599   |          | 1.2.2   | Code Injection          |
+---------------------+------------------+----------+---------+-------------------------+
| webpack-subresource | CVE-2020-15262   | LOW      | 1.4.1   | Unprotected dynamically |
|                     |                  |          |         | loaded chunks           |
+---------------------+------------------+----------+---------+-------------------------+

juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)

...

juice-shop/package-lock.json
============================
Total: 5 (CRITICAL: 5)

...
[+] Removing left-overs
[+] Making the output look pretty
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻ¸āĻš āĻĄāĻ•āĻžāĻ° āĻ‡āĻŽā§‡āĻœ

āĻ¤ā§ƒāĻ¤ā§€āĻ¯āĻŧ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻ†āĻŽāĻŋ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋāĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻšāĻŋāĻ¤ā§āĻ° āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĻā§āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĄāĻ•āĻžāĻ°āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻ‚āĻ•āĻ˛āĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻāĻ•āĻŸāĻŋ āĻĄāĻ•āĻžāĻ°āĻĢāĻžāĻ‡āĻ˛ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻšāĻŋāĻ¤ā§āĻ° āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻ•āĻ°āĻŦā§‡, āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻŸāĻŋ (āĻĄāĻ•āĻžāĻ°āĻĢāĻžāĻ‡āĻ˛_āĻŸāĻžāĻ°) āĻāĻ•āĻŸāĻŋ āĻšāĻŋāĻ¤ā§āĻ° āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻŸāĻžāĻ° āĻĢāĻžāĻ‡āĻ˛ āĻ¸ā§āĻ•ā§āĻ¯āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻ•āĻ°āĻŦā§‡āĨ¤

1. āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋ āĻĨā§‡āĻ•ā§‡ āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻĄāĻ•āĻžāĻ° āĻĢāĻžāĻ‡āĻ˛ āĻāĻŦāĻ‚ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻ¨āĻŋāĻ¨ https://github.com/Swordfish-Security/docker_cicd/tree/master/Dockerfile.
2. āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽāĻžāĻŦā§‡āĻļā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŸāĻŋ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻŋ:

docker build -t dscan:image -f docker_security.df .

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

docker run --rm -v $(pwd)/results:/results -v $(pwd)/docker_security.df:/Dockerfile -e DOCKERIMAGE="bkimminich/juice-shop" dscan:image


[+] Setting environment variables
[+] Running Hadolint
/Dockerfile:3 DL3006 Always tag the version of an image explicitly
[+] Running Dockle
WARN    - DKL-DI-0006: Avoid latest tag
        * Avoid 'latest' tag
INFO    - CIS-DI-0005: Enable Content trust for Docker
        * export DOCKER_CONTENT_TRUST=1 before docker pull/build
INFO    - CIS-DI-0006: Add HEALTHCHECK instruction to the container image
        * not found HEALTHCHECK statement
INFO    - DKL-LI-0003: Only put necessary files
        * unnecessary file : juice-shop/node_modules/sqlite3/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm64/Dockerfile
        * unnecessary file : juice-shop/node_modules/sqlite3/tools/docker/architecture/linux-arm/Dockerfile
[+] Running Trivy
...
juice-shop/package-lock.json
============================
Total: 20 (UNKNOWN: 0, LOW: 1, MEDIUM: 6, HIGH: 8, CRITICAL: 5)
...
[+] Making the output look pretty
[+] Starting the main module ============================================================
[+] Converting JSON results
[+] Writing results HTML
[+] Clean exit ============================================================
[+] Everything is done. Find the resulting HTML report in results.html

Đ ĐĩСŅƒĐģŅŒŅ‚Đ°Ņ‚Ņ‹

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

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

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

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

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