āĻāĻ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻ āĻāĻŦāĻ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ āĻāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯āĻ āĻāĻā§āĻ°āĻšā§āĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻšāĻŦā§, āĻ¤āĻŦā§ āĻāĻāĻŋ āĻŽā§āĻ˛āĻ¤ āĻ āĻā§āĻŽā§āĻļāĻ¨ āĻŦāĻŋāĻļā§āĻˇāĻā§āĻāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¯āĻžāĻ°āĻž āĻ āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻĒāĻ°āĻŋāĻāĻžāĻ āĻžāĻŽā§ āĻ¸āĻāĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻŦāĻ/āĻ āĻĨāĻŦāĻž āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻā§āĻāĻ¨āĻžāĻ°ā§āĻ° āĻ āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻāĻ/āĻ¸āĻŋāĻĄāĻŋ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸āĻŽā§āĻŽā§āĻā§āĻ¨ āĻšāĻ¨āĨ¤ āĻ āĻ°ā§āĻā§āĻ¸ā§āĻā§āĻ°ā§āĻļāĻ¨ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻāĻĢāĻ°ā§āĻŽāĨ¤ āĻāĻŽāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻŦāĻ˛āĻŦ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻāĻāĻ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻļā§āĻ˛ āĻ°āĻžāĻ¨āĻžāĻ°ā§ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻĒā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻ¯āĻžāĻ¤ā§ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋ āĻāĻā§ āĻ āĻĒāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻšāĻ¸ā§āĻ¤āĻā§āĻˇā§āĻĒ āĻ¨āĻž āĻāĻ°ā§āĨ¤
āĻ¸āĻ¨ā§āĻ¤ā§āĻˇā§āĻ
āĻ āĻĒāĻ°āĻŋāĻšāĻžāĻ°ā§āĻ¯ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻļā§āĻ˛ āĻ°āĻžāĻ¨āĻžāĻ° docker-compose.yml āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻž āĻšāĻā§āĻā§ āĻŽā§āĻāĻĢāĻžāĻāĻ˛ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻž āĻšāĻā§āĻā§ gitlab-ci.yml āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻž āĻšāĻā§āĻā§ āĻĢāĻ˛
āĻ āĻĒāĻ°āĻŋāĻšāĻžāĻ°ā§āĻ¯
-
āĻāĻŽāĻžāĻ° āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§, āĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ āĻāĻā§āĻāĻŋāĻ˛ āĻ¯ā§ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻā§āĻ¸ā§āĻāĻŋāĻ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋāĻ¤ā§ "āĻāĻŋāĻāĻŋāĻ¤ā§āĻ¸āĻž" āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻāĻŦāĻ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻ āĻĒā§āĻ°āĻĨāĻŽ āĻāĻŦāĻ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻšāĻ˛ CI āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻā§āĻ¸ā§āĻāĻŋāĻ āĻŦāĻŋāĻāĻļāĻŋāĻ¤ āĻšāĻā§āĻā§ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž(āĻā§āĻ˛āĻŋ) āĻāĻāĻāĻŋ āĻĄā§āĻ/āĻ¸ā§āĻā§āĻ āĻĒāĻ°āĻŋāĻŦā§āĻļā§ āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻāĻāĻŋ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻ¸ā§āĻˇā§āĻāĻŋ āĻāĻ°ā§āĻā§:
- āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ° āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻāĻžāĻ°āĻŖā§, āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ¸āĻžāĻ°ā§āĻāĻŋāĻāĻāĻŋ āĻāĻžāĻāĻž āĻĄā§āĻāĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻā§āĻˇāĻ¤āĻŋāĻā§āĻ°āĻ¸ā§āĻ¤ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻŽāĻ¨ āĻāĻŋāĻā§ āĻāĻāĻ¨āĻž āĻāĻā§āĻā§ āĻ¯āĻāĻ¨ āĻāĻāĻāĻŋ āĻāĻžāĻāĻž JSON āĻĢāĻ°ā§āĻŽā§āĻ¯āĻžāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻĒāĻžāĻ āĻžāĻ¨ā§ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻāĻŋ āĻā§āĻ°ā§āĻ¯āĻžāĻļ āĻāĻ°ā§, āĻ¯āĻž āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄāĻāĻŋāĻā§ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ°ā§āĻĒā§ āĻ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°ā§ āĻ¤ā§āĻ˛ā§āĻāĻŋāĻ˛āĨ¤
- āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĄā§āĻāĻž āĻŦā§āĻĻā§āĻ§āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ¸āĻžāĻ°ā§āĻāĻŋāĻā§āĻ° āĻŽāĻ¨ā§āĻĨāĻ°āĻ¤āĻžāĨ¤ āĻāĻŽāĻŋ āĻŽāĻ¨ā§ āĻāĻ°āĻŋ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ°/āĻ°ā§āĻ˛ āĻŦā§āĻ¯āĻžāĻ āĻāĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻžāĻ° āĻā§āĻ¨ āĻ āĻ°ā§āĻĨ āĻ¨ā§āĻāĨ¤ āĻāĻŽāĻžāĻ° āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§, āĻāĻŽāĻŋ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¸āĻŽā§āĻŽā§āĻā§āĻ¨ āĻšāĻāĻ¨āĻŋ āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻŋ āĻ¸ā§āĻāĻžāĻ°ā§āĻāĻžāĻŦā§ āĻšāĻ¯āĻŧā§āĻā§āĨ¤
- āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻ¸ā§āĻāĻŋāĻāĻ¸ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ¸āĻžāĻ°ā§āĻāĻŋāĻā§āĻ° āĻāĻžāĻ°ā§āĻ¯āĻāĻžāĻ°āĻŋāĻ¤āĻž āĻŦā§āĻ¯āĻžāĻšāĻ¤ āĻāĻ°āĻžāĻ° āĻā§āĻāĻāĻŋāĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§/āĻā§āĻ°ā§āĻĒ/āĻĒāĻžāĻ¸āĻāĻ¯āĻŧāĻžāĻ°ā§āĻĄ/āĻ ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻā§āĻļāĻ¨ āĻ¨ā§āĻ¤āĻŋāĨ¤
- āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻĨā§āĻā§ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĄā§āĻāĻž āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛ āĻĒāĻ°ā§āĻā§āĻˇāĻāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻŦāĻ¨ āĻāĻ āĻŋāĻ¨ āĻāĻ°ā§ āĻ¤ā§āĻ˛ā§āĨ¤
āĻā§āĻ āĻā§āĻ āĻŦāĻ˛āĻŦā§āĻ¨ āĻ¯ā§ āĻāĻžāĻ˛ āĻ āĻā§āĻā§āĻ¸ā§āĻā§āĻ° āĻ¨āĻŋāĻā§āĻ° āĻĒāĻ°ā§ āĻĄā§āĻāĻž āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°āĻž āĻāĻāĻŋāĻ¤āĨ¤ āĻāĻŽāĻžāĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§ āĻ¯ā§āĻā§āĻ¤āĻŋ āĻāĻā§:
- āĻĄāĻžāĻāĻ¨āĻžāĻŽāĻŋāĻ āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻā§āĻŦāĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻāĨ¤
- āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻŦāĻ¸ā§āĻ¤ā§ API āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽ āĻĨā§āĻā§ āĻ¸āĻ°āĻžāĻ¨ā§ āĻ¯āĻžāĻŦā§ āĻ¨āĻžāĨ¤ āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻāĻāĻāĻŋ āĻŦāĻ¸ā§āĻ¤ā§ āĻŽā§āĻā§ āĻĢā§āĻ˛āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻ˛ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻšāĻ¯āĻŧāĻ¨āĻŋ āĻāĻžāĻ°āĻŖ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ āĻ¯ā§āĻā§āĻ¤āĻŋāĻ° āĻŦāĻŋāĻ°ā§āĻ§āĻŋāĻ¤āĻž āĻāĻ°ā§ā§ˇ
- API āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻāĻāĻŋ āĻŦāĻ¸ā§āĻ¤ā§ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻĒā§āĻ°āĻā§āĻ° āĻĒāĻ°āĻŋāĻŽāĻžāĻŖā§ āĻŽā§āĻāĻžāĻĄā§āĻāĻž āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¯āĻž āĻŽā§āĻā§ āĻĢā§āĻ˛āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ¯ā§āĻā§āĻ¤āĨ¤
- āĻ¯āĻĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻā§āĻ˛āĻŋāĻ° āĻ¨āĻŋāĻā§āĻĻā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¤āĻž āĻĨāĻžāĻā§, āĻ¤āĻŦā§ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻĒāĻ°ā§ āĻĄā§āĻāĻž āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°āĻžāĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻŽāĻžāĻĨāĻžāĻŦā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻ¯āĻŧāĨ¤
- āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ (āĻāĻŦāĻ, āĻāĻŽāĻžāĻ° āĻŽāĻ¤ā§, āĻ¨ā§āĻ¯āĻžāĻ¯ā§āĻ¯ āĻ¨āĻ¯āĻŧ) API-āĻ¤ā§ āĻāĻ˛āĨ¤
- āĻāĻŦāĻ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ¯ā§āĻā§āĻ¤āĻŋ: āĻ¯āĻāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĄā§āĻāĻž āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻĨā§āĻā§ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¸āĻžāĻĢ āĻāĻ°āĻž āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧāĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ PK/FK āĻ¸āĻžāĻ°ā§āĻāĻžāĻ¸ā§ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻā§āĻā§! āĻāĻŽāĻ°āĻž āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°āĻĻā§āĻ° āĻāĻžāĻ āĻĨā§āĻā§ āĻļā§āĻ¨ā§āĻāĻŋ: "āĻāĻŽāĻŋ āĻāĻāĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻāĻŋ āĻāĻŋāĻšā§āĻ¨ āĻ¯ā§āĻ/āĻŽā§āĻā§ āĻĢā§āĻ˛ā§āĻāĻŋ/āĻ¨āĻžāĻŽ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°ā§āĻāĻŋ, āĻā§āĻ¨ 100500 āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ§āĻ°āĻž āĻĒāĻĄāĻŧā§āĻāĻŋāĻ˛?"
āĻāĻŽāĻžāĻ° āĻŽāĻ¤ā§, āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ āĻ¨ā§āĻā§āĻ˛ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻšāĻ˛ āĻāĻāĻāĻŋ āĻāĻ¤āĻŋāĻļā§āĻ˛ āĻĒāĻ°āĻŋāĻŦā§āĻļāĨ¤
- āĻ āĻ¨ā§āĻ āĻ˛ā§āĻ āĻāĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻāĻžāĻ°-āĻāĻŽā§āĻĒā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ CI/CD-āĻ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻā§āĻ¸ā§āĻāĻŋāĻ āĻĒāĻ°āĻŋāĻāĻžāĻ˛āĻ¨āĻž āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻā§āĻŦ āĻāĻŽ āĻ˛ā§āĻāĻ āĻĄāĻāĻžāĻ°-āĻāĻŽā§āĻĒā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤ āĻāĻŦāĻ āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻŋ āĻā§āĻŦāĻžāĻ°āĻ¨ā§āĻ, āĻāĻžāĻāĻ āĻāĻŦāĻ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻ§āĻžāĻ°āĻ āĻ āĻ°ā§āĻā§āĻ¸ā§āĻā§āĻ°ā§āĻļāĻ¨ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻāĻĢāĻ°ā§āĻŽāĻā§āĻ˛āĻŋāĻā§ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻāĻŋ āĻ¨āĻžāĨ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻā§āĻŽā§āĻĒāĻžāĻ¨āĻŋ āĻ¤āĻžāĻĻā§āĻ° āĻāĻā§ āĻ¨āĻž. docker-compose.yml āĻ¸āĻžāĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ āĻšāĻ˛ā§ āĻāĻžāĻ˛ā§ āĻšāĻŦā§āĨ¤
- āĻāĻŽāĻ¨āĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ QA āĻ°āĻžāĻ¨āĻžāĻ° āĻĨāĻžāĻāĻ˛ā§āĻ, āĻāĻŽāĻ°āĻž āĻā§āĻāĻžāĻŦā§ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ āĻ¯ā§ āĻĄāĻāĻžāĻ°-āĻāĻŽā§āĻĒā§āĻā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋ āĻāĻā§ āĻ āĻĒāĻ°ā§āĻ° āĻ¸āĻžāĻĨā§ āĻšāĻ¸ā§āĻ¤āĻā§āĻˇā§āĻĒ āĻāĻ°ā§ āĻ¨āĻž?
- āĻāĻŋāĻāĻžāĻŦā§ āĻĒāĻ°ā§āĻā§āĻˇāĻŋāĻ¤ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ° āĻ˛āĻ āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°āĻ¤ā§?
- āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻŋāĻāĻžāĻŦā§ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°āĻŦā§āĻ¨?
āĻāĻŽāĻžāĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ°āĻžāĻ¨āĻžāĻ° āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻŽāĻŋ āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻ āĻĒā§āĻ°āĻļā§āĻ¨ā§āĻ° āĻ¸āĻŽā§āĻŽā§āĻā§āĻ¨ āĻšāĻ¯āĻŧā§āĻāĻŋ
āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻļā§āĻ˛ āĻ°āĻžāĻ¨āĻžāĻ°
āĻāĻāĻāĻ¨ āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻŋ 4 vCPU, 4 GB RAM, 50 GB HDD āĻ¸āĻš āĻāĻāĻāĻŋ Linux āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ā§āĻ° āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻāĻŋāĨ¤
āĻāĻ¨ā§āĻāĻžāĻ°āĻ¨ā§āĻā§ āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ-āĻ°āĻžāĻ¨āĻžāĻ° āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§ āĻ
āĻ¨ā§āĻ āĻ¤āĻĨā§āĻ¯ āĻ°āĻ¯āĻŧā§āĻā§, āĻ¤āĻžāĻ āĻ¸āĻāĻā§āĻˇā§āĻĒā§:
- SSH āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻŽā§āĻļāĻŋāĻ¨ā§ āĻ˛āĻāĻāĻ¨ āĻāĻ°ā§āĻ¨
-
āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ 8 āĻāĻŋāĻāĻžāĻŦāĻžāĻāĻā§āĻ° āĻāĻŽ āĻ°âā§āĻ¯āĻžāĻŽ āĻĨāĻžāĻā§ āĻ¤āĻŦā§ āĻāĻŽāĻŋ āĻ¸ā§āĻĒāĻžāĻ°āĻŋāĻļ āĻāĻ°āĻŋ
10 āĻāĻŋāĻŦāĻŋ āĻ āĻĻāĻ˛āĻŦāĻĻāĻ˛ āĻāĻ°ā§āĻ¨ āĻ¯āĻžāĻ¤ā§ āĻāĻāĻāĻŽ āĻāĻŋāĻ˛āĻžāĻ° āĻāĻ¸ā§ āĻ°âā§āĻ¯āĻžāĻŽā§āĻ° āĻ āĻāĻžāĻŦā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻāĻā§āĻ˛ā§ āĻŽā§āĻ°ā§ āĻĢā§āĻ˛āĻ¤ā§ āĻ¨āĻž āĻĒāĻžāĻ°ā§āĨ¤ āĻāĻāĻŋ āĻāĻāĻ¤ā§ āĻĒāĻžāĻ°ā§ āĻ¯āĻāĻ¨ 5āĻāĻŋāĻ° āĻŦā§āĻļāĻŋ āĻāĻžāĻ āĻāĻāĻ¸āĻžāĻĨā§ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻāĻ°āĻ āĻ§ā§āĻ°ā§ āĻ§ā§āĻ°ā§ āĻ¤āĻŦā§ āĻ¸ā§āĻĨāĻŋāĻ°āĻāĻžāĻŦā§ āĻ āĻā§āĻ°āĻ¸āĻ° āĻšāĻŦā§āĨ¤OOM āĻšāĻ¤ā§āĻ¯āĻžāĻāĻžāĻ°ā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ
āĻāĻĒāĻ¨āĻŋ āĻāĻžāĻ¸ā§āĻ āĻ˛āĻ āĻĻā§āĻāĻ¤ā§ āĻšāĻ˛ā§
bash: line 82: 26474 Killed
, āĻ¤āĻžāĻ°āĻĒāĻ° āĻļā§āĻ§ā§ āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻĒāĻ° āĻāĻžāĻ˛āĻžāĻ¨ā§sudo dmesg | grep 26474
[26474] 1002 26474 1061935 123806 339 0 0 java Out of memory: Kill process 26474 (java) score 127 or sacrifice child Killed process 26474 (java) total-vm:4247740kB, anon-rss:495224kB, file-rss:0kB, shmem-rss:0kB
āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻāĻŦāĻŋāĻāĻŋ āĻāĻ°āĻāĻŽ āĻāĻŋāĻā§ āĻĻā§āĻāĻžāĻ¯āĻŧ, āĻ¤āĻžāĻšāĻ˛ā§ āĻšāĻ¯āĻŧ āĻ¸ā§āĻ¯āĻŧāĻžāĻĒ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨ āĻŦāĻž RAM āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨āĨ¤
- āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨
gitlab-āĻ°āĻžāĻ¨āĻžāĻ° ,āĻĄāĻāĻļā§āĻ°āĻŽāĻŋāĻ ,Docker-āĻ°āĻāĻ¨āĻž , āĻ¤ā§āĻ°āĻŋāĨ¤ - āĻāĻāĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻā§āĻā§
gitlab-runner
āĻā§āĻ°ā§āĻĒā§docker
sudo groupadd docker sudo usermod -aG docker gitlab-runner
āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ gitlab-āĻ°āĻžāĻ¨āĻžāĻ°-
āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻ˛ā§āĻ¨
/etc/gitlab-runner/config.toml
āĻāĻŦāĻ āĻ¯ā§āĻ āĻāĻ°concurrent=20 [[runners]] request_concurrency = 10
āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻ āĻ°āĻžāĻ¨āĻžāĻ°ā§ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛ āĻāĻžāĻāĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻ āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§āĻŦā§āĨ¤ āĻāĻ°āĻ āĻĒāĻĄāĻŧā§āĻ¨
āĻāĻāĻžāĻ¨ā§ .
āĻāĻĒāĻ¨āĻžāĻ° āĻ¯āĻĻāĻŋ āĻāĻ°āĻ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻŽā§āĻļāĻŋāĻ¨ āĻĨāĻžāĻā§, āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ 8 vCPU, 16 GB RAM, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻ āĻ¸āĻāĻā§āĻ¯āĻžāĻā§āĻ˛āĻŋ āĻāĻŽāĻĒāĻā§āĻˇā§ 2 āĻā§āĻŖ āĻŦāĻĄāĻŧ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤ āĻ¤āĻŦā§ āĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°ā§ āĻāĻ āĻ°āĻžāĻ¨āĻžāĻ°āĻāĻŋāĻ¤ā§ āĻ āĻŋāĻ āĻā§ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻšāĻŦā§ āĻāĻŦāĻ āĻā§ āĻĒāĻ°āĻŋāĻŽāĻžāĻŖā§āĨ¤
āĻ¯ā§ āĻ¯āĻĨā§āĻˇā§āĻāĨ¤
docker-compose.yml āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻāĻžāĻ āĻšāĻ˛ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ°ā§āĻŦāĻāĻ¨ā§āĻ¨ docker-compose.yml, āĻ¯āĻž āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°/āĻĒāĻ°ā§āĻā§āĻˇāĻāĻ°āĻž āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧāĻāĻžāĻŦā§ āĻāĻŦāĻ CI āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§ āĻāĻāĻ¯āĻŧāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĨ¤
āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻŽāĻ°āĻž CI-āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻ
āĻ¨āĻ¨ā§āĻ¯ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ° āĻ¨āĻžāĻŽ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋāĨ¤ GitLab CI-āĻāĻ° āĻ
āĻ¨āĻ¨ā§āĻ¯ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋ āĻšāĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ CI_JOB_ID
. āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻŋ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°ā§āĻ¨ container_name
āĻ
āĻ°ā§āĻĨ āĻ¸āĻš "service-${CI_JOB_ID:-local}"
, āĻ¤āĻžāĻ°āĻĒāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§:
- āĻ¯āĻĻāĻŋ
CI_JOB_ID
āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ¨āĻ¯āĻŧ,
āĻ¤āĻžāĻšāĻ˛ā§ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ° āĻ¨āĻžāĻŽ āĻšāĻŦā§service-local
- āĻ¯āĻĻāĻŋ
CI_JOB_ID
āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ (āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ 123),
āĻ¤āĻžāĻšāĻ˛ā§ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻ° āĻ¨āĻžāĻŽ āĻšāĻŦā§service-123
āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧāĻ¤, āĻāĻŽāĻ°āĻž āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻžāĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋāĨ¤ āĻāĻāĻžāĻ§āĻŋāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻāĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨ā§āĻāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ-āĻ¸ā§āĻ¤āĻ°ā§āĻ° āĻŦāĻŋāĻā§āĻāĻŋāĻ¨ā§āĻ¨āĻ¤āĻž āĻĻā§āĻ¯āĻŧāĨ¤
networks:
default:
external:
name: service-network-${CI_JOB_ID:-local}
āĻāĻ¸āĻ˛ā§, āĻāĻāĻŋ āĻ¸āĻžāĻĢāĻ˛ā§āĻ¯ā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ§āĻžāĻĒ =)
āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻ¸āĻš āĻāĻŽāĻžāĻ° docker-compose.yml āĻāĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ
version: "3"
# ĐĐģŅ ĐēĐžŅŅĐĩĐēŅĐŊОК ŅайОŅŅ web (php) и fmt ĐŊŅĐļĐŊĐž,
# ŅŅОйŅ ĐēĐžĐŊŅĐĩĐšĐŊĐĩŅŅ иĐŧĐĩĐģи ОйŅиК иŅĐŋĐžĐģĐŊŅĐĩĐŧŅĐš ĐēĐžĐŊŅĐĩĐŊŅ.
# Đ ĐŊĐ°ŅĐĩĐŧ ŅĐģŅŅĐ°Đĩ, ŅŅĐž диŅĐĩĐēŅĐžŅиŅ /var/www/testrail
volumes:
static-content:
# ĐСОĐģиŅŅĐĩĐŧ ĐžĐēŅŅĐļĐĩĐŊиĐĩ ĐŊĐ° ŅĐĩŅĐĩвОĐŧ ŅŅОвĐŊĐĩ
networks:
default:
external:
name: testrail-network-${CI_JOB_ID:-local}
services:
db:
image: mysql:5.7.22
# ĐĐ°ĐļĐ´ŅĐš container_name ŅОдĐĩŅĐļиŅ ${CI_JOB_ID:-local}
container_name: "testrail-mysql-${CI_JOB_ID:-local}"
environment:
MYSQL_HOST: db
MYSQL_DATABASE: mydb
MYSQL_ROOT_PASSWORD: 1234
SKIP_GRANT_TABLES: 1
SKIP_NETWORKING: 1
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
- default
migration:
image: registry.gitlab.com/touchbit/image/testrail/migration:latest
container_name: "testrail-migration-${CI_JOB_ID:-local}"
links:
- db
depends_on:
- db
networks:
- default
fpm:
image: registry.gitlab.com/touchbit/image/testrail/fpm:latest
container_name: "testrail-fpm-${CI_JOB_ID:-local}"
volumes:
- static-content:/var/www/testrail
links:
- db
networks:
- default
web:
image: registry.gitlab.com/touchbit/image/testrail/web:latest
container_name: "testrail-web-${CI_JOB_ID:-local}"
# ĐŅĐģи ĐŋĐĩŅĐĩĐŧĐĩĐŊĐŊŅĐĩ TR_HTTP_PORT иĐģи TR_HTTPS_PORTS ĐŊĐĩ ĐžĐŋŅĐĩĐ´ĐĩĐģĐĩĐŊŅ,
# ŅĐž ŅĐĩŅвиŅ ĐŋОдĐŊиĐŧĐ°ĐĩŅŅŅ ĐŊĐ° 80 и 443 ĐŋĐžŅŅŅ ŅООŅвĐĩŅŅŅвĐĩĐŊĐŊĐž.
ports:
- ${TR_HTTP_PORT:-80}:80
- ${TR_HTTPS_PORT:-443}:443
volumes:
- static-content:/var/www/testrail
links:
- db
- fpm
networks:
- default
āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻ°āĻžāĻ¨ āĻāĻĻāĻžāĻšāĻ°āĻŖ
docker-compose -f docker-compose.yml up -d
Starting testrail-mysql-local ... done
Starting testrail-migration-local ... done
Starting testrail-fpm-local ... done
Recreating testrail-web-local ... done
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¸āĻŋāĻāĻāĻ¤ā§ āĻ˛āĻā§āĻ āĻāĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻ¤ āĻ¸āĻšāĻ āĻ¨āĻ¯āĻŧāĨ¤
āĻŽā§āĻāĻĢāĻžāĻāĻ˛ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻŽāĻŋ āĻŽā§āĻāĻĢāĻžāĻāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ āĻāĻžāĻ°āĻŖ āĻāĻāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž āĻāĻŦāĻ āĻ¸āĻŋāĻāĻ āĻāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻ¯āĻ āĻā§āĻŦ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻāĨ¤ āĻāĻ°ā§ āĻ āĻ¨āĻ˛āĻžāĻāĻ¨ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯
# ĐŖ ĐŧĐĩĐŊŅ в ĐŋŅĐžĐĩĐēŅĐ°Ņ
вŅĐĩ вŅĐŋĐžĐŧĐžĐŗĐ°ŅĐĩĐģŅĐŊŅĐĩ вĐĩŅи ĐģĐĩĐļĐ°Ņ в диŅĐĩĐēŅĐžŅии `.indirect`,
# в ŅĐžĐŧ ŅиŅĐģĐĩ и `docker-compose.yml`
# ĐŅĐŋĐžĐģŅСОваŅŅ bash Ņ ĐžĐŋŅиĐĩĐš pipefail
# pipefail - ŅĐĩĐšĐģиŅ вŅĐŋĐžĐģĐŊĐĩĐŊиĐĩ ĐŋĐ°ĐšĐŋĐ°, ĐĩŅĐģи ĐēĐžĐŧĐ°ĐŊĐ´Đ° вŅĐŋĐžĐģĐŊиĐģĐ°ŅŅ Ņ ĐžŅийĐēОК
SHELL=/bin/bash -o pipefail
# ĐŅŅĐ°ĐŊавĐģиваĐĩĐŧ ĐēĐžĐŊŅĐĩĐšĐŊĐĩŅŅ и ŅĐ´Đ°ĐģŅĐĩĐŧ ŅĐĩŅŅ
docker-kill:
docker-compose -f $${CI_JOB_ID:-.indirect}/docker-compose.yml kill
docker network rm network-$${CI_JOB_ID:-testrail} || true
# ĐŅĐĩдваŅиŅĐĩĐģŅĐŊĐž вŅĐŋĐžĐģĐŊŅĐĩĐŧ docker-kill
docker-up: docker-kill
# ХОСдаĐĩĐŧ ŅĐĩŅŅ Đ´ĐģŅ ĐžĐēŅŅĐļĐĩĐŊиŅ
docker network create network-$${CI_JOB_ID:-testrail}
# ĐайиŅĐ°ĐĩĐŧ ĐŋĐžŅĐģĐĩĐ´ĐŊиĐĩ ОйŅаСŅ иС docker-registry
docker-compose -f $${CI_JOB_ID:-.indirect}/docker-compose.yml pull
# ĐĐ°ĐŋŅŅĐēĐ°ĐĩĐŧ ĐžĐēŅŅĐļĐĩĐŊиĐĩ
# force-recreate - ĐŋŅиĐŊŅдиŅĐĩĐģŅĐŊĐžĐĩ ĐŋĐĩŅĐĩŅОСдаĐŊиĐĩ ĐēĐžĐŊŅĐĩĐšĐŊĐĩŅОв
# renew-anon-volumes - ĐŊĐĩ иŅĐŋĐžĐģŅСОваŅŅ volumes ĐŋŅĐĩĐ´ŅĐ´ŅŅиŅ
ĐēĐžĐŊŅĐĩĐšĐŊĐĩŅОв
docker-compose -f $${CI_JOB_ID:-.indirect}/docker-compose.yml up --force-recreate --renew-anon-volumes -d
# ĐŅ и, ĐŊĐ° вŅŅĐēиК ŅĐģŅŅĐ°Đš, вŅвĐĩŅŅи ŅŅĐž ŅĐ°Đŧ Ņ ĐŊĐ°Ņ в ĐŋŅиĐŊŅиĐŋĐĩ СаĐŋŅŅĐĩĐŊĐž ĐŊĐ° ĐŧĐ°ŅиĐŊĐēĐĩ
docker ps
# ĐĐžĐģĐģĐĩĐēŅиĐŧ ĐģĐžĐŗи ŅĐĩŅвиŅОв
docker-logs:
mkdir ./logs || true
docker logs testrail-web-$${CI_JOB_ID:-local} >& logs/testrail-web.log
docker logs testrail-fpm-$${CI_JOB_ID:-local} >& logs/testrail-fpm.log
docker logs testrail-migration-$${CI_JOB_ID:-local} >& logs/testrail-migration.log
docker logs testrail-mysql-$${CI_JOB_ID:-local} >& logs/testrail-mysql.log
# ĐŅиŅŅĐēĐ° ŅĐ°ĐŊĐŊĐĩŅĐ°
docker-clean:
@echo ĐŅŅĐ°ĐŊавĐģиваĐĩĐŧ вŅĐĩ testrail-ĐēĐžĐŊŅĐĩĐšĐŊĐĩŅŅ
docker kill $$(docker ps --filter=name=testrail -q) || true
@echo ĐŅиŅŅĐēĐ° Đ´ĐžĐēĐĩŅ ĐēĐžĐŊŅĐĩĐšĐŊĐĩŅОв
docker rm -f $$(docker ps -a -f --filter=name=testrail status=exited -q) || true
@echo ĐŅиŅŅĐēĐ° dangling ОйŅаСОв
docker rmi -f $$(docker images -f "dangling=true" -q) || true
@echo ĐŅиŅŅĐēĐ° testrail ОйŅаСОв
docker rmi -f $$(docker images --filter=reference='registry.gitlab.com/touchbit/image/testrail/*' -q) || true
@echo ĐŅиŅŅĐēĐ° вŅĐĩŅ
ĐŊĐĩиŅĐŋĐžĐģŅСŅĐĩĐŧŅŅ
volume
docker volume rm -f $$(docker volume ls -q) || true
@echo ĐŅиŅŅĐēĐ° вŅĐĩŅ
testrail ŅĐĩŅĐĩĐš
docker network rm $(docker network ls --filter=name=testrail -q) || true
docker ps
āĻā§āĻ
āĻĄāĻāĻžāĻ° āĻāĻĒ āĻāĻ°āĻž
$ make docker-up
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml kill
Killing testrail-web-local ... done
Killing testrail-fpm-local ... done
Killing testrail-mysql-local ... done
docker network rm network-${CI_JOB_ID:-testrail} || true
network-testrail
docker network create network-${CI_JOB_ID:-testrail}
d2ec063324081c8bbc1b08fd92242c2ea59d70cf4025fab8efcbc5c6360f083f
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml pull
Pulling db ... done
Pulling migration ... done
Pulling fpm ... done
Pulling web ... done
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml up --force-recreate --renew-anon-volumes -d
Recreating testrail-mysql-local ... done
Recreating testrail-fpm-local ... done
Recreating testrail-migration-local ... done
Recreating testrail-web-local ... done
docker ps
CONTAINER ID PORTS NAMES
a845d3cb0e5a 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp testrail-web-local
19d8ef001398 9000/tcp testrail-fpm-local
e28840a2369c 3306/tcp, 33060/tcp testrail-migration-local
0e7900c23f37 3306/tcp testrail-mysql-local
āĻĄāĻāĻžāĻ°-āĻ˛āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨
$ make docker-logs
mkdir ./logs || true
mkdir: cannot create directory â./logsâ: File exists
docker logs testrail-web-${CI_JOB_ID:-local} >& logs/testrail-web.log
docker logs testrail-fpm-${CI_JOB_ID:-local} >& logs/testrail-fpm.log
docker logs testrail-migration-${CI_JOB_ID:-local} >& logs/testrail-migration.log
docker logs testrail-mysql-${CI_JOB_ID:-local} >& logs/testrail-mysql.log
gitlab-ci.yml āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ˛āĻŽāĻžāĻ¨
Integration:
stage: test
tags:
- my-shell-runner
before_script:
# ĐŅŅĐĩĐŊŅиŅиŅиŅŅĐĩĐŧŅŅ в registry
- docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
# ĐĐĩĐŊĐĩŅиŅŅĐĩĐŧ ĐŋŅĐĩвдОŅĐŊиĐēĐ°ĐģŅĐŊŅĐĩ TR_HTTP_PORT и TR_HTTPS_PORT
- export TR_HTTP_PORT=$(shuf -i10000-60000 -n1)
- export TR_HTTPS_PORT=$(shuf -i10000-60000 -n1)
# ŅОСдаĐĩĐŧ диŅĐĩĐēŅĐžŅиŅ Ņ идĐĩĐŊŅиŅиĐēĐ°ŅĐžŅĐžĐŧ СадаŅи
- mkdir ${CI_JOB_ID}
# ĐēĐžĐŋиŅŅĐĩĐŧ в ŅОСдаĐŊĐŊŅŅ диŅĐĩĐēŅĐžŅиŅ ĐŊĐ°Ņ docker-compose.yml
# ŅŅОйŅ ĐēĐžĐŊŅĐĩĐēŅŅ ĐąŅĐģ ŅаСĐŊŅĐš Đ´ĐģŅ ĐēĐ°ĐļдОК СадаŅи
- cp .indirect/docker-compose.yml ${CI_JOB_ID}/docker-compose.yml
script:
# ĐŋОдĐŊиĐŧĐ°ĐĩĐŧ ĐŊĐ°ŅĐĩ ĐžĐēŅŅĐļĐĩĐŊиĐĩ
- make docker-up
# СаĐŋŅŅĐēĐ°ĐĩĐŧ ŅĐĩŅŅŅ иŅĐŋĐžĐģĐŊŅĐĩĐŧŅĐŧ jar (Ņ ĐŧĐĩĐŊŅ ŅĐ°Đē)
- java -jar itest.jar --http-port ${TR_HTTP_PORT} --https-port ${TR_HTTPS_PORT}
# иĐģи в ĐēĐžĐŊŅĐĩĐšĐŊĐĩŅĐĩ
- docker run --network=testrail-network-${CI_JOB_ID:-local} --rm itest
after_script:
# ŅОйиŅĐ°ĐĩĐŧ ĐģĐžĐŗи
- make docker-logs
# ĐžŅŅĐ°ĐŊавĐģиваĐĩĐŧ ĐžĐēŅŅĐļĐĩĐŊиĐĩ
- make docker-kill
artifacts:
# ŅĐžŅ
ŅĐ°ĐŊŅĐĩĐŧ ĐģĐžĐŗи
when: always
paths:
- logs
expire_in: 30 days
āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻāĻāĻāĻŋ āĻāĻžāĻ āĻāĻžāĻ˛āĻžāĻ¨ā§āĻ° āĻĢāĻ˛ā§, āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻ˛āĻ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ¤ā§ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ˛āĻ āĻĨāĻžāĻāĻŦā§āĨ¤ āĻ¯āĻž āĻ¤ā§āĻ°ā§āĻāĻŋāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻā§āĻŦāĻ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻāĨ¤ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻ¤āĻžāĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ āĻ˛āĻ āĻ˛ā§āĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻŋ āĻāĻ˛āĻžāĻĻāĻžāĻāĻžāĻŦā§ āĻāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻ¤ā§ āĻšāĻŦā§.
āĻ°āĻžāĻ¨āĻžāĻ° āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°āĻž
āĻāĻāĻāĻŋ āĻļāĻŋāĻĄāĻŋāĻāĻ˛ āĻ āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻāĻžāĻāĻāĻŋ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻšāĻŦā§āĨ¤
stages:
- clean
- build
- test
Clean runner:
stage: clean
only:
- schedules
tags:
- my-shell-runner
script:
- make docker-clean
āĻāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§ āĻ¯āĻžāĻ¨ -> CI/CD -> āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§āĻā§ -> āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§āĻā§ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§āĻā§ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨
āĻĢāĻ˛
GitLab CI-āĻ 4āĻāĻŋ āĻāĻžāĻ āĻāĻžāĻ˛ā§ āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻļā§āĻˇ āĻāĻžāĻ¸ā§āĻā§āĻ° āĻ˛āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻāĻžāĻ¸ā§āĻ āĻĨā§āĻā§ āĻĒāĻžāĻ¤ā§āĻ° āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻ
CONTAINER ID NAMES
c6b76f9135ed testrail-web-204645172
01d303262d8e testrail-fpm-204645172
2cdab1edbf6a testrail-migration-204645172
826aaf7c0a29 testrail-mysql-204645172
6dbb3fae0322 testrail-web-204645084
3540f8d448ce testrail-fpm-204645084
70fea72aa10d testrail-mysql-204645084
d8aa24b2892d testrail-web-204644881
6d4ccd910fad testrail-fpm-204644881
685d8023a3ec testrail-mysql-204644881
1cdfc692003a testrail-web-204644793
6f26dfb2683e testrail-fpm-204644793
029e16b26201 testrail-mysql-204644793
c10443222ac6 testrail-web-204567103
04339229397e testrail-fpm-204567103
6ae0accab28d testrail-mysql-204567103
b66b60d79e43 testrail-web-204553690
033b1f46afa9 testrail-fpm-204553690
a8879c5ef941 testrail-mysql-204553690
069954ba6010 testrail-web-204553539
ed6b17d911a5 testrail-fpm-204553539
1a1eed057ea0 testrail-mysql-204553539
āĻāĻ°ā§ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻ˛āĻ
$ docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /home/gitlab-runner/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
$ export TR_HTTP_PORT=$(shuf -i10000-60000 -n1)
$ export TR_HTTPS_PORT=$(shuf -i10000-60000 -n1)
$ mkdir ${CI_JOB_ID}
$ cp .indirect/docker-compose.yml ${CI_JOB_ID}/docker-compose.yml
$ make docker-up
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml kill
docker network rm testrail-network-${CI_JOB_ID:-local} || true
Error: No such network: testrail-network-204645172
docker network create testrail-network-${CI_JOB_ID:-local}
0a59552b4464b8ab484de6ae5054f3d5752902910bacb0a7b5eca698766d0331
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml pull
Pulling web ... done
Pulling fpm ... done
Pulling migration ... done
Pulling db ... done
docker-compose -f ${CI_JOB_ID:-.indirect}/docker-compose.yml up --force-recreate --renew-anon-volumes -d
Creating volume "204645172_static-content" with default driver
Creating testrail-mysql-204645172 ...
Creating testrail-mysql-204645172 ... done
Creating testrail-migration-204645172 ... done
Creating testrail-fpm-204645172 ... done
Creating testrail-web-204645172 ... done
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c6b76f9135ed registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofâĻ" 13 seconds ago Up 1 second 0.0.0.0:51148->80/tcp, 0.0.0.0:25426->443/tcp testrail-web-204645172
01d303262d8e registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiâĻ" 16 seconds ago Up 13 seconds 9000/tcp testrail-fpm-204645172
2cdab1edbf6a registry.gitlab.com/touchbit/image/testrail/migration:latest "docker-entrypoint.sâĻ" 16 seconds ago Up 13 seconds 3306/tcp, 33060/tcp testrail-migration-204645172
826aaf7c0a29 mysql:5.7.22 "docker-entrypoint.sâĻ" 18 seconds ago Up 16 seconds 3306/tcp testrail-mysql-204645172
6dbb3fae0322 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofâĻ" 36 seconds ago Up 22 seconds 0.0.0.0:44202->80/tcp, 0.0.0.0:20151->443/tcp testrail-web-204645084
3540f8d448ce registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiâĻ" 38 seconds ago Up 35 seconds 9000/tcp testrail-fpm-204645084
70fea72aa10d mysql:5.7.22 "docker-entrypoint.sâĻ" 40 seconds ago Up 37 seconds 3306/tcp testrail-mysql-204645084
d8aa24b2892d registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofâĻ" About a minute ago Up 53 seconds 0.0.0.0:31103->80/tcp, 0.0.0.0:43872->443/tcp testrail-web-204644881
6d4ccd910fad registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiâĻ" About a minute ago Up About a minute 9000/tcp testrail-fpm-204644881
685d8023a3ec mysql:5.7.22 "docker-entrypoint.sâĻ" About a minute ago Up About a minute 3306/tcp testrail-mysql-204644881
1cdfc692003a registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofâĻ" About a minute ago Up About a minute 0.0.0.0:44752->80/tcp, 0.0.0.0:23540->443/tcp testrail-web-204644793
6f26dfb2683e registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiâĻ" About a minute ago Up About a minute 9000/tcp testrail-fpm-204644793
029e16b26201 mysql:5.7.22 "docker-entrypoint.sâĻ" About a minute ago Up About a minute 3306/tcp testrail-mysql-204644793
c10443222ac6 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofâĻ" 5 hours ago Up 5 hours 0.0.0.0:57123->80/tcp, 0.0.0.0:31657->443/tcp testrail-web-204567103
04339229397e registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiâĻ" 5 hours ago Up 5 hours 9000/tcp testrail-fpm-204567103
6ae0accab28d mysql:5.7.22 "docker-entrypoint.sâĻ" 5 hours ago Up 5 hours 3306/tcp testrail-mysql-204567103
b66b60d79e43 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofâĻ" 5 hours ago Up 5 hours 0.0.0.0:56321->80/tcp, 0.0.0.0:58749->443/tcp testrail-web-204553690
033b1f46afa9 registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiâĻ" 5 hours ago Up 5 hours 9000/tcp testrail-fpm-204553690
a8879c5ef941 mysql:5.7.22 "docker-entrypoint.sâĻ" 5 hours ago Up 5 hours 3306/tcp testrail-mysql-204553690
069954ba6010 registry.gitlab.com/touchbit/image/testrail/web:latest "nginx -g 'daemon ofâĻ" 5 hours ago Up 5 hours 0.0.0.0:32869->80/tcp, 0.0.0.0:16066->443/tcp testrail-web-204553539
ed6b17d911a5 registry.gitlab.com/touchbit/image/testrail/fpm:latest "docker-php-entrypoiâĻ" 5 hours ago Up 5 hours 9000/tcp testrail-fpm-204553539
1a1eed057ea0 mysql:5.7.22 "docker-entrypoint.sâĻ" 5 hours ago Up 5 hours 3306/tcp testrail-mysql-204553539
āĻ¸āĻŦ āĻāĻžāĻ āĻ¸āĻĢāĻ˛āĻāĻžāĻŦā§ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧā§āĻā§
āĻāĻžāĻ¸ā§āĻ āĻāĻ°ā§āĻāĻŋāĻĢā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ˛āĻ āĻĨāĻžāĻā§
āĻ¸āĻŦāĻāĻŋāĻā§ āĻ¸ā§āĻ¨ā§āĻĻāĻ° āĻŦāĻ˛ā§ āĻŽāĻ¨ā§ āĻšāĻā§āĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻāĻŋ nuance āĻāĻā§āĨ¤ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ˛āĻžāĻāĻžāĻ˛ā§āĻ¨ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ āĻā§āĻ° āĻāĻ°ā§ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻāĻ¨āĻā§āĻāĻ¨āĻžāĻ° āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻŦāĻ¨ā§āĻ§ āĻāĻ°āĻž āĻšāĻŦā§ āĻ¨āĻžāĨ¤ āĻ¸āĻŽāĻ¯āĻŧā§ āĻ¸āĻŽāĻ¯āĻŧā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻ°āĻžāĻ¨āĻžāĻ° āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻĻā§āĻ°ā§āĻāĻžāĻā§āĻ¯āĻŦāĻļāĻ¤, āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦ āĻ¸āĻŋāĻ-āĻ¤ā§ āĻāĻ¨ā§āĻ¨āĻ¤āĻŋāĻ° āĻāĻžāĻāĻāĻŋ āĻāĻāĻ¨āĻ āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ¤ā§ āĻ°āĻ¯āĻŧā§āĻā§
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻāĻāĻāĻŋ āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§āĻā§ āĻ
āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻāĻāĻāĻŋ āĻāĻžāĻ¸ā§āĻ āĻ˛āĻā§āĻ āĻ¯ā§āĻ āĻāĻ°ā§āĻāĻŋ, āĻāĻŦāĻ āĻā§āĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻ¨āĻŋāĻˇā§āĻ§ āĻāĻ°ā§ āĻ¨āĻžāĨ¤
āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§ āĻ¯āĻžāĻ¨ -> CI/CD -> āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§āĻā§ āĻāĻŦāĻ āĻāĻžāĻāĻāĻŋ āĻāĻžāĻ˛āĻžāĻ¨ Clean runner
āĻŽā§āĻ:
- āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻāĻŋ āĻļā§āĻ˛ āĻ°āĻžāĻ¨āĻžāĻ° āĻāĻā§āĨ¤
- āĻāĻžāĻ āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻā§āĻ¨ āĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦ āĻ¨ā§āĻāĨ¤
- āĻāĻŽāĻ°āĻž āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻāĻžāĻŦā§ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻžāĻ˛āĻžāĻāĨ¤
- āĻāĻĒāĻ¨āĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§āĻ¯āĻŧāĻāĻžāĻŦā§ āĻŦāĻž āĻāĻāĻāĻŋ āĻĒāĻžāĻ¤ā§āĻ°ā§ āĻāĻ¨ā§āĻāĻŋāĻā§āĻ°ā§āĻļāĻ¨ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
- āĻĒāĻ°āĻŋāĻˇā§āĻŦāĻž āĻāĻŦāĻ āĻĒāĻ°ā§āĻā§āĻˇāĻžāĻ° āĻ˛āĻāĻā§āĻ˛āĻŋ āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ā§āĻ° āĻāĻžāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤
- āĻĒā§āĻ°āĻžāĻ¨ā§ āĻĄāĻāĻžāĻ° āĻāĻŽā§āĻ āĻĨā§āĻā§ āĻ°āĻžāĻ¨āĻžāĻ° āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦāĨ¤
āĻ¸ā§āĻāĻāĻĒ āĻ¸āĻŽāĻ¯āĻŧ ~2 āĻāĻ¨ā§āĻāĻžāĨ¤
āĻ¯ā§ āĻ¸āĻŦ, āĻāĻ¸āĻ˛ā§. āĻāĻŽāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ¯āĻŧā§ āĻā§āĻļāĻŋ āĻšāĻŦā§.
āĻāĻ¤ā§āĻ¸: www.habr.com