āĻšā§ āĻšāĻžāĻŦāĻ°!
āĻāĻ§ā§āĻ¨āĻŋāĻ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻ¤āĻžāĻ¯āĻŧ, āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¯āĻŧ āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ°āĻžāĻāĻā§āĻļāĻ¨ā§āĻ° āĻā§āĻ°āĻŽāĻŦāĻ°ā§āĻ§āĻŽāĻžāĻ¨ āĻā§āĻŽāĻŋāĻāĻžāĻ° āĻāĻžāĻ°āĻŖā§, āĻāĻ¨āĻā§āĻāĻ¨āĻžāĻ°āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻā§āĻ¤ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ¸ā§āĻ¤āĻ° āĻāĻŦāĻ āĻ¸āĻ¤ā§āĻ¤āĻžāĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻāĻŋ āĻāĻŽ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻ¨āĻ¯āĻŧāĨ¤ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻā§āĻāĻā§āĻ˛āĻŋ āĻāĻ°āĻž āĻ¸āĻŽāĻ¯āĻŧāĻ¸āĻžāĻĒā§āĻā§āĻˇ, āĻ¤āĻžāĻ āĻāĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋāĻā§ āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻāĻ°āĻžāĻ° āĻĻāĻŋāĻā§ āĻ āĻ¨ā§āĻ¤āĻ¤ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻĒāĻĻāĻā§āĻˇā§āĻĒ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻāĻāĻāĻŋ āĻāĻžāĻ˛ āĻ§āĻžāĻ°āĻŖāĻž āĻšāĻŦā§ā§ˇ
āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§, āĻāĻŽāĻŋ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻĄāĻāĻžāĻ° āĻ¸ā§āĻ°āĻā§āĻˇāĻž āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¤ā§āĻ°āĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋ āĻāĻžāĻ āĻāĻ°āĻŦ āĻāĻŦāĻ āĻāĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻā§āĻ āĻĄā§āĻŽā§ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§āĨ¤ āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻāĻŽā§āĻ āĻāĻŦāĻ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§āĻ° āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻā§āĻāĻžāĻŦā§ āĻ¸āĻāĻāĻ āĻŋāĻ¤ āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻž āĻ¨āĻŋāĻ¯āĻŧā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻāĻ°āĻŖāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻāĻž āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¯ā§ āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻāĻŦāĻ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§ āĻāĻ˛āĻžāĻĻāĻž, āĻ¤āĻžāĻ āĻ¨ā§āĻā§ āĻāĻŽāĻŋ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻŦāĨ¤
āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻā§āĻ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ
āĻĒā§āĻ°āĻā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ āĻ
ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻĄāĻāĻžāĻ° āĻ
āĻŦāĻāĻžāĻ āĻžāĻŽā§āĻ° āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻĻāĻŋāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĨ¤ āĻ¤āĻžāĻĻā§āĻ° āĻāĻŋāĻā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§ (
āĻšā§āĻ¯āĻžāĻĄā§āĻ˛āĻŋāĻ¨ā§āĻ
āĻāĻāĻāĻŋ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻāĻ¨āĻ¸ā§āĻ˛ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻ¯āĻž āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§, āĻĒā§āĻ°āĻĨāĻŽ āĻāĻ¨ā§āĻŽāĻžāĻ¨āĻŋāĻ āĻšāĻŋāĻ¸āĻžāĻŦā§, āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§āĻ° āĻ¸āĻ āĻŋāĻāĻ¤āĻž āĻāĻŦāĻ āĻ¸ā§āĻ°āĻā§āĻˇāĻž āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ āĻ¨ā§āĻŽā§āĻĻāĻŋāĻ¤ āĻāĻŋāĻ¤ā§āĻ° āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŦāĻž āĻ¸ā§āĻĄā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§)āĨ¤
āĻĄāĻāĻ˛
āĻāĻāĻāĻŋ āĻāĻ¨āĻ¸ā§āĻ˛ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻ¯āĻž āĻāĻāĻāĻŋ āĻāĻŋāĻ¤ā§āĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°ā§ (āĻŦāĻž āĻāĻāĻāĻŋ āĻāĻŋāĻ¤ā§āĻ°ā§āĻ° āĻ¸āĻāĻ°āĻā§āĻˇāĻŋāĻ¤ āĻāĻžāĻ° āĻ¸āĻāĻ°āĻā§āĻˇāĻŖāĻžāĻāĻžāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§), āĻ¯āĻž āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻŋāĻ¤ā§āĻ°ā§āĻ° āĻ¸āĻ āĻŋāĻāĻ¤āĻž āĻāĻŦāĻ āĻ¸ā§āĻ°āĻā§āĻˇāĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§ āĻ¯ā§āĻŽāĻ¨ āĻāĻ° āĻ¸ā§āĻ¤āĻ° āĻāĻŦāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°ā§ - āĻā§āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ°āĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻā§āĻ¨ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻ¯āĻž āĻāĻ˛āĻŋāĻāĻŽ āĻŽāĻžāĻāĻ¨ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§, āĻāĻāĻāĻŋ āĻāĻžāĻ˛āĻŋ āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄā§āĻ° āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻāĻ¤ā§āĻ¯āĻžāĻĻāĻŋāĨ¤
āĻā§āĻ°āĻŋāĻāĻŋ
āĻāĻ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻĻā§āĻāĻŋ āĻ§āĻ°āĻŖā§āĻ° āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°āĻžāĻ° āĻ˛āĻā§āĻˇā§āĻ¯ā§ - āĻāĻāĻ¸ āĻŦāĻŋāĻ˛ā§āĻĄā§āĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž (āĻāĻ˛āĻĒāĻžāĻāĻ¨, āĻ°ā§āĻĄāĻšā§āĻ¯āĻžāĻ (āĻāĻāĻ˛), āĻ¸ā§āĻ¨ā§āĻā§āĻ¸, āĻĄā§āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ āĻāĻŋāĻāĻ¨āĻāĻ, āĻāĻŦā§āĻ¨ā§āĻā§ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻŽāĻ°ā§āĻĨāĻŋāĻ¤) āĻāĻŦāĻ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¤āĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž (Gemfile.lock, Pipfile.lock, composer.lock, āĻĒā§āĻ¯āĻžāĻā§āĻ) -lock.json , yarn.lock, cargo.lock)āĨ¤ āĻā§āĻ°āĻŋāĻāĻŋ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻāĻŦāĻŋ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻāĻŦāĻŋ āĻāĻāĻ¯āĻŧāĻ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻāĻŦāĻ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ .tar āĻĢāĻžāĻāĻ˛ā§āĻ° āĻāĻĒāĻ° āĻāĻŋāĻ¤ā§āĻ¤āĻŋ āĻāĻ°ā§ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŦāĻŋāĻāĻ˛ā§āĻĒ
āĻāĻāĻāĻŋ āĻŦāĻŋāĻā§āĻāĻŋāĻ¨ā§āĻ¨ āĻĒāĻ°āĻŋāĻŦā§āĻļā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨āĻā§āĻ˛āĻŋ āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻŋ āĻāĻŋāĻā§āĻāĻž āĻ¸āĻ°āĻ˛ā§āĻā§āĻ¤ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¯āĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻŦāĨ¤
āĻŽā§āĻ˛ āĻ§āĻžāĻ°āĻŖāĻž āĻšāĻ˛ āĻāĻĒāĻ¨āĻŋ āĻā§āĻāĻžāĻŦā§ āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛āĻ¸ āĻāĻŦāĻ āĻĄāĻāĻžāĻ° āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋāĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻ¯āĻžāĻāĻžāĻāĻāĻ°āĻŖ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¤āĻž āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻāĻ°āĻž āĻ¯āĻž āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¤ā§āĻ°āĻŋ āĻšāĻ¯āĻŧāĨ¤
āĻā§āĻ āĻ¨āĻŋāĻā§āĻ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻ¯āĻŧā§ āĻāĻ āĻŋāĻ¤:
- āĻāĻāĻāĻŋ āĻ˛āĻŋāĻ¨ā§āĻāĻžāĻ° āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§āĻ° āĻ¸āĻ āĻŋāĻāĻ¤āĻž āĻāĻŦāĻ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻšāĻā§āĻā§ āĻšā§āĻ¯āĻžāĻĄā§āĻ˛āĻŋāĻ¨ā§āĻ
- āĻāĻāĻāĻŋ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻā§āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻāĻŦāĻ āĻŽāĻ§ā§āĻ¯āĻŦāĻ°ā§āĻ¤ā§ āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻ āĻŋāĻāĻ¤āĻž āĻāĻŦāĻ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻšāĻā§āĻā§ āĻĄāĻāĻ˛
- āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ - āĻŦā§āĻ¸ āĻāĻŽā§āĻā§ āĻ¸āĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨āĻāĻžāĻŦā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻžāĻ° (CVE) āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻāĻŦāĻ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻž āĻšāĻā§āĻā§ āĻā§āĻ°āĻŋāĻāĻŋ
āĻĒāĻ°ā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻāĻŽāĻŋ āĻāĻ āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻā§āĻ˛āĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻŦāĻŋāĻāĻ˛ā§āĻĒ āĻĻā§āĻŦ:
āĻĒā§āĻ°āĻĨāĻŽāĻāĻŋ āĻšāĻ˛ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ CI/CD āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻžāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ (āĻāĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻžāĻĄāĻŧāĻžāĻ¨ā§āĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ¸āĻš)āĨ¤
āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻāĻŋ āĻāĻāĻāĻŋ āĻļā§āĻ˛ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻā§āĨ¤
āĻ¤ā§āĻ¤ā§āĻ¯āĻŧāĻāĻŋāĻ¤ā§ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻāĻĄāĻŧāĻŋāĻ¤āĨ¤
āĻāĻĒāĻ¨āĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻĒāĻ¯ā§āĻā§āĻ¤ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĻāĻŋ āĻāĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨, āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§āĻ¤ā§ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽāĻžāĻ¨āĻŋāĻ¯āĻŧā§ āĻ¨āĻŋāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ā§ˇ
āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĢāĻžāĻāĻ˛ āĻāĻŦāĻ āĻ
āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§ āĻ
āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤:
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻāĻ/āĻ¸āĻŋāĻĄāĻŋ-āĻ¤ā§ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨
āĻĒā§āĻ°āĻĨāĻŽ āĻŦāĻŋāĻāĻ˛ā§āĻĒā§, āĻāĻŽāĻ°āĻž āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸ā§āĻŦā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¤āĻž āĻĻā§āĻāĻŦāĨ¤ āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻ§āĻžāĻĒāĻā§āĻ˛āĻŋ āĻ āĻ¤āĻŋāĻā§āĻ°āĻŽ āĻāĻ°āĻŦ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ°ā§āĻ¯āĻžāĻ āĻĨā§āĻā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻā§āĻāĻžāĻŦā§ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻŦ, āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨āĻŋāĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŦ āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāĻ˛ā§āĻŽā§āĻ˛ā§ āĻāĻŋāĻ¤ā§āĻ° - āĻā§āĻ¸āĻļāĻĒ āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛ā§ āĻāĻ°āĻŦāĨ¤
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻšāĻā§āĻā§
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 āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ°ā§āĻļāĻ¨ āĻĢāĻžāĻāĻ˛āĻāĻŋāĻ¤ā§ āĻ¤āĻŋāĻ¨āĻāĻŋ āĻāĻāĻāĻŋāĻ˛āĻŋāĻāĻŋ (āĻšā§āĻ¯āĻžāĻĄā§āĻ˛āĻŋāĻ¨ā§āĻ, āĻĄāĻāĻ˛ āĻāĻŦāĻ āĻā§āĻ°āĻŋāĻāĻŋ) āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻžāĻŦāĻ˛ā§ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻŋāĻ¤ āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻāĻŦāĻ āĻĄāĻāĻžāĻ°āĻĢāĻžāĻāĻ˛ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻāĻŋāĻ¤ā§āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻŦā§āĨ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĢāĻžāĻāĻ˛ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĨā§āĻā§ āĻ¨ā§āĻāĻ¯āĻŧāĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
āĻĨā§āĻā§ āĻ¨āĻŋāĻˇā§āĻāĻžāĻļāĻ¨ 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-āĻāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§
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_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. āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋ āĻĨā§āĻā§ āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻĄāĻāĻžāĻ° āĻĢāĻžāĻāĻ˛ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻā§āĻ˛āĻŋ āĻ¨āĻŋāĻ¨
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