BuildBot āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻāĻ•ā§€āĻ•āĻ°āĻŖā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨

BuildBot āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻāĻ•ā§€āĻ•āĻ°āĻŖā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨
(āĻāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻšāĻŋāĻ¤ā§āĻ° āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻžāĻ°āĻžāĻ‡āĻœāĻžāĻ° āĻĨā§‡āĻ•ā§‡ Pixabay)

āĻ—ā§āĻ°āĻŋāĻŸāĻŋāĻ‚āĻ¸!

āĻ†āĻŽāĻžāĻ° āĻ¨āĻžāĻŽ āĻšāĻ˛ āĻāĻ­āĻœā§‡āĻ¨āĻŋ āĻšā§‡āĻ°āĻ•āĻŋāĻ¨, āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ‡āĻ¨āĻŋāĻ‚ āĻ•ā§‹āĻŽā§āĻĒāĻžāĻ¨āĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻĻāĻ˛ā§‡āĻ° āĻāĻ•āĻœāĻ¨ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻžāĻ° āĻĒāĻ˛āĻŋāĻŽā§‡āĻŸāĻžāĻ˛.

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

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

āĻ¸āĻ¨ā§āĻ¤ā§āĻˇā§āĻŸ

āĻ¸āĻ¨ā§āĻ¤ā§āĻˇā§āĻŸ

1. āĻ•ā§‡āĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ?
2. āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡āĻ° āĻ¨ā§‡āĻ¤ā§ƒāĻ¤ā§āĻŦā§‡ āĻ§āĻžāĻ°āĻŖāĻž
3. āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨
4. āĻĒā§āĻ°āĻĨāĻŽ āĻ§āĻžāĻĒ

5. āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨āĨ¤ āĻ§āĻžāĻĒā§‡ āĻ§āĻžāĻĒā§‡ āĻ°ā§‡āĻ¸āĻŋāĻĒāĻŋ

5.1 āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ•āĻ¨āĻĢāĻŋāĻ—
5.2 āĻļā§āĻ°āĻŽāĻŋāĻ•
5.3 āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨_āĻ‰ā§ŽāĻ¸
5.4 āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§‚āĻšā§€

5.5 āĻŦāĻŋāĻ˛ā§āĻĄ āĻĢā§āĻ¯āĻžāĻ•ā§āĻŸāĻ°āĻŋ
5.6 āĻœāĻ¨ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻ¤āĻž

6. āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

6.1 āĻ†āĻĒāĻ¨āĻžāĻ° master.cfg āĻāĻ° āĻĒāĻĨā§‡
6.2 svn āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž
6.3 āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻšāĻŋāĻ āĻŋ: āĻ¸āĻžāĻ‚āĻŦāĻžāĻĻāĻŋāĻ•āĻ°āĻž āĻ˜ā§‹āĻˇāĻŖāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻŋāĻ¤

āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻž āĻ•āĻ°ā§‡āĻ›āĻŋ! āĻ…āĻ­āĻŋāĻ¨āĻ¨ā§āĻĻāĻ¨

1. āĻ•ā§‡āĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ?

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

āĻĨāĻžāĻŽā§‹! āĻ•ā§‡āĻ‰ āĻ•āĻŋ āĻ†āĻ¸āĻ˛ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡ āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›ā§‡? āĻāĻŸāĻž āĻšā§āĻ¯āĻžāĻ āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ†āĻ‰āĻŸ āĻ…āĻ¨ā§‡āĻ• āĻ¤āĻžāĻĻā§‡āĻ° āĻ•āĻžāĻœā§‡ āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊиŅ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ āĻāĻŦāĻ‚ Google āĻ•ā§‹āĻĄ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖāĻžāĻ—āĻžāĻ°ā§‡āĨ¤

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

āĻ¯āĻžāĻĻā§‡āĻ° āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻĒāĻžāĻ‡āĻĨāĻ¨ā§‡ āĻ˛ā§‡āĻ–āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻļā§āĻ¨ āĻ‰āĻ ā§‡āĻ›ā§‡: "āĻ•ā§‡āĻ¨ āĻāĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨ā§āĻŸāĻŋāĻ—ā§āĻ°ā§‡āĻļāĻ¨ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻŦā§‡āĻ›ā§‡ āĻ¨āĻŋāĻšā§āĻ›ā§‡āĻ¨ āĻ¨āĻž āĻ¯ā§‡āĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡ āĻŦā§āĻ¯āĻŦāĻšā§ƒāĻ¤ āĻ­āĻžāĻˇāĻžāĻ° āĻĒāĻ°āĻŋāĻĒā§āĻ°ā§‡āĻ•ā§āĻˇāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĒāĻˇā§āĻŸ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸ āĻ†āĻ›ā§‡?" āĻāĻŦāĻ‚ āĻāĻ–āĻ¨ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ—ā§āĻ˛āĻŋ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ.

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

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

2. āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡āĻ° āĻ¨ā§‡āĻ¤ā§ƒāĻ¤ā§āĻŦā§‡ āĻ§āĻžāĻ°āĻŖāĻž

BuildBot āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•ā§āĻ°āĻŽāĻžāĻ—āĻ¤ āĻāĻ•ā§€āĻ•āĻ°āĻŖā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨

āĻŸāĻžāĻ¸ā§āĻ• āĻĄāĻŋāĻ¸ā§āĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻļāĻ¨ āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ° āĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ¯āĻŧ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°. āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ¯āĻž:

  • āĻŸā§āĻ°ā§āĻ¯āĻžāĻ• āĻ°āĻžāĻ–ā§‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ‰ā§ŽāĻ¸ āĻ—āĻžāĻ›ā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨
  • āĻĒāĻžāĻ āĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻ°ā§āĻŽā§€ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤ āĻāĻŽāĻ¨ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ
  • āĻ…āĻŦāĻšāĻŋāĻ¤ āĻ•āĻ°ā§‡ āĻ—ā§ƒāĻšā§€āĻ¤ āĻ•āĻ°ā§āĻŽā§‡āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ°

āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ master.cfg. āĻāĻ‡ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻ°ā§āĻŸā§‡ āĻ†āĻ›ā§‡ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°. āĻĒāĻ°ā§‡ āĻĻā§‡āĻ–āĻžāĻŦā§‹ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻ°ā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻšāĻ¯āĻŧāĨ¤ āĻĢāĻžāĻ‡āĻ˛ āĻ¨āĻŋāĻœā§‡āĻ‡ master.cfg āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻ•āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ.

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

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

āĻšā§‡āĻ•āĻ†āĻ‰āĻŸ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§‹āĻĄ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋāĻ¤ā§‡ āĻ˜āĻŸā§‡ āĻ•āĻ°ā§āĻŽā§€-āĻ‡

3. āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨

āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻŦāĻžāĻ° āĻšāĻ˛. āĻ†āĻŽāĻŋ āĻšā§‹āĻ¸ā§āĻŸ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ‰āĻŦā§āĻ¨ā§āĻŸā§ 18.04 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦāĨ¤ āĻ†āĻŽāĻŋ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻŦ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°- āĻāĻ•āĻŸāĻŋ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ•āĻ°ā§āĻŽā§€-āĻ• āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ python3.7 āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡:

sudo apt-get update
sudo apt-get install python3.7

āĻ¯āĻžāĻĻā§‡āĻ° 3.7.2 āĻāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡ python3.7.1 āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻ—ā§āĻ˛āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨:


sudo apt-get update
sudo apt-get software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get install python3.7
sudo ln -fs /usr/bin/python3.7 /usr/bin/python3
pip3 install --upgrade pip

āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒāĻŸāĻŋ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻŸā§āĻ‡āĻŸ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ и āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ, āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ-āĻ•


/*ВŅĐĩ Ņ‡Ņ‚Đž ĐŋОд sudo ĐąŅƒĐ´ĐĩŅ‚ ŅƒŅŅ‚Đ°ĐŊОвĐģĐĩĐŊĐŊĐž Đ´ĐģŅ вŅĐĩŅ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš в диŅ€ĐĩĐēŅ‚ĐžŅ€Đ¸ŅŽ /usr/local/lib/python3.7/dist-packages*/

#На Ņ…ĐžŅŅ‚Đĩ ĐēĐžŅ‚ĐžŅ€Ņ‹Đš ĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐžĐ´Đ¸Ņ‚ ĐŧĐžĐŊиŅ‚ĐžŅ€Đ¸ĐŊĐŗ Worker-Ов 
sudo pip install twisted #БибĐģиОŅ‚ĐĩĐēĐ° twisted
sudo pip install buildbot #BuildMaster
#ДоĐŋĐžĐģĐŊиŅ‚ĐĩĐģŅŒĐŊŅ‹Đš Ņ„ŅƒĐŊĐēŅ†Đ¸ĐžĐŊĐ°Đģ
pip install pysqlite3 #ĐŖŅŅ‚Đ°ĐŊавĐģиваĐĩĐŧ йаСŅƒ sqllite в ŅƒŅ‡ĐĩĐąĐŊŅ‹Ņ… Ņ†ĐĩĐģŅŅ…
pip install jinja2 #framework ĐŊĐ°ĐŋОдОйиĐĩ django, Đ´ĐģŅ web и Đ´ĐģŅ ĐŋĐžŅ‡Ņ‚ОвŅ‹Ņ… Ņ€Đ°ŅŅŅ‹ĐģĐģĐžĐē
pip install autobahn #Web cĐžĐēĐĩŅ‚Ņ‹ Đ´ĐģŅ ŅĐ˛ŅĐˇĐ¸ BuildMaster->Worker
pip install sqlalchemy sqlalchemy-migrate #ДĐģŅ ĐžŅ‚ОйŅ€Đ°ĐļĐĩĐŊиŅ ŅŅ…ĐĩĐŧŅ‹ йаСŅ‹ Đ´Đ°ĐŊĐŊŅ‹Ņ…
#ДĐģŅ Web ĐžŅ‚ОйŅ€Đ°ĐļĐĩĐŊиŅ BuildBot-a
pip install buildbot-www buildbot-grid-view buildbot-console-view buildbot-waterfall-view
pip install python-dateutil #ОŅ‚ОйŅ€Đ°ĐļĐĩĐŊиĐĩ Đ´Đ°Ņ‚ в web
#На ŅŅ‚ĐžŅ€ĐžĐŊĐĩ Ņ…ĐžŅŅ‚Đ° ĐēĐžŅ‚ĐžŅ€Ņ‹Đš ĐŊĐĩĐŋĐžŅŅ€ĐĩĐ´ŅŅ‚вĐĩĐŊĐŊĐž ĐžŅŅƒŅ‰ĐĩŅŅ‚вĐģŅĐĩŅ‚ ŅĐąĐžŅ€ĐēŅƒ и Ņ‚ĐĩŅŅ‚иŅ€ĐžĐ˛Đ°ĐŊиĐĩ 
pip install buildbot-worker #Worker
#ДоĐŋĐžĐģĐŊиŅ‚ĐĩĐģŅŒĐŊŅ‹Đš Ņ„ŅƒĐŊĐēŅ†Đ¸ĐžĐŊĐ°Đģ
sudo pip install virtualenv #ВиŅ€Ņ‚ŅƒĐ°ĐģŅŒĐŊĐ°Ņ ŅŅ€ĐĩĐ´Đ° 

4. āĻĒā§āĻ°āĻĨāĻŽ āĻ§āĻžāĻĒ

āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°. āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡ āĻĨāĻžāĻ•āĻŦā§‡ /home/habr/master.

mkdir master
buildbot create-master master # ХОйŅŅ‚вĐĩĐŊĐŊĐž ŅĐ´ĐĩŅŅŒ и ŅĐžĐˇĐ´Đ°ĐĩĐŧ

āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻĒāĻ°ā§āĻŦ. āĻ†āĻ¸ā§āĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ āĻ•āĻ°ā§āĻŽā§€. āĻāĻŸāĻŋ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡ āĻĨāĻžāĻ•āĻŦā§‡ /home/habr/worker.

mkdir worker
buildbot-worker create-worker --umask=0o22 --keepalive=60 worker localhost:4000 yourWorkerName password

āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻ–āĻ¨ āĻĻā§ŒāĻĄāĻŧāĻžāĻ¨ āĻ•āĻ°ā§āĻŽā§€, āĻ¤āĻžāĻ°āĻĒāĻ° āĻĄāĻŋāĻĢāĻ˛ā§āĻŸāĻ°ā§‚āĻĒā§‡ āĻāĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻšāĻŦā§‡ /home/habr/worker āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ¨āĻžāĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°, āĻ¯āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻž āĻ†āĻ›ā§‡ master.cfg. āĻāĻŦāĻ‚ āĻĒā§āĻ°ā§‹āĻœā§‡āĻ•ā§āĻŸā§‡āĻ° āĻ¨āĻžāĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦā§‡ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āĻ°āĻž, āĻāĻŦāĻ‚ āĻ¤āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĨāĻžāĻ•āĻŦā§‡ āĻšā§‡āĻ•āĻ†āĻ‰āĻŸ. āĻœāĻ¨ā§āĻ¯ āĻ•āĻžāĻœ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻ•āĻ°ā§āĻŽā§€-āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻšāĻ¯āĻŧā§‡ āĻ¯āĻžāĻŦā§‡ /home/habr/yourProject/build.

"āĻ¸ā§‹āĻ¨āĻžāĻ° āĻšāĻžāĻŦāĻŋ
āĻāĻŦāĻ‚ āĻāĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻ•āĻŋ āĻœāĻ¨ā§āĻ¯ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§€ āĻ…āĻ¨ā§āĻšā§āĻ›ā§‡āĻĻ āĻ˛āĻŋāĻ–ā§‡āĻ›ā§‡āĻ¨: āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¯ā§‡ āĻŽāĻžāĻ˛āĻŋāĻ• āĻĨā§‡āĻ•ā§‡ āĻĻāĻžāĻŦāĻŋ āĻ•āĻ°āĻŦā§‡ āĻ•āĻ°ā§āĻŽā§€-āĻāĻŦāĻ‚ āĻāĻ‡ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ āĻĻā§‚āĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻ•āĻ°āĻž āĻšāĻŦā§‡ āĻ¨āĻž āĻ•āĻžāĻ°āĻŖ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻ¨ā§‡āĻ‡āĨ¤ āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ•ā§€ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡ --āĻ‰āĻŽāĻžāĻ¸ā§āĻ•=0o22, āĻ¯āĻž āĻāĻ‡ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ¤ā§‡ āĻ˛ā§‡āĻ–āĻž āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§ āĻ•āĻ°ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ˛āĻžā§āĻšā§‡āĻ° āĻ…āĻ§āĻŋāĻ•āĻžāĻ° āĻŦāĻœāĻžāĻ¯āĻŧ āĻ°āĻžāĻ–āĻŦā§‡āĨ¤ āĻāĻŦāĻ‚ āĻ¯ā§‡ āĻ¸āĻŦ āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨.

āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° и āĻ•āĻ°ā§āĻŽā§€ āĻāĻ•ā§‡ āĻ…āĻĒāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĨ¤ āĻāĻŸāĻž āĻšāĻ¯āĻŧ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻŦāĻ¨ā§āĻ§ āĻŦāĻŋāĻ°āĻ¤āĻŋ āĻāĻŦāĻ‚ āĻ•āĻ°ā§āĻŽā§€ āĻĨā§‡āĻ•ā§‡ āĻ‰āĻ¤ā§āĻ¤āĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻŋāĻ›ā§ āĻ¸āĻŽāĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ›āĻŋ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°-āĻ•. āĻ¯āĻĻāĻŋ āĻ•ā§‹āĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ¨āĻž āĻĨāĻžāĻ•ā§‡, āĻ¸āĻ‚āĻ¯ā§‹āĻ—āĻŸāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻšāĻžāĻŦāĻŋ --keepalive=60 āĻļā§āĻ§ā§ āĻāĻ° āĻĒāĻ°ā§‡ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ°āĻŋāĻŦā§āĻŸ

5. āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨āĨ¤ āĻ§āĻžāĻĒā§‡ āĻ§āĻžāĻĒā§‡ āĻ°ā§‡āĻ¸āĻŋāĻĒāĻŋ

āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻŽā§‡āĻļāĻŋāĻ¨ā§‡āĻ° āĻĒāĻžāĻļā§‡ āĻŦāĻžāĻšāĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¸ā§ƒāĻˇā§āĻŸāĻŋāĻ•āĻ°ā§āĻ¤āĻž. āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ /home/habr/master. āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ master.cfg āĻāĻ–āĻ¨āĻ“ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ¨ā§‡āĻ‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻĢāĻžāĻ‡āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›ā§‡ master.cmg.sample. āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻŸāĻŋāĻ° āĻ¨āĻžāĻŽ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ master.cfg.āĻ¨āĻŽā§āĻ¨āĻž в master.cfg

mv master.cfg.sample master.cfg

āĻāĻ° āĻāĻ‡ āĻāĻ• āĻ–ā§āĻ˛ā§āĻ¨ master.cfg. āĻāĻŦāĻ‚ āĻāĻ° āĻāĻŸāĻŋ āĻ—āĻ āĻŋāĻ¤ āĻ•āĻŋ āĻ¤āĻžāĻ•āĻžāĻ¨. āĻāĻŦāĻ‚ āĻāĻ° āĻĒāĻ°ā§‡, āĻ†āĻ¸ā§āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŋāĨ¤

master.cfg

c['change_source'] = []
c['change_source'].append(changes.GitPoller(
    'git://github.com/buildbot/hello-world.git',
         workdir='gitpoller-workdir', branch='master',
         pollInterval=300))
                        
c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
        name="all",
        change_filter=util.ChangeFilter(branch='master'),
        treeStableTimer=None,
        builderNames=["runtests"]))
c['schedulers'].append(schedulers.ForceScheduler(
        name="force",
        builderNames=["runtests"]))
                        
factory = util.BuildFactory()
                        
factory.addStep(steps.Git(repourl='git://github.com/buildbot/hello-world.git', mode='incremental'))
factory.addStep(steps.ShellCommand(command=["trial", "hello"],
                                   env={"PYTHONPATH": "."}))
                        
c['builders'] = []
c['builders'].append(
    util.BuilderConfig(name="runtests",
    workernames=["example-worker"],
    factory=factory))
                         
c['services'] = []
                        
c['title'] = "Hello World CI"
c['titleURL'] = "https://buildbot.github.io/hello-world/"
                        
                        
c['buildbotURL'] = "http://localhost:8010/"
                        
c['www'] = dict(port=8010,
                plugins=dict(waterfall_view={}, console_view={}, grid_view={}))
                        
c['db'] = {
    'db_url' : "sqlite:///state.sqlite",
}

5.1 āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ•āĻ¨āĻĢāĻŋāĻ—

c = BuildmasterConfig = {} 

Buildmaster Config — āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻŽā§ŒāĻ˛āĻŋāĻ• āĻ…āĻ­āĻŋāĻ§āĻžāĻ¨āĨ¤ āĻāĻŸāĻŋ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻ†āĻŦāĻļā§āĻ¯āĻ•āĨ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ¸āĻšāĻœāĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻ•ā§‹āĻĄā§‡ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻ¨āĻžāĻŽ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ "āĻ—". āĻ¨āĻžāĻŽ āĻšāĻžāĻŦāĻŋ в c["keyFromDist"] āĻ¸āĻ™ā§āĻ—ā§‡ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°. āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ•ā§€āĻ° āĻœāĻ¨ā§āĻ¯, āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻŦāĻ¸ā§āĻ¤ā§āĻŸāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

5.2 āĻļā§āĻ°āĻŽāĻŋāĻ•

c['workers'] = [worker.Worker("example-worker", "pass")]

āĻāĻ‡āĻŦāĻžāĻ° āĻ†āĻŽāĻ°āĻž āĻ‡āĻ™ā§āĻ—āĻŋāĻ¤ āĻ•āĻ°āĻŋ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°-y āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ•āĻ°ā§āĻŽā§€-s āĻ†āĻŽāĻŋ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻ•āĻ°ā§āĻŽā§€ āĻ†āĻŽāĻ°āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻŠāĻ°ā§āĻ§ā§āĻŦāĻ¤āĻ¨, āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡ āĻ†āĻĒāĻ¨āĻŋ-āĻ•āĻ°ā§āĻŽā§€-āĻ¨āĻžāĻŽ и āĻĒāĻžāĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ. āĻāĻ–āĻ¨ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ-āĻ•āĻ°ā§āĻŽā§€ и āĻĒāĻžāĻ¸ .

5.3 āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨_āĻ‰ā§ŽāĻ¸

c['change_source'] = []
c['change_source'].append(changes.GitPoller(
                            'git://github.com/buildbot/hello-world.git',
                             workdir='gitpoller-workdir', branch='master',
                             pollInterval=300))                

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

āĻĒā§āĻ°āĻĨāĻŽ āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻšāĻ˛ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡āĻ° āĻĒāĻĨāĨ¤

workdir āĻĒāĻžāĻļā§‡āĻ° āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡āĻ° āĻĒāĻžāĻĨ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻ•āĻ°ā§‡ āĻ•āĻ°ā§āĻŽā§€-āĻĒāĻĨā§‡āĻ° āĻ†āĻĒā§‡āĻ•ā§āĻˇāĻŋāĻ• /home/habr/worker/yourProject/build git āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡āĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻŦā§‡āĨ¤

āĻļāĻžāĻ–āĻž āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻļāĻžāĻ–āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤āĨ¤

pollInterval āĻāĻ° āĻĒāĻ°ā§‡ āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĒā§‹āĻ˛ āĻ•āĻ°āĻž āĻšāĻŦā§‡.

āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻ†āĻ›ā§‡.

āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ¸āĻšāĻœ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻšāĻ˛ āĻ­ā§‹āĻŸāĻĻāĻžāĻ¨, āĻ¯āĻž āĻŦā§‹āĻāĻžāĻ¯āĻŧ āĻ¯ā§‡ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧāĻ•ā§āĻ°āĻŽā§‡ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻĒā§‹āĻ˛ āĻ•āĻ°ā§‡āĨ¤ āĻ¯āĻĻāĻŋ āĻ¸āĻŽāĻ°ā§āĻĒāĻŖ āĻ•āĻ°āĻž āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋāĻ¤ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻĢāĻ˛āĻŋāĻ¤ āĻ•āĻ°ā§‡, āĻ¤āĻžāĻ°āĻĒāĻ° āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ•āĻŋāĻ›ā§ āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻŦāĻ¸ā§āĻ¤ā§ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻŦāĻ‚ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ°ā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĒāĻžāĻ āĻžāĻ¨ āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖāĻ•āĻžāĻ°ā§€, āĻ¯āĻž āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻāĻŦāĻ‚ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒāĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻŦā§‡ā§ˇ āĻ•āĻ°ā§āĻŽā§€-āĻ‡ āĻāĻ‡ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻŋāĻ¤ āĻšāĻŦā§‡ āĻ†āĻĒāĻĄā§‡āĻŸā§‡āĻ° āĻ­āĻžāĻ¨ā§āĻĄāĻžāĻ° āĻ āĻŋāĻ• āĻšāĻžāĻ˛ā§ āĻ†āĻ›ā§‡ āĻ•āĻ°ā§āĻŽā§€āĻāĻŸāĻŋ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ…āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦā§‡āĨ¤ āĻāĻ‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ° āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻĻā§āĻŸāĻŋ āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻ¨āĻŋāĻšā§‡ āĻ•āĻ­āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ (5.4 и 5.5).

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

5.4 āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§‚āĻšā§€


c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
        name="all",
        change_filter=util.ChangeFilter(branch='master'),
        treeStableTimer=None,
        builderNames=["runtests"]))
c['schedulers'].append(schedulers.ForceScheduler(
        name="force",
        builderNames=["runtests"]))

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

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

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

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

āĻĒāĻŋāĻāĻ¸ āĻ¨āĻ‚ 3āĨ¤ āĻšāĻ¯āĻŧāĻ¤ā§‹ āĻ•āĻžāĻœā§‡ āĻ†āĻ¸āĻŦā§‡
āĻĒāĻ°ā§āĻ¯āĻžāĻŦā§ƒāĻ¤ā§āĻ¤ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§‚āĻšā§€ āĻ¯āĻž āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ¸āĻŽāĻ¯āĻŧ-āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĢā§āĻ°āĻŋāĻ•ā§‹āĻ¯āĻŧā§‡āĻ¨ā§āĻ¸āĻŋāĻ¤ā§‡ āĻšāĻ˛ā§‡āĨ¤ āĻ•āĻ˛ āĻāĻ‡ āĻŽāĻ¤ āĻ•āĻŋāĻ›ā§ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ


from buildbot.plugins import schedulers
nightly = schedulers.Periodic(name="daily",
                              builderNames=["full-solaris"],
                              periodicBuildTimer=24*60*60)
c['schedulers'] = [nightly]                    

5.5 āĻŦāĻŋāĻ˛ā§āĻĄ āĻĢā§āĻ¯āĻžāĻ•ā§āĻŸāĻ°āĻŋ


factory = util.BuildFactory()
                        
factory.addStep(steps.Git(repourl='git://github.com/buildbot/hello-world.git', mode='incremental'))
factory.addStep(steps.ShellCommand(command=["trial", "hello"],
                                   env={"PYTHONPATH": "."}))

āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧāĻ•ā§āĻ°āĻŽāĻŋāĻ• āĻŦāĻŋāĻ˛ā§āĻĄ āĻŸāĻžāĻ‡āĻŽāĻžāĻ° āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ āĻāĻ‡ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧāĻ•ā§āĻ°āĻŽā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡āĨ¤

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

āĻāĻ‡ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡ āĻĒā§āĻ°āĻĨāĻŽ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ§āĻžāĻĒ āĻšāĻ˛ git āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° -d -f -f -xāĻ¤āĻžāĻ°āĻĒāĻ°, āĻ—āĻŋāĻŸ āĻšā§‡āĻ•āĻ†āĻ‰āĻŸ. āĻāĻ‡ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋāĻ¤ā§‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ, āĻ¯āĻž āĻ¸ā§āĻĒāĻˇā§āĻŸāĻ­āĻžāĻŦā§‡ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧāĻ¨āĻŋ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻŽāĻžāĻ¨ āĻŦā§‹āĻāĻžāĻ¯āĻŧ āĻ¤āĻžāĻœāĻž. āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻŽā§‹āĻĄ = 'āĻ•ā§āĻ°āĻŽāĻŦāĻ°ā§āĻ§āĻŽāĻžāĻ¨' āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°ā§‡ āĻ¯ā§‡ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻĨā§‡āĻ•ā§‡ āĻāĻ¸ā§‡āĻ›ā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻšā§‡āĻšāĻ†āĻ‰āĻŸ, āĻ­āĻžāĻ¨ā§āĻĄāĻžāĻ° āĻĨā§‡āĻ•ā§‡ āĻ…āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤, āĻ…āĻ¸ā§āĻĒā§ƒāĻļā§āĻ¯ āĻĨāĻžāĻ•āĻž.

āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ§āĻžāĻĒ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻ¸āĻš āĻšā§āĻ¯āĻžāĻ˛ā§‹ āĻĒāĻžāĻļā§‡ āĻ•āĻ°ā§āĻŽā§€- āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻĨā§‡āĻ•ā§‡ /home/habr/worker/yourProject/build āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§€āĻ˛ PATHONPATH=... āĻāĻ‡āĻ­āĻžāĻŦā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻœā§‡āĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĒāĻžāĻļā§‡ āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ•āĻ°ā§āĻŽā§€- āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒ util.ShellCommand. āĻāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ āĻšā§‡āĻšāĻ†āĻ‰āĻŸ- āĻ¤āĻžāĻ°āĻž āĻĒāĻĄāĻŧā§‡ āĻ¯āĻžāĻŦā§‡ /home/habr/worker/yourProject/build. āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ¤āĻžāĻ°āĻĒāĻ° āĻĻā§āĻŸāĻŋ "āĻ•āĻŋāĻ¨ā§āĻ¤ā§" āĻ†āĻ›ā§‡:

  1. āĻ•āĻ°ā§āĻŽā§€ āĻāĻ•āĻŸāĻŋ āĻ•ā§€ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ --āĻ‰āĻŽāĻžāĻ¸ā§āĻ• āĻ¯āĻžāĻ¤ā§‡ āĻāĻŸāĻŋ āĻĒāĻ°ā§‡ āĻŽā§ƒāĻ¤ā§āĻ¯ā§āĻĻāĻ¨ā§āĻĄ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻžāĻ° āĻ…āĻ§āĻŋāĻ•āĻžāĻ° āĻ…āĻŦāĻ°ā§āĻĻā§āĻ§ āĻ¨āĻž āĻ•āĻ°ā§‡ āĻšā§‡āĻ•āĻ†āĻ‰āĻŸ-āĻ•
  2. āĻ āĻ—āĻŋāĻŸ āĻ§āĻžāĻ•ā§āĻ•āĻž-āĻ‡ āĻāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¯ā§‹āĻ—ā§āĻ¯āĻ¯āĻžāĻ¤ā§‡ āĻĒāĻ°ā§‡ āĻšā§‡āĻšāĻ†āĻ‰āĻŸ-e āĻ—āĻŋāĻŸ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ…āĻ§āĻŋāĻ•āĻžāĻ° āĻšāĻžāĻ°āĻžāĻ¯āĻŧāĻ¨āĻŋāĨ¤

5.6 āĻœāĻ¨ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻ¤āĻž


c['builders'] = []
c['builders'].append(util.BuilderConfig(name="runtests",
                                        workernames=["example-worker"],
                                        factory=factory))

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


c['builders'] = []
c['builders'].append(util.BuilderConfig(name="yourProject",
                                            workernames=["yourWorkerName"],
                                            factory=factory))

āĻāĻ–āĻ¨ āĻ†āĻŽāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻŦāĻ˛āĻŦ āĻŦāĻŋāĻ˛ā§āĻĄāĻžāĻ° āĻ•āĻ¨āĻĢāĻŋāĻ—.

āĻ¨āĻžāĻŽ āĻ¨āĻžāĻŽ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻ¤āĻž-āĻ• āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¨āĻžāĻŽ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ... āĻāĻ‡ āĻ¯ā§‡ āĻŽāĻžāĻ¨ā§‡ āĻ•āĻ°ā§āĻŽā§€- āĻāĻ‡ āĻĒāĻĨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻŦā§‡ /home/habr/worker/yourProject/build. āĻļā§‡āĻĄā§āĻ˛āĻžāĻ° āĻ–ā§āĻāĻœāĻ›āĻŋ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻ¤āĻž āĻļā§āĻ§ā§ āĻāĻ‡ āĻ¨āĻžāĻŽā§‡āĨ¤

āĻ•āĻ°ā§āĻŽā§€āĻ° āĻ¨āĻžāĻŽ āĻļā§€āĻŸ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ•āĻ°ā§āĻŽā§€-s āĻ¯āĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ—['āĻļā§āĻ°āĻŽāĻŋāĻ•'].

āĻ•āĻžāĻ°āĻ–āĻžāĻ¨āĻž - āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āĻ°āĻž, āĻ¯āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻŸāĻŋ āĻ¯ā§āĻ•ā§āĻ¤ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻ¤āĻž. āĻ¤āĻŋāĻ¨āĻŋ āĻŦāĻ¸ā§āĻ¤ā§ āĻĒāĻžāĻ āĻžāĻŦā§‡āĻ¨ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āĻ°āĻž āĻ‰āĻĒāĻ° āĻ•āĻ°ā§āĻŽā§€ āĻāĻ‡ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āĻ°āĻž-āĻ•

6. āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

āĻāĻ–āĻžāĻ¨ā§‡ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ° āĻ¯āĻž āĻ†āĻŽāĻŋ āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦ āĻ•āĻ°āĻ›āĻŋ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ
.

āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ SVN. āĻ­āĻžāĻ¨ā§āĻĄāĻžāĻ°āĻŸāĻŋ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻāĻ• āĻ§āĻ°āĻŖā§‡āĻ° āĻŽā§‡āĻ˜ā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻšāĻŦā§‡āĨ¤ āĻāĻ‡ āĻŽā§‡āĻ˜ā§‡āĻ° āĻ āĻŋāĻ•āĻžāĻ¨āĻž svn.host/svn/yourProject/trunk. āĻŽā§‡āĻ˜ā§‡āĻ° āĻ¨āĻŋāĻšā§‡ SVN āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ¨āĻžāĻŽ āĻ†āĻ›ā§‡: āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€, passwd: āĻĒāĻžāĻ¸āĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻĄ. āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¯ā§‡ āĻ§āĻžāĻĒāĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻ•āĻ°ā§‡ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āĻ°āĻž-āĻāĻ“ āĻļāĻžāĻ–āĻžāĻ¯āĻŧ āĻĨāĻžāĻ•āĻŦā§‡ SVN, āĻāĻ•āĻŸāĻŋ āĻĒā§ƒāĻĨāĻ• āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡ buildbot/worker_linux. āĻāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ¸āĻŽā§āĻĒāĻ¤ā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻŸā§‡āĻŦāĻ˛.

āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° и āĻ•āĻ°ā§āĻŽā§€ āĻāĻ•āĻ‡ āĻšā§‹āĻ¸ā§āĻŸā§‡ āĻšāĻžāĻ˛āĻžāĻ¨ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ.āĻšā§‹āĻ¸ā§āĻŸ .āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡ āĻāĻ° āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡ /home/habr/master. āĻ•āĻ°ā§āĻŽā§€ āĻāĻŸāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻĒāĻĨā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻšāĻ¯āĻŧ /home/habr/worker. āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°-āĻ• āĻāĻŦāĻ‚ āĻ•āĻ°ā§āĻŽā§€-a āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ āĻĒā§‹āĻ°ā§āĻŸ 4000 āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻŦāĻžāĻšāĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ-āĻ, āĻ¯ā§‡ 'āĻĒāĻŋāĻŦāĻŋ' āĻĒā§āĻ°ā§‹āĻŸā§‹āĻ•āĻ˛

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

āĻ“āĻ¯āĻŧā§‡āĻŦ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ āĻ†āĻŽāĻ°āĻž āĻĒā§‹āĻ°ā§āĻŸ 80 āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻŦ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ.āĻšā§‹āĻ¸ā§āĻŸ. Apatch āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡āĨ¤ āĻ—ā§āĻ°āĻ¨ā§āĻĨāĻžāĻ—āĻžāĻ°ā§‡āĻ° āĻ…āĻ‚āĻļ āĻšāĻŋāĻ¸ā§‡āĻŦā§‡ āĻĒāĻžāĻ•āĻžāĻ¨ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ†āĻ›ā§‡, āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ āĻāĻŸāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡

āĻœāĻ¨ā§āĻ¯ āĻ…āĻ­ā§āĻ¯āĻ¨ā§āĻ¤āĻ°ā§€āĻŖ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦā§‹ āĻ¸ā§āĻ•ā§āĻ˛āĻžāĻ‡āĻŸ.

āĻŽā§‡āĻ˛ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻšā§‹āĻ¸ā§āĻŸ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ smtp.your.domain - āĻāĻŸāĻŋ āĻŽā§‡āĻ‡āĻ˛ ​​āĻĨā§‡āĻ•ā§‡ āĻšāĻŋāĻ āĻŋ āĻĒāĻžāĻ āĻžāĻ¨ā§‹āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ [āĻ‡āĻŽā§‡āĻ˛ āĻ¸ā§āĻ°āĻ•ā§āĻˇāĻŋāĻ¤] āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻ›āĻžāĻĄāĻŧāĻžāĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻšā§‹āĻ¸ā§āĻŸā§‡'SMTP ' āĻŽāĻŋāĻ¨āĻŋāĻŸ ā§§ā§Ļā§¨ā§Ģ āĻĒā§‹āĻ¸ā§āĻŸā§‡ āĻļā§āĻ¨āĻžāĻ¨āĻŋ āĻšāĻšā§āĻ›ā§‡āĨ¤

āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¯āĻŧ āĻœāĻĄāĻŧāĻŋāĻ¤ āĻĻā§āĻ‡ āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋ āĻ†āĻ›ā§‡: āĻ…ā§āĻ¯āĻžāĻĄāĻŽāĻŋāĻ¨ и āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€. āĻĒā§āĻ°āĻļāĻžāĻ¸āĻ• āĻĒā§āĻ°āĻļāĻžāĻ¸āĻ• āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ. āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋāĻļā§€āĻ˛ āĻŦā§āĻ¯āĻ•ā§āĻ¤āĻŋ āĻ¸āĻŽāĻ°ā§āĻĒāĻŖ āĻ•āĻ°āĻž-s

āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻŸā§‡āĻŦāĻ˛ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻĒāĻžāĻ‡āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛āĻžāĻ°. āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻĄāĻ•ā§āĻ¸āĻŋāĻœā§‡āĻ¨.

āĻāĻ‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻŋ āĻāĻŸāĻŋ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋ: master.cfg:

master.cfg


import os, re
from buildbot.plugins import steps, util, schedulers, worker, changes, reporters

c= BuildmasterConfig ={}

c['workers'] = [ worker.Worker('yourWorkerName', 'password') ]
c['protocols'] = {'pb': {'port': 4000}} 


svn_poller = changes.SVNPoller(repourl="https://svn.host/svn/yourProject/trunk",
                                svnuser="user",
                                svnpasswd="password",
                                pollinterval=60,
				split_file=util.svn.split_file_alwaystrunk
                                )

c['change_source'] =  svn_poller

hourlyscheduler = schedulers.SingleBranchScheduler(
                                name="your-project-schedulers",
				change_filter=util.ChangeFilter(branch=None),
                                builderNames=["yourProject"],
				properties = {'owner': 'admin'}
                                )

c['schedulers'] = [hourlyscheduler]

checkout = steps.SVN(repourl='https://svn.host/svn/yourProject/trunk',
                        mode='full',
                        method='fresh',
                        username="user",
                        password="password",
                        haltOnFailure=True)

	
projectHost_build = util.BuildFactory()  


cleanProject = steps.ShellCommand(name="Clean",
                 command=["buildbot/worker_linux/pyinstaller_project", "clean"]
                                )
buildProject = steps.ShellCommand(name="Build",
                 command=["buildbot/worker_linux/pyinstaller_project", "build"]
                                )
doxyProject = steps.ShellCommand(name="Update Docs",
                                command=["buildbot/worker_linux/gendoc", []]
                                )
testProject = steps.ShellCommand(name="Tests",
                                command=["python","tests/utest.py"],
                                env={'PYTHONPATH': '.'}
                                )

projectHost_build.addStep(checkout)
projectHost_build.addStep(cleanProject)
projectHost_build.addStep(buildProject)
projectHost_build.addStep(doxyProject)
projectHost_build.addStep(testProject)


c['builders'] = [
        util.BuilderConfig(name="yourProject", workername='yourWorkerName', factory=projectHost_build)
]


template_html=u'''
<h4>ĐĄŅ‚Đ°Ņ‚ŅƒŅ ĐŋĐžŅŅ‚Ņ€ĐžĐĩĐŊĐŊĐžĐŗĐž Ņ€ĐĩĐģиСа: {{ summary }}</h4>
<p>ИŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧŅ‹Đš ŅĐĩŅ€Đ˛Đ¸Ņ Đ´ĐģŅ ĐŋĐžŅŅ‚Ņ€Đ°ĐĩĐŊиŅ: {{ workername }}</p>
<p>ПŅ€ĐžĐĩĐēŅ‚: {{ projects }}</p>
<p>ДĐģŅ Ņ‚ĐžĐŗĐž Ņ‡Ņ‚Đž ĐąŅ‹ ĐŋĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ иĐŊŅ‚ĐĩŅ€Ņ„ĐĩĐšŅ ŅƒĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиŅ ĐŋŅ€ĐžĐšĐ´Đ¸Ņ‚Đĩ ĐŋĐž ŅŅŅ‹ĐģĐēĐĩ: {{ buildbot_url }}</p>
<p>ДĐģŅ Ņ‚ĐžĐŗĐž Ņ‡Ņ‚Đž ĐąŅ‹ ĐŋĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ Ņ€ĐĩСŅƒĐģŅŒŅ‚Đ°Ņ‚ ŅĐąĐžŅ€Đēи ĐŋŅ€ĐžĐšĐ´Đ¸Ņ‚Đĩ ĐŋĐž ŅŅŅ‹ĐģĐēĐĩ: {{ build_url }}</p>
<p>ИŅĐŋĐžĐģŅŒĐˇŅƒŅ WinSCP ĐŧĐžĐļĐŊĐž ĐŋОдĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒŅŅ Đē ŅĐĩŅ€Đ˛ĐĩŅ€Ņƒ c ip:xxx.xx.xxx.xx. ВойдŅ ĐŋОд habr/password, СайŅ€Đ°Ņ‚ŅŒ ŅĐžĐąŅ€Đ°ĐŊĐŊŅ‹Đš executable Ņ„Đ°ĐšĐģ Ņ диŅ€ĐĩĐēŅ‚ĐžŅ€Đ¸Đ¸ ~/worker/yourProject/build/dist.</p>
<p><b>ПоŅŅ‚Ņ€ĐžĐĩĐŊиĐĩ ĐąŅ‹ĐģĐž ĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐ´ĐĩĐŊĐž Ņ‡ĐĩŅ€ĐĩС Buildbot</b></p>
'''

sendMessageToAll = reporters.MailNotifier(fromaddr="[email protected]",
					sendToInterestedUsers=True,
					lookup="your.domain",
					relayhost="smtp.your.domain",
					smtpPort=1025,
					mode="warnings",
					extraRecipients=['[email protected]'],
              messageFormatter=reporters.MessageFormatter(
						template=template_html,
						template_type='html',
						wantProperties=True, 
                                                wantSteps=True)
					)
c['services'] = [sendMessageToAll]

c['title'] = "The process of bulding"
c['titleURL'] = "http://project.host:80/"

c['buildbotURL'] = "http://project.host"

c['www'] = dict(port=80,
                plugins=dict(waterfall_view={}, console_view={}, grid_view={}))


c['db'] = {
    'db_url' : "sqlite:///state.sqlite"
}

āĻĒā§āĻ°āĻĨāĻŽ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°-āĻ• āĻāĻŦāĻ‚ āĻ•āĻ°ā§āĻŽā§€-āĻ• āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻ‡ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻĒā§‡āĻ¸ā§āĻŸ āĻ•āĻ°ā§āĻ¨ master.cfg в /home/habr/master.

āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ§āĻžāĻĒ āĻšāĻ˛ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻž āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°āĻ—ā§āĻ˛āĻŋ


sudo buildbot start /home/habr/master

āĻ¤āĻžāĻ°āĻĒāĻ° āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻļā§āĻ°ā§ āĻ•āĻ°ā§āĻ¨ āĻ•āĻ°ā§āĻŽā§€-a


buildbot-worker start /home/habr/worker

āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤! āĻāĻ–āĻ¨ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻŦā§‡ āĻāĻŦāĻ‚ āĻŸā§āĻ°āĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻŦā§‡ āĻ¸āĻŽāĻ°ā§āĻĒāĻŖ āĻ•āĻ°āĻž-y āĻŽāĻ§ā§āĻ¯ā§‡ SVN, āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻāĻŦāĻ‚ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻ§āĻžāĻĒāĻ—ā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻžāĨ¤

āĻ¨āĻŋāĻšā§‡ āĻ†āĻŽāĻŋ āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ•āĻŋāĻ›ā§ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻŦ master.cfg.

6.1 āĻ†āĻĒāĻ¨āĻžāĻ° master.cfg āĻāĻ° āĻĒāĻĨā§‡


āĻ˛ā§‡āĻ–āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ†āĻŽāĻžāĻ° master.cfg āĻ…āĻ¨ā§‡āĻ• āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ•āĻ°āĻž āĻšāĻŦā§‡, āĻ¤āĻžāĻ‡ āĻ˛āĻ— āĻĢāĻžāĻ‡āĻ˛ āĻĒāĻĄāĻŧāĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡. āĻāĻŸāĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°-āĻ‡āĻ¸āĻŋ āĻĒāĻ°āĻŽ āĻĒāĻĨ /home/habr/master/twistd.log, āĻāĻŦāĻ‚ āĻĒāĻžāĻļā§‡ āĻ•āĻ°ā§āĻŽā§€-āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŽ āĻĒāĻĨ āĻ¸āĻš /home/habr/worker/twistd.log. āĻ†āĻĒāĻ¨āĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻŸāĻŋ āĻĒāĻĄāĻŧāĻž āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ āĻŋāĻ• āĻ•āĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻŸāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻŦāĻŋāĻ˛ā§āĻĄāĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ°-āĻ• āĻāĻŸāĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻāĻ–āĻžāĻ¨ā§‡:


sudo buildbot stop /home/habr/master
sudo buildbot upgrade-master /home/habr/master
sudo buildbot start /home/habr/master

6.2 svn āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻž


svn_poller = changes.SVNPoller(repourl="https://svn.host/svn/yourProject/trunk",
                               svnuser="user",
                               svnpasswd="password",
                               pollinterval=60,
                               split_file=util.svn.split_file_alwaystrunk
                        )

c['change_source'] =  svn_poller

hourlyscheduler = schedulers.SingleBranchScheduler(
                            name="your-project-schedulers",
                            change_filter=util.ChangeFilter(branch=None),
                            builderNames=["yourProject"],
                            properties = {'owner': 'admin'}
                        )

c['schedulers'] = [hourlyscheduler]

checkout = steps.SVN(repourl='https://svn.host/svn/yourProject/trunk',
                     mode='full',
                     method='fresh',
                     username="user",
                     password="password",
                     haltOnFailure=True)

āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ•āĻŸāĻžāĻ•ā§āĻˇāĻĒāĻžāĻ¤ āĻ•āĻ°āĻž āĻ¯āĻžāĻ• svn_poller. āĻāĻŸāĻŋ āĻāĻ–āĻ¨āĻ“ āĻāĻ•āĻ‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻĢā§‡āĻ¸, āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¤āĻŋ āĻŽāĻŋāĻ¨āĻŋāĻŸā§‡ āĻāĻ•āĻŦāĻžāĻ° āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡ āĻ­ā§‹āĻŸ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻāĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ svn_poller āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻļāĻžāĻ–āĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°ā§‡ āĻŸā§āĻ°āĻžāĻ™ā§āĻ•. āĻ°āĻšāĻ¸ā§āĻ¯āĻŽāĻ¯āĻŧ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° split_file=util.svn.split_file_alwaystruunk āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻ—ā§āĻ˛āĻŋ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡: āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ° āĻ•āĻžāĻ āĻžāĻŽā§‹āĻŸāĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ­āĻžāĻ™ā§āĻ—āĻž āĻ¯āĻžāĻ¯āĻŧ SVN āĻļāĻžāĻ–āĻžāĻ¯āĻŧ āĻ¤āĻŋāĻ¨āĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻ†āĻĒā§‡āĻ•ā§āĻˇāĻŋāĻ• āĻĒāĻĨāĻ“ āĻ…āĻĢāĻžāĻ° āĻ•āĻ°ā§‡āĻ¨āĨ¤ āĻ¤āĻžāĻ° āĻĒāĻžāĻ˛āĻž split_file_alwaystruk āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°ā§‡ āĻŦāĻ˛ā§‡ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋāĻ•ā§‡ āĻ¸āĻšāĻœ āĻ•āĻ°ā§‡ āĻŸā§āĻ°āĻžāĻ™ā§āĻ•.

В āĻ¸āĻŽāĻ¯āĻŧāĻ¸ā§‚āĻšā§€ āĻœā§āĻžāĻžāĻĒāĻŋāĻ¤ āĻĢāĻŋāĻ˛ā§āĻŸāĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°ā§āĻ¨āĻ¯āĻžāĻ°āĻž āĻĻā§‡āĻ–ā§‡ āĻ¨āĻž āĻāĻŦāĻ‚ āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻļāĻžāĻ–āĻž āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡ āĻŸā§āĻ°āĻžāĻ™ā§āĻ• āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻĻāĻ¤ā§āĻ¤ āĻ¸āĻŽāĻŋāĻ¤āĻŋ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ split_file_alwaystruk. āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ¸āĻžāĻĄāĻŧāĻž āĻŸā§āĻ°āĻžāĻ™ā§āĻ•, āĻ˛āĻžā§āĻš āĻ•āĻ°ā§‡ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻ¤āĻž āĻ¨āĻžāĻŽā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ.

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

āĻ§āĻžāĻĒ āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻ•āĻ°āĻž-a āĻšā§‡āĻ•āĻ†āĻ‰āĻŸ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ā§‡āĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻ•ā§‹āĻ¨ā§‹ āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖāĻ°ā§‚āĻĒā§‡ āĻŽā§āĻ›ā§‡ āĻĢā§‡āĻ˛āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§āĻŽā§€-āĻ•. āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻ°ā§āĻ¨ svn āĻ†āĻĒāĻĄā§‡āĻŸ. āĻŽā§‹āĻĄāĻŸāĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ°ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻŽā§‹āĻĄ = āĻĒā§‚āĻ°ā§āĻŖ, āĻĒāĻĻā§āĻ§āĻ¤āĻŋ=āĻ¤āĻžāĻœāĻž. āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻŸāĻžāĻ° haltOnTailure āĻŦāĻ˛ā§‡āĻ¨ āĻ¯ā§‡ āĻ¯āĻĻāĻŋ svn āĻ†āĻĒāĻĄā§‡āĻŸ āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽā§ƒāĻ¤ā§āĻ¯ā§āĻĻāĻ¨ā§āĻĄ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻšāĻŦā§‡, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻŽāĻžāĻŖ āĻāĻŦāĻ‚ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻĒā§āĻ°ā§‹ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻŸāĻŋ āĻ¸ā§āĻĨāĻ—āĻŋāĻ¤ āĻ•āĻ°āĻž āĻ‰āĻšāĻŋāĻ¤, āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒāĻ—ā§āĻ˛āĻŋ āĻ…āĻ°ā§āĻĨāĻšā§€āĻ¨āĨ¤

6.3 āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻšāĻŋāĻ āĻŋ: āĻ¸āĻžāĻ‚āĻŦāĻžāĻĻāĻŋāĻ•āĻ°āĻž āĻ˜ā§‹āĻˇāĻŖāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻŋāĻ¤


āĻ¸āĻžāĻ‚āĻŦāĻžāĻĻāĻŋāĻ•āĻĻā§‡āĻ° āĻ‡āĻŽā§‡āĻ˛ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻŦāĻŋāĻœā§āĻžāĻĒā§āĻ¤āĻŋ āĻĒāĻžāĻ āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĨ¤


template_html=u'''
<h4>ĐĄŅ‚Đ°Ņ‚ŅƒŅ ĐŋĐžŅŅ‚Ņ€ĐžĐĩĐŊĐŊĐžĐŗĐž Ņ€ĐĩĐģиСа: {{ summary }}</h4>
<p>ИŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧŅ‹Đš ŅĐĩŅ€Đ˛Đ¸Ņ Đ´ĐģŅ ĐŋĐžŅŅ‚Ņ€Đ°ĐĩĐŊиŅ: {{ workername }}</p>
<p>ПŅ€ĐžĐĩĐēŅ‚: {{ projects }}</p>
<p>ДĐģŅ Ņ‚ĐžĐŗĐž Ņ‡Ņ‚Đž ĐąŅ‹ ĐŋĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ иĐŊŅ‚ĐĩŅ€Ņ„ĐĩĐšŅ ŅƒĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиŅ ĐŋŅ€ĐžĐšĐ´Đ¸Ņ‚Đĩ ĐŋĐž ŅŅŅ‹ĐģĐēĐĩ: {{ buildbot_url }}</p>
<p>ДĐģŅ Ņ‚ĐžĐŗĐž Ņ‡Ņ‚Đž ĐąŅ‹ ĐŋĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ Ņ€ĐĩСŅƒĐģŅŒŅ‚Đ°Ņ‚ ŅĐąĐžŅ€Đēи ĐŋŅ€ĐžĐšĐ´Đ¸Ņ‚Đĩ ĐŋĐž ŅŅŅ‹ĐģĐēĐĩ: {{ build_url }}</p>
<p>ИŅĐŋĐžĐģŅŒĐˇŅƒŅ WinSCP ĐŧĐžĐļĐŊĐž ĐŋОдĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒŅŅ Đē ŅĐĩŅ€Đ˛ĐĩŅ€Ņƒ c ip:xxx.xx.xxx.xx. ВойдŅ ĐŋОд habr/password, СайŅ€Đ°Ņ‚ŅŒ ŅĐžĐąŅ€Đ°ĐŊĐŊŅ‹Đš executable Ņ„Đ°ĐšĐģ Ņ диŅ€ĐĩĐēŅ‚ĐžŅ€Đ¸Đ¸ ~/worker/yourProject/build/dist.</p>
<p><b>ПоŅŅ‚Ņ€ĐžĐĩĐŊиĐĩ ĐąŅ‹ĐģĐž ĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩĐ´ĐĩĐŊĐž Ņ‡ĐĩŅ€ĐĩС Buildbot</b></p>
'''
                        
sendMessageToAll = reporters.MailNotifier(fromaddr="[email protected]",
                                          sendToInterestedUsers=True,
                                          lookup="your.domain",
                                          relayhost="smtp.your.domain",
                                          smtpPort=1025,
                                          mode="warnings",
                                          extraRecipients=['[email protected]'],
                                    messageFormatter=reporters.MessageFormatter(
                                                    template=template_html,
                                                    template_type='html',
                                                    wantProperties=True, 
                                                    wantSteps=True)
                                        )
c['services'] = [sendMessageToAll]

āĻ¤āĻŋāĻ¨āĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻĒāĻĨ.

āĻŽā§‡āĻ‡āĻ˛ āĻ¨ā§‹āĻŸāĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ° āĻŦāĻŋāĻœā§āĻžāĻĒā§āĻ¤āĻŋ āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻ‡āĻŽā§‡āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤

template_html āĻ¨āĻŋāĻ‰āĻœāĻ˛ā§‡āĻŸāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡āĨ¤ āĻŽāĻžāĻ°ā§āĻ•āĻ†āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ HTML āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻŸāĻŋ āĻ‡āĻžā§āĻœāĻŋāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻœāĻŋāĻžā§āĻœāĻžā§¨ (āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻœā§āĻ¯āĻžāĻ™ā§āĻ—ā§‹). āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒāĻžāĻ ā§āĻ¯ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻšāĻ˛āĻžāĻ•āĻžāĻ˛ā§€āĻ¨ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ‡ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛āĻ—ā§āĻ˛āĻŋ {{ āĻĄāĻŦāĻ˛ āĻ•ā§‹āĻāĻ•āĻĄāĻŧāĻž āĻŦāĻ¨ā§āĻ§āĻ¨ā§€ }} āĻ āĻ†āĻŦāĻĻā§āĻ§āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ¸āĻ‚āĻ•ā§āĻˇāĻŋāĻĒā§āĻ¤ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°ā§‡, āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻ¸āĻžāĻĢāĻ˛ā§āĻ¯ āĻŦāĻž āĻŦā§āĻ¯āĻ°ā§āĻĨāĻ¤āĻžāĨ¤ āĻ• āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻšāĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ. āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻœāĻŋāĻžā§āĻœāĻžā§¨, āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻŦāĻŋāĻ˛ā§āĻĄāĻŦāĻŸ-a āĻāĻŦāĻ‚ āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚ āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻŸāĻŋāĻ‚ āĻŸā§āĻ˛, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻŦā§‡āĻļ āĻ¤āĻĨā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻŽā§‡āĻ‡āĻ˛ āĻ¨ā§‹āĻŸāĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ° āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡.

addr āĻĨā§‡āĻ•ā§‡ – āĻ¯ā§‡ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻĨā§‡āĻ•ā§‡ āĻ¸āĻŦāĻžāĻ‡ āĻ¨āĻŋāĻ‰āĻœāĻ˛ā§‡āĻŸāĻžāĻ° āĻĒāĻžāĻŦā§‡āĨ¤

āĻ†āĻ—ā§āĻ°āĻšā§€ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻĒāĻžāĻ āĻžāĻ¨=True āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻŽāĻžāĻ˛āĻŋāĻ• āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒāĻžāĻ āĻžāĻ¯āĻŧ āĻ¸āĻŽāĻ°ā§āĻĒāĻŖ āĻ•āĻ°āĻž.

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

āĻ°āĻŋāĻ˛ā§‡āĻšā§‹āĻ¸ā§āĻŸ āĻ¯ā§‡ āĻšā§‹āĻ¸ā§āĻŸāĻ¨ā§‡āĻŽāĻŸāĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ–ā§‹āĻ˛āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡ SMTP, āĻāĻ•āĻŸāĻŋ smptPort āĻļā§‹āĻ¨āĻžāĻ° āĻĒā§‹āĻ°ā§āĻŸ āĻ¨āĻŽā§āĻŦāĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡ SMTP āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°

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

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

āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻŸāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻ¯āĻž āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸, āĻāĻ° āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸ āĻāĻŦāĻ‚ āĻāĻ° āĻĨā§‡āĻ•ā§‡ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§‡ āĻœāĻŋāĻžā§āĻœāĻžā§¨. āĻ¯ā§‡āĻŽāĻ¨ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ wantProperties=āĻ¸āĻ¤ā§āĻ¯ и āĻšāĻžāĻ‡ āĻ¸ā§āĻŸā§‡āĻĒāĻ¸=āĻ¸āĻ¤ā§āĻ¯ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ā§‡āĻ° āĻāĻ‡ āĻ¸ā§‡āĻŸāĻŸāĻŋ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨āĨ¤

āĻ¸āĻ™ā§āĻ—ā§‡['services']=[sendMessageToAll] āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻšāĻŦā§‡ā§ˇ āĻ¸āĻ‚āĻŦāĻžāĻĻāĻĻāĻžāĻ¤āĻž.

āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻž āĻ•āĻ°ā§‡āĻ›āĻŋ! āĻ…āĻ­āĻŋāĻ¨āĻ¨ā§āĻĻāĻ¨

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

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

āĻ†āĻĒāĻ¨āĻžāĻ° āĻŽāĻ¨ā§‹āĻ¯ā§‹āĻ—ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ. āĻļā§āĻ­āĻ•āĻžāĻŽāĻ¨āĻžāĨ¤

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

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