แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ BuildBot-แƒ—แƒแƒœ

แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ BuildBot-แƒ—แƒแƒœ
(แƒกแƒฃแƒ แƒแƒ—แƒ˜ แƒ™แƒแƒ›แƒžแƒ˜แƒฃแƒขแƒ”แƒ แƒ˜แƒ–แƒแƒขแƒแƒ แƒ˜ แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ Pixabay)

Hi!

แƒฉแƒ”แƒ›แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ”แƒ•แƒ’แƒ”แƒœแƒ˜ แƒฉแƒ”แƒ แƒ™แƒ˜แƒœแƒ˜แƒ›แƒ” แƒ•แƒแƒ  แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒกแƒขแƒ˜ แƒ›แƒแƒ˜แƒœแƒ˜แƒœแƒ’แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒ˜แƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒ˜แƒก แƒ’แƒฃแƒœแƒ“แƒจแƒ˜ แƒžแƒแƒšแƒ˜แƒ›แƒ”แƒขแƒ”แƒšแƒ˜.

แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ“แƒ˜แƒ“แƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ˜แƒกแƒแƒก, แƒ—แƒฅแƒ•แƒ”แƒœ แƒ˜แƒฌแƒงแƒ”แƒ‘แƒ— แƒคแƒ˜แƒฅแƒ แƒก: โ€žแƒ แƒแƒ›แƒ”แƒšแƒ˜ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒšแƒ˜ แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒ แƒแƒ แƒ˜แƒก แƒกแƒแƒฃแƒ™แƒ”แƒ—แƒ”แƒกแƒ แƒ’แƒแƒ›แƒแƒกแƒแƒงแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒšแƒแƒ“? IT แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ’แƒแƒ“แƒ˜แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ”แƒขแƒแƒžแƒก แƒ›แƒแƒ›แƒ“แƒ”แƒ•แƒœแƒ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒแƒ›แƒ“แƒ”. แƒ™แƒแƒ แƒ’แƒ˜แƒ, แƒ แƒแƒชแƒ แƒแƒ› แƒ”แƒขแƒแƒžแƒ”แƒ‘แƒ˜แƒก แƒฏแƒแƒญแƒ•แƒ˜ แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ. แƒ—แƒแƒ•แƒแƒ“ IT แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒฎแƒแƒšแƒ˜ แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒแƒ•แƒขแƒแƒ›แƒแƒขแƒ˜แƒ–แƒ˜แƒ แƒ”แƒ‘แƒฃแƒš แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒ”.แƒฌ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ. BuildBot แƒฉแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒ™แƒแƒ แƒ’แƒ˜ แƒแƒกแƒ˜แƒกแƒขแƒ”แƒœแƒขแƒ˜ แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ แƒแƒ› แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒแƒจแƒ˜.

แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒจแƒ˜ แƒ’แƒแƒ“แƒแƒ•แƒฌแƒงแƒ•แƒ˜แƒขแƒ” แƒ›แƒ˜แƒ›แƒแƒ•แƒ˜แƒฎแƒ˜แƒšแƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ BuildBot. แƒ แƒ แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒแƒ› แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒฃแƒš แƒฃแƒ–แƒ แƒฃแƒœแƒ•แƒ”แƒšแƒงแƒแƒคแƒแƒก? แƒ แƒแƒ’แƒแƒ  แƒ›แƒ˜แƒ•แƒฃแƒ“แƒ’แƒ”แƒ— แƒ›แƒแƒก แƒ“แƒ แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒ•แƒแƒ›แƒงแƒแƒ แƒแƒ— แƒœแƒแƒ แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ”แƒคแƒ”แƒฅแƒขแƒฃแƒ แƒ˜ แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒแƒ‘แƒ แƒ›แƒแƒกแƒ—แƒแƒœ? แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ’แƒแƒ›แƒแƒชแƒ“แƒ˜แƒšแƒ”แƒ‘แƒ แƒ—แƒฅแƒ•แƒ”แƒœ แƒ—แƒ•แƒ˜แƒ—แƒแƒœ แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒ— แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒก แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒ›แƒแƒœแƒฅแƒแƒœแƒแƒ–แƒ” แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒกแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒ“แƒ แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“.

แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก

แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก

1. แƒ แƒแƒขแƒแƒ› BuildBot?
2. แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒแƒ‘แƒก BuildMaster
3. แƒ›แƒแƒœแƒขแƒแƒŸแƒ˜
4. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜

5. แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ. แƒ”แƒขแƒแƒžแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒ แƒ”แƒชแƒ”แƒžแƒขแƒ˜

5.1 BuildmasterConfig
5.2 แƒ›แƒฃแƒจแƒ”แƒ‘แƒ˜
5.3 change_source
5.4 แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ”แƒ‘แƒ˜

5.5 BuildFactory
5.6 แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜

6. แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜

6.1 แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ‘แƒแƒขแƒแƒœแƒ˜แƒกแƒ™แƒ”แƒœ แƒ›แƒ˜แƒ›แƒแƒ•แƒแƒš แƒ’แƒ–แƒแƒ–แƒ”.cfg
6.2 แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ svn
6.3 แƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœ: แƒ แƒ”แƒžแƒแƒ แƒขแƒ˜แƒแƒ แƒ”แƒ‘แƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒ แƒแƒฅแƒ•แƒ— แƒ’แƒแƒœแƒแƒชแƒฎแƒแƒ“แƒแƒœ

แฒฉแƒ•แƒ”แƒœ แƒ”แƒก แƒจแƒ”แƒ•แƒซแƒ”แƒšแƒ˜แƒ—! แƒ’แƒ˜แƒšแƒแƒชแƒแƒ•

1. แƒ แƒแƒขแƒแƒ› BuildBot?

แƒแƒ“แƒ แƒ” habr-e-แƒ–แƒ” แƒฌแƒแƒ•แƒแƒฌแƒงแƒ“แƒ˜ แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘ แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— BuildBot... แฒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒ”แƒก แƒ”แƒ แƒ—แƒ˜ แƒ›แƒ” แƒ”แƒก แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒแƒฆแƒ›แƒแƒฉแƒœแƒ“แƒ. แƒแƒ แƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒ”แƒ แƒ—แƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ - แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜. แƒ”แƒก แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒกแƒ”แƒ–แƒแƒœแƒฃแƒ แƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒแƒ“แƒแƒœแƒฎแƒแƒšแƒ แƒแƒ› แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ แƒแƒ“. แƒ™แƒฃแƒžแƒ” แƒ™แƒแƒ แƒ’แƒ˜ แƒกแƒแƒฌแƒงแƒ˜แƒกแƒ˜ แƒฌแƒ”แƒ แƒขแƒ˜แƒšแƒ˜แƒ. แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒแƒšแƒ‘แƒแƒ— แƒ›แƒแƒจแƒ˜แƒœแƒ•แƒ” แƒ›แƒแƒ’แƒ˜แƒœแƒ“แƒ”แƒ‘แƒแƒ— แƒ แƒแƒ›แƒ” BuildBot แƒ’แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒ

แƒ’แƒแƒฉแƒ”แƒ แƒ“แƒ˜! แƒ•แƒ˜แƒœแƒ›แƒ”แƒก แƒœแƒแƒ›แƒ“แƒ•แƒ˜แƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ แƒ˜แƒ’แƒ˜ แƒ—แƒแƒ•แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒจแƒ˜? แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก แƒ™แƒ˜ ะผะฝะพะณะธะต แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒก แƒ˜แƒ’แƒ˜ แƒ—แƒแƒ•แƒ˜แƒแƒœแƒ— แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒจแƒ˜. แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ˜แƒซแƒ”แƒ‘แƒœแƒแƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ BuildBot แƒ“แƒ Google แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒ•แƒ”แƒ‘แƒจแƒ˜.

แƒ›แƒแƒจ แƒ แƒ แƒšแƒแƒ’แƒ˜แƒ™แƒ แƒแƒฅแƒ•แƒก แƒฎแƒแƒšแƒฎแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก Buildbot? แƒงแƒแƒ•แƒ”แƒšแƒ˜แƒ•แƒ” แƒแƒ›แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒกแƒฎแƒ•แƒ แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜: แƒ™แƒ แƒฃแƒ˜แƒ–แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜ ะธ Jenkins. แƒ›แƒ” แƒแƒกแƒ” แƒ’แƒ˜แƒžแƒแƒกแƒฃแƒฎแƒ”แƒ‘. แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒฃแƒ›แƒ”แƒขแƒ”แƒกแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก Jenkins แƒ“แƒ แƒกแƒ˜แƒ›แƒแƒ แƒ—แƒšแƒ” แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ. แƒ—แƒแƒ•แƒ˜แƒก แƒ›แƒฎแƒ แƒ˜แƒ•, BuildBot - แƒฃแƒคแƒ แƒ แƒแƒ“แƒแƒžแƒขแƒ˜แƒ แƒ”แƒ‘แƒแƒ“แƒ˜, แƒ›แƒแƒจแƒ˜แƒœ แƒ แƒแƒชแƒ แƒžแƒ แƒแƒ‘แƒšแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ˜แƒฅ แƒฌแƒงแƒ“แƒ”แƒ‘แƒ แƒ˜แƒกแƒ”แƒ•แƒ” แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒแƒ“, แƒ แƒแƒ’แƒแƒ แƒช แƒแƒฅ Jenkins. แฒแƒ แƒฉแƒ”แƒ•แƒแƒœแƒ˜ แƒจแƒ”แƒœแƒ–แƒ”แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒ แƒแƒ“แƒ’แƒแƒœ แƒฉแƒ•แƒ”แƒœ แƒ•แƒ”แƒซแƒ”แƒ‘แƒ— แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒก แƒ’แƒแƒœแƒ•แƒ˜แƒ—แƒแƒ แƒ”แƒ‘แƒแƒ“แƒ˜ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒขแƒแƒ› แƒแƒ  แƒแƒ•แƒ˜แƒ แƒฉแƒ˜แƒแƒ— แƒ˜แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ›แƒ˜แƒกแƒชแƒ”แƒ›แƒก, แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒฃแƒšแƒ˜, แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒแƒ— แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒชแƒ˜แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒฅแƒ•แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒแƒฅแƒขแƒ˜แƒฃแƒšแƒแƒ‘แƒ แƒ“แƒ แƒฃแƒœแƒ˜แƒ™แƒแƒšแƒฃแƒ แƒ˜ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜.

แƒ›แƒแƒ—แƒ—แƒ•แƒ˜แƒก, แƒ•แƒ˜แƒกแƒ˜ แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒช แƒžแƒ˜แƒ—แƒแƒœแƒจแƒ˜แƒ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜, แƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒ™แƒ˜แƒ—แƒฎแƒ•แƒ: โ€žแƒ แƒแƒขแƒแƒ› แƒแƒ  แƒแƒ˜แƒ แƒฉแƒ˜แƒแƒ— แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒฅแƒ•แƒก แƒ›แƒ™แƒแƒคแƒ˜แƒ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜ แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ”แƒœแƒ˜แƒก แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ—?โ€œ แƒแƒฎแƒšแƒ แƒ™แƒ˜ แƒ“แƒ แƒแƒ แƒฌแƒแƒ แƒ›แƒแƒ’แƒ˜แƒ“แƒ’แƒ˜แƒœแƒแƒ— แƒกแƒแƒ แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜ BuildBot.

แƒแƒกแƒ” แƒ แƒแƒ›, แƒฉแƒ•แƒ”แƒœแƒ˜ "แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒฃแƒšแƒ˜ แƒ™แƒ•แƒแƒ แƒขแƒ”แƒขแƒ˜". แƒฉแƒ”แƒ›แƒ—แƒ•แƒ˜แƒก แƒ›แƒ” แƒ’แƒแƒ›แƒแƒ•แƒงแƒแƒ•แƒ˜ แƒแƒ—แƒฎแƒ˜ แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ BuildBot:

  1. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒฆแƒ˜แƒ แƒ™แƒแƒ“แƒ˜แƒก แƒฉแƒแƒ แƒฉแƒ GPL แƒšแƒ˜แƒชแƒ”แƒœแƒ–แƒ˜แƒ˜แƒ—
  2. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ, แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒ“แƒ แƒกแƒแƒญแƒ˜แƒ แƒ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ
  3. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒšแƒแƒ‘แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒ— แƒžแƒแƒกแƒฃแƒฎแƒ˜ แƒ˜แƒ› แƒ›แƒแƒœแƒฅแƒแƒœแƒ˜แƒ“แƒแƒœ, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช แƒฎแƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒ™แƒ แƒ”แƒ‘แƒ
  4. แƒ”แƒก แƒแƒ แƒ˜แƒก, แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“, แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒ แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒžแƒ˜แƒ—แƒแƒœแƒก แƒ“แƒ แƒ’แƒ แƒ”แƒฎแƒ˜แƒšแƒก แƒ“แƒ แƒแƒ  แƒกแƒแƒญแƒ˜แƒ แƒแƒ”แƒ‘แƒก แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ  แƒ›แƒแƒœแƒฅแƒแƒœแƒแƒก แƒ“แƒ แƒฏแƒแƒ•แƒแƒก แƒ›แƒแƒœแƒฅแƒแƒœแƒแƒก.

2. แƒ™แƒแƒœแƒชแƒ”แƒคแƒชแƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒแƒ‘แƒก BuildMaster

แƒฃแƒฌแƒงแƒ•แƒ”แƒขแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ’แƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ BuildBot-แƒ—แƒแƒœ

แƒแƒ›แƒแƒชแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒแƒฌแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒแƒจแƒ˜ แƒชแƒ”แƒœแƒขแƒ แƒแƒšแƒฃแƒ แƒ˜แƒ BuildMaster. แƒ”แƒก แƒแƒ แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช:

  • แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒก แƒแƒ“แƒ”แƒ•แƒœแƒ”แƒ‘แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒฎแƒ”แƒจแƒ˜
  • แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒก Worker แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒกแƒแƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ“ แƒ“แƒ แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“
  • แƒแƒชแƒœแƒแƒ‘แƒ”แƒ‘แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘

BuildMaster แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ˜แƒ— master.cfg. แƒ”แƒก แƒคแƒแƒ˜แƒšแƒ˜ แƒแƒ แƒ˜แƒก root-แƒจแƒ˜ BuildMaster. แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ’แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ— แƒ แƒแƒ’แƒแƒ  แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒ”แƒก แƒคแƒ”แƒกแƒ•แƒ˜. แƒ—แƒแƒ•แƒแƒ“ แƒคแƒแƒ˜แƒšแƒ˜ master.cfg แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ–แƒแƒ แƒ”แƒ‘แƒก BuildBot.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ BuildBot แƒ›แƒแƒก แƒแƒฅแƒ•แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ›แƒฃแƒจแƒ. แƒแƒ› แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒกแƒฎแƒ•แƒ แƒฐแƒแƒกแƒขแƒ–แƒ”, แƒกแƒฎแƒ•แƒ OS-แƒ˜แƒ—, แƒแƒœ แƒจแƒ”แƒกแƒแƒซแƒšแƒแƒ แƒ˜แƒกแƒ”แƒ—แƒ–แƒ”, แƒกแƒแƒ“แƒแƒช BuildMaster. แƒ˜แƒก แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒ“แƒ”แƒก แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ แƒแƒ“ แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ”แƒ‘แƒฃแƒš แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ  แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜แƒ—แƒ แƒ“แƒ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒ—. แƒ”แƒก แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜ แƒ’แƒแƒ แƒ”แƒ›แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ›แƒแƒ›แƒ–แƒแƒ“แƒ“แƒ”แƒก แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒฃแƒขแƒ˜แƒšแƒ˜แƒขแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ แƒ•แƒ˜แƒ แƒขแƒฃแƒแƒšแƒฃแƒ แƒ˜, แƒ•แƒ”แƒœแƒ•.

BuildMaster แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒ›แƒก แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒก แƒงแƒ•แƒ”แƒšแƒแƒก แƒ›แƒฃแƒจแƒ-y แƒ“แƒ แƒ˜แƒก, แƒ—แƒแƒ•แƒ˜แƒก แƒ›แƒฎแƒ แƒ˜แƒ•, แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒก แƒ›แƒแƒ—. แƒแƒœแƒฃ, แƒ’แƒแƒ›แƒแƒ“แƒ˜แƒก, แƒ แƒแƒ› แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒ’แƒ แƒซแƒ”แƒšแƒ“แƒ”แƒก แƒ›แƒฃแƒจแƒ-e แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก Windows-แƒ–แƒ” แƒ“แƒ แƒกแƒฎแƒ•แƒ Worker-แƒ–แƒ”, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก Linux-แƒ–แƒ”.

แƒ’แƒแƒ“แƒแƒฎแƒ“แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜ แƒฉแƒœแƒ“แƒ”แƒ‘แƒ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ–แƒ” แƒ›แƒฃแƒจแƒ-แƒ”.

3. แƒ›แƒแƒœแƒขแƒแƒŸแƒ˜

แƒ›แƒแƒจ, แƒฌแƒแƒ•แƒ˜แƒ“แƒ”แƒ—. แƒ›แƒ” แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘ Ubuntu 18.04-แƒก, แƒ แƒแƒ’แƒแƒ แƒช แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒก. แƒ”แƒ แƒ—แƒก แƒ“แƒแƒ•แƒ“แƒ”แƒ‘ แƒ›แƒแƒกแƒ–แƒ” BuildMaster-แƒ แƒ“แƒ แƒ”แƒ แƒ—แƒ˜ แƒ›แƒฃแƒจแƒ-แƒ. แƒ›แƒแƒ’แƒ แƒแƒ› แƒฏแƒ”แƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒแƒ˜แƒœแƒกแƒขแƒแƒšแƒ˜แƒ แƒแƒ— 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

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ แƒ˜แƒก แƒ˜แƒœแƒกแƒขแƒแƒšแƒแƒชแƒ˜แƒ แƒขแƒ•แƒ˜แƒขแƒ”แƒ แƒจแƒ˜ แƒ’แƒแƒ›แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ“แƒ ะธ BuildBot, แƒแƒกแƒ”แƒ•แƒ” แƒžแƒแƒ™แƒ”แƒขแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒ— แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ BuildBot-แƒ.


/*ะ’ัะต ั‡ั‚ะพ ะฟะพะด 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. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜

แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ“แƒ แƒ BuildMaster. แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ /แƒกแƒแƒฎแƒšแƒ˜/แƒฐแƒแƒ‘แƒ /แƒแƒกแƒขแƒแƒขแƒ˜.

mkdir master
buildbot create-master master # ะกะพะฑัั‚ะฒะตะฝะฝะพ ัะดะตััŒ ะธ ัะพะทะดะฐะตะผ

แฒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜. แƒจแƒ”แƒ•แƒฅแƒ›แƒœแƒแƒ— แƒ›แƒฃแƒจแƒ. แƒ˜แƒก แƒฉแƒ•แƒ”แƒœแƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ /แƒกแƒแƒฎแƒšแƒ˜/แƒฐแƒแƒ‘แƒ /แƒ›แƒฃแƒจแƒ.

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

แƒ แƒแƒชแƒ แƒ’แƒแƒ แƒ‘แƒ˜แƒฎแƒแƒ  แƒ›แƒฃแƒจแƒ, แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ•แƒแƒ“ แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ /แƒกแƒแƒฎแƒšแƒ˜/แƒฐแƒแƒ‘แƒ /แƒ›แƒฃแƒจแƒ แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ master.cfg. แƒ“แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒฌแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜ แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒก แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ—แƒ“แƒ แƒ’แƒแƒแƒ’แƒ แƒซแƒ”แƒšแƒ”แƒ‘แƒก แƒแƒ›แƒแƒก แƒ’แƒแƒ“แƒ›แƒแƒขแƒแƒœแƒ. แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒฃแƒจแƒ-แƒ“แƒ แƒ’แƒแƒฎแƒ“แƒ”แƒ‘แƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ /home/habr/yourProject/build.

"แƒแƒฅแƒ แƒแƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜
แƒแƒฎแƒšแƒ แƒ™แƒ˜, แƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ” แƒฌแƒ˜แƒœแƒ แƒแƒ‘แƒ–แƒแƒชแƒ˜: แƒกแƒชแƒ”แƒœแƒแƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒกแƒแƒ›แƒแƒ’แƒ˜แƒกแƒขแƒ แƒ แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒ”แƒœ แƒ›แƒฃแƒจแƒ-แƒ“แƒ แƒแƒ› แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒ“แƒ˜แƒกแƒขแƒแƒœแƒชแƒ˜แƒฃแƒ แƒแƒ“ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒ  แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒ‘แƒ, แƒ แƒแƒ“แƒ’แƒแƒœ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒก แƒแƒ  แƒแƒฅแƒ•แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒœแƒ”แƒ‘แƒแƒ แƒ—แƒ•แƒ. แƒกแƒ˜แƒขแƒฃแƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ›แƒแƒกแƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒšแƒแƒ“ แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ— แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ --umask=0o22, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ™แƒ แƒซแƒแƒšแƒแƒ•แƒก แƒแƒ› แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒจแƒ˜ แƒฉแƒแƒฌแƒ”แƒ แƒแƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒจแƒ”แƒ˜แƒœแƒแƒ แƒฉแƒฃแƒœแƒ”แƒ‘แƒก แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒก. แƒ“แƒ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒงแƒ•แƒ”แƒšแƒแƒคแƒ”แƒ แƒ˜, แƒ แƒแƒช แƒฉแƒ•แƒ”แƒœ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ.

BuildMaster ะธ แƒ›แƒฃแƒจแƒ แƒ“แƒแƒแƒ›แƒงแƒแƒ แƒแƒœ แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒ”แƒ แƒ—แƒ›แƒแƒœแƒ”แƒ—แƒ—แƒแƒœ. แƒฎแƒ“แƒ”แƒ‘แƒ แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒฌแƒงแƒ“แƒ”แƒ‘แƒ แƒ“แƒ แƒ›แƒฃแƒจแƒ แƒ”แƒšแƒแƒ“แƒ”แƒ‘แƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒ˜แƒก แƒžแƒแƒกแƒฃแƒฎแƒก BuildMaster-แƒ. แƒ—แƒฃ แƒžแƒแƒกแƒฃแƒฎแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก, แƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ˜ แƒ’แƒแƒœแƒแƒฎแƒšแƒ“แƒ”แƒ‘แƒ. แฒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ --keepalive=60 แƒฃแƒ‘แƒ แƒแƒšแƒแƒ“ แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒ“แƒ แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช แƒ“แƒแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ”แƒ‘แƒ แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒแƒ•แƒก.

5. แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ. แƒ”แƒขแƒแƒžแƒแƒ‘แƒ แƒ˜แƒ•แƒแƒ“ แƒ แƒ”แƒชแƒ”แƒžแƒขแƒ˜

แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ BuildMaster แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒแƒžแƒแƒ แƒแƒขแƒ˜แƒก แƒ›แƒฎแƒแƒ แƒ”แƒก, แƒกแƒแƒ“แƒแƒช แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒแƒกแƒ แƒฃแƒšแƒ”แƒ— แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ-แƒแƒกแƒขแƒแƒขแƒ˜. แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒ /แƒกแƒแƒฎแƒšแƒ˜/แƒฐแƒแƒ‘แƒ /แƒแƒกแƒขแƒแƒขแƒ˜. แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜ master.cfg แƒฏแƒ”แƒ  แƒแƒ  แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ—แƒแƒ•แƒแƒ“ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒแƒ› แƒฃแƒ™แƒ•แƒ” แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒคแƒแƒ˜แƒšแƒ˜ master.cmg.sample. แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒแƒ แƒฅแƒ•แƒแƒ— แƒกแƒแƒฎแƒ”แƒšแƒ˜ master.cfg.sample ะฒ 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 BuildmasterConfig

c = BuildmasterConfig = {} 

BuildmasterConfig โ€” แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ แƒšแƒ”แƒฅแƒกแƒ˜แƒ™แƒแƒœแƒ˜. แƒ˜แƒก แƒฃแƒœแƒ“แƒ แƒ˜แƒงแƒแƒก แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒจแƒ˜. แƒ›แƒแƒฎแƒ”แƒ แƒฎแƒ”แƒ‘แƒฃแƒšแƒแƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒ“แƒจแƒ˜ แƒจแƒ”แƒ›แƒแƒขแƒแƒœแƒ˜แƒšแƒ˜แƒ แƒ›แƒ”แƒขแƒกแƒแƒฎแƒ”แƒšแƒ˜ "c". แƒขแƒ˜แƒขแƒฃแƒšแƒ”แƒ‘แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜ ะฒ c["keyFromDist"] แƒแƒ แƒ˜แƒก แƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ”แƒšแƒ”แƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒ˜ แƒฃแƒ แƒ—แƒ˜แƒ”แƒ แƒ—แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก BuildMaster. แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก, แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒฉแƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ˜แƒ—.

5.2 แƒ›แƒฃแƒจแƒ”แƒ‘แƒ˜

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

แƒแƒ›แƒฏแƒ”แƒ แƒแƒ“ แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ— BuildMaster-y แƒกแƒ˜แƒ แƒ›แƒฃแƒจแƒ-แƒก. แƒ›แƒ” แƒ—แƒ•แƒ˜แƒ—แƒแƒœ แƒ›แƒฃแƒจแƒ แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒ–แƒ”แƒ›แƒแƒ—, แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒจแƒ”แƒœ-แƒ›แƒฃแƒจแƒ-แƒกแƒแƒฎแƒ”แƒšแƒ˜ ะธ แƒ“แƒแƒ’แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒแƒ—. แƒแƒฎแƒšแƒ แƒ›แƒแƒ—แƒ˜ แƒœแƒแƒชแƒ•แƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ–แƒฃแƒกแƒขแƒ“แƒ”แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜-แƒ›แƒฃแƒจแƒแƒ™แƒ˜ ะธ แƒ’แƒแƒ˜แƒ•แƒšแƒ˜แƒก .

5.3 change_source

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

แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒชแƒ•แƒšแƒ_แƒฌแƒงแƒแƒ แƒ แƒšแƒ”แƒฅแƒกแƒ˜แƒ™แƒแƒœแƒ˜ c แƒฉแƒ•แƒ”แƒœ แƒ›แƒ˜แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒฌแƒ•แƒ“แƒแƒ›แƒแƒก แƒกแƒ˜แƒแƒ–แƒ”, แƒกแƒแƒ“แƒแƒช แƒ’แƒ•แƒ˜แƒœแƒ“แƒ แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒแƒ— แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒก แƒกแƒแƒชแƒแƒ•แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ˜แƒ—. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก Git แƒกแƒแƒชแƒแƒ•แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒ˜แƒ แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ˜แƒœแƒขแƒ”แƒ แƒ•แƒแƒšแƒ”แƒ‘แƒ˜แƒ—.

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒแƒ แƒ˜แƒก แƒ’แƒ–แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒชแƒแƒ•แƒแƒ›แƒ“แƒ”.

แƒกแƒแƒ›แƒฃแƒจแƒแƒ แƒ“แƒ˜แƒ แƒ˜แƒŸแƒแƒ แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒ’แƒ–แƒแƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ˜แƒกแƒ™แƒ”แƒœ, แƒกแƒแƒ“แƒแƒช แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜แƒ—แƒแƒ แƒ›แƒฃแƒจแƒ-แƒ’แƒ–แƒ˜แƒก แƒœแƒแƒ—แƒ”แƒกแƒแƒ•แƒ˜ /home/habr/worker/yourproject/build git แƒจแƒ”แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒšแƒแƒ™แƒแƒšแƒฃแƒ  แƒ•แƒ”แƒ แƒกแƒ˜แƒแƒก.

แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒš แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒก แƒกแƒแƒชแƒแƒ•แƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ˜แƒชแƒ•แƒแƒก.

แƒ’แƒแƒ›แƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒก แƒ˜แƒœแƒขแƒ”แƒ แƒ•แƒแƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒฌแƒแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒแƒ“แƒ”แƒœแƒแƒ‘แƒแƒก, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒแƒช BuildMaster แƒ’แƒแƒ›แƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก.

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒ˜แƒก แƒ“แƒ”แƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก.

แƒฃแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒกแƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ แƒ’แƒแƒ›แƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ, แƒ แƒแƒช แƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒแƒ‘แƒก แƒ˜แƒ›แƒแƒก BuildMaster แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒแƒ“ แƒ’แƒแƒ›แƒแƒ™แƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒก แƒกแƒแƒชแƒแƒ•แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“. แƒ—แƒฃ แƒฉแƒแƒ˜แƒ“แƒ˜แƒœแƒแƒก แƒแƒ˜แƒกแƒแƒฎแƒ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒกแƒแƒชแƒแƒ•แƒจแƒ˜, แƒ›แƒแƒจแƒ˜แƒœ BuildMaster แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ“แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒจแƒ˜แƒ“แƒ แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒก แƒจแƒ”แƒชแƒ•แƒšแƒ แƒ“แƒ แƒ’แƒแƒฃแƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ— แƒฆแƒแƒœแƒ˜แƒกแƒซแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ›แƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ”แƒšแƒก Scheduler, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ‘แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒ แƒ“แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒก แƒ›แƒฃแƒจแƒ-แƒ”. แƒแƒ› แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒก แƒจแƒแƒ แƒ˜แƒก แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒœแƒแƒฎแƒšแƒ”แƒ‘แƒ แƒกแƒแƒชแƒแƒ•แƒ˜. แƒ–แƒฃแƒกแƒขแƒแƒ“ แƒ›แƒฃแƒจแƒแƒ”แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒšแƒแƒ™แƒแƒšแƒฃแƒ  แƒแƒกแƒšแƒก. แƒแƒ› แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ“แƒ”แƒขแƒแƒšแƒ”แƒ‘แƒ˜ แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒฃแƒšแƒ˜ แƒ›แƒแƒ›แƒ“แƒ”แƒ•แƒœแƒ แƒแƒ  แƒœแƒแƒฌแƒ˜แƒšแƒจแƒ˜. (5.4 ะธ 5.5).

แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒ˜แƒก แƒ“แƒ”แƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ™แƒ˜แƒ“แƒ”แƒ• แƒฃแƒคแƒ แƒ แƒ”แƒšแƒ”แƒ’แƒแƒœแƒขแƒฃแƒ แƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒฃแƒจแƒฃแƒแƒšแƒแƒ“ แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ˜ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒ“แƒแƒœ. BuildMaster- แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒฌแƒงแƒแƒ แƒแƒก แƒ™แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒ™แƒ˜ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ˜ แƒ’แƒแƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก แƒฉแƒแƒ˜แƒ“แƒ˜แƒœแƒแƒก, แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒแƒก BuildMaster-แƒ˜. แƒ“แƒ แƒ˜แƒก, แƒ—แƒแƒ•แƒ˜แƒก แƒ›แƒฎแƒ แƒ˜แƒ•, แƒฉแƒแƒญแƒ แƒ˜แƒก แƒ›แƒแƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒ— PBCchangeSource. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜, แƒ”แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒ›แƒ Scheduler, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒแƒฅแƒขแƒ˜แƒฃแƒ แƒ”แƒ‘แƒก แƒกแƒแƒคแƒ”แƒฎแƒฃแƒ แƒ”แƒ‘แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒกแƒแƒ’แƒ”แƒ‘แƒแƒ“ แƒ“แƒ แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒšแƒแƒ“. แƒแƒ› แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒแƒœแƒ˜ แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ Hook-แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒกแƒแƒชแƒแƒ•แƒจแƒ˜. แƒกแƒชแƒ”แƒœแƒแƒ แƒจแƒ˜ Hook-แƒ, แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒกแƒ›แƒ’แƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ“แƒแƒ›แƒฃแƒจแƒแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ–แƒ”, แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒฉแƒแƒ˜แƒ“แƒ˜แƒœแƒแƒก-แƒ”, แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ แƒ”แƒ™แƒแƒ— แƒ™แƒแƒ›แƒฃแƒœแƒแƒšแƒฃแƒ แƒจแƒ˜ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ แƒ“แƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ— แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ BuildMaster-แƒ. แƒ—แƒฅแƒ•แƒ”แƒœ แƒแƒกแƒ”แƒ•แƒ” แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒฅแƒกแƒ”แƒšแƒ˜แƒก แƒžแƒแƒ แƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒแƒฃแƒกแƒ›แƒ”แƒœแƒก PBCchangeSource. PBCchangeSourceแƒกแƒฎแƒ•แƒแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก, แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒ BuildMaster-แƒ. แƒ”แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒœแƒ”แƒ‘แƒแƒ แƒ—แƒ•แƒแƒก admin-a แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ–แƒ”, แƒกแƒแƒ“แƒแƒช แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ˜. แƒฏแƒ”แƒ  แƒ›แƒแƒ’แƒ˜แƒฌแƒ”แƒ•แƒ— แƒกแƒแƒ แƒ”แƒ–แƒ”แƒ แƒ•แƒ แƒแƒกแƒšแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ.

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-แƒ—แƒแƒœ

แƒ˜แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜, แƒ แƒแƒช แƒ“แƒแƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ“แƒ แƒจแƒ”แƒชแƒ•แƒšแƒ_แƒฌแƒงแƒแƒ แƒ, แƒ’แƒแƒ แƒ“แƒแƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜ BuildBot-แƒ แƒฌแƒ˜แƒœแƒแƒแƒฆแƒ›แƒ“แƒ”แƒ’แƒแƒ‘แƒ แƒจแƒ”แƒชแƒ•แƒšแƒ แƒ“แƒ แƒแƒฎแƒšแƒ แƒงแƒแƒ•แƒ”แƒšแƒ˜ แƒจแƒ”แƒ“แƒฃแƒšแƒ”แƒ แƒ˜ แƒ›แƒแƒ—แƒ–แƒ” แƒ“แƒแƒงแƒ แƒ“แƒœแƒแƒ‘แƒ˜แƒ— แƒ˜แƒก แƒแƒงแƒแƒšแƒ˜แƒ‘แƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ“แƒแƒกแƒแƒฌแƒงแƒ”แƒ‘แƒแƒ“. แƒ—แƒฃแƒ›แƒชแƒ, แƒ˜แƒก แƒแƒกแƒ”แƒ•แƒ” แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก, แƒ แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒ›แƒ แƒ”แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ› แƒ แƒ˜แƒ’แƒจแƒ˜. แฒกแƒแƒ’แƒแƒœแƒ˜ แƒแƒฆแƒ›แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒ แƒ˜แƒ’แƒก แƒ“แƒ แƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ”แƒ‘แƒก แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒแƒกแƒแƒ›แƒ‘แƒšแƒ”แƒ˜แƒก แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒแƒก แƒชแƒแƒšแƒ™แƒ” แƒ›แƒฃแƒจแƒ-แƒ”. แƒแƒฆแƒ›แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก BuildMaster-แƒ” แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒฃแƒจแƒ-แƒ”. แƒ˜แƒก แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก BuildMaster-แƒ on แƒ›แƒฃแƒจแƒ-แƒ“แƒ แƒฃแƒ™แƒ•แƒ” แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ— - แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒ˜แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ“แƒ”แƒก.
แƒฉแƒ•แƒ”แƒœ แƒ•แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒ แƒแƒ› แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒแƒกแƒ”แƒ—แƒ˜แƒ แƒ’แƒแƒœแƒ แƒ˜แƒ’แƒ”แƒ‘แƒ˜ แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ 2 แƒชแƒแƒšแƒ˜. แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜แƒช, แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒก แƒแƒฅแƒ•แƒก แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒขแƒ˜แƒžแƒ˜.

SingleBranchScheduler - แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒงแƒ•แƒ”แƒšแƒแƒ–แƒ” แƒžแƒแƒžแƒฃแƒšแƒแƒ แƒฃแƒšแƒ˜ แƒ™แƒšแƒแƒกแƒ˜ แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ˜แƒ—. แƒ˜แƒก แƒฃแƒงแƒฃแƒ แƒ”แƒ‘แƒก แƒ”แƒ แƒ— แƒขแƒแƒขแƒก แƒ“แƒ แƒ›แƒแƒกแƒจแƒ˜ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ แƒ˜แƒฌแƒ•แƒ”แƒ•แƒก. แƒ แƒแƒ“แƒ”แƒกแƒแƒช แƒ˜แƒก แƒฎแƒ”แƒ“แƒแƒ•แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒก, แƒ›แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ’แƒแƒ“แƒแƒ“แƒแƒก build-แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ (แƒ’แƒแƒ“แƒแƒ•แƒแƒ“แƒ”แƒ‘แƒ แƒกแƒžแƒ”แƒชแƒ˜แƒแƒšแƒฃแƒ  แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒจแƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก treeStableTimer). IN แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒแƒ“แƒ’แƒ”แƒœแƒก แƒ’แƒแƒœแƒ แƒ˜แƒ’แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒœแƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ˜ BuildBot- แƒ•แƒ”แƒ‘ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜. IN แƒคแƒ˜แƒšแƒขแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒ แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒคแƒ˜แƒšแƒขแƒ แƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ’แƒแƒ•แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’, แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒจแƒ˜ แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒแƒ˜แƒซแƒฃแƒšแƒ”แƒ‘แƒก แƒ’แƒแƒœแƒ แƒ˜แƒ’แƒก แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. IN แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜-แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒชแƒแƒขแƒ แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒ“แƒแƒ•แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ—. แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒฉแƒ•แƒ”แƒœแƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ, แƒ แƒแƒช แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜: แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜.

ForceScheduler แƒซแƒแƒšแƒ˜แƒแƒœ แƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ˜ แƒ แƒแƒ›. แƒแƒ› แƒขแƒ˜แƒžแƒ˜แƒก แƒ’แƒแƒœแƒ แƒ˜แƒ’แƒ˜ แƒ’แƒแƒ›แƒแƒฌแƒ•แƒ”แƒฃแƒšแƒ˜แƒ แƒ›แƒแƒฃแƒกแƒ˜แƒก แƒ“แƒแƒฌแƒ™แƒแƒžแƒฃแƒœแƒ”แƒ‘แƒ˜แƒ— BuildBot- แƒ•แƒ”แƒ‘ แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜. แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒก แƒแƒฅแƒ•แƒ— แƒ˜แƒ’แƒ˜แƒ•แƒ” แƒแƒ แƒกแƒ˜, แƒ แƒแƒช แƒแƒฅ SingleBranchScheduler.

PS No3. แƒ˜แƒฅแƒœแƒ”แƒ‘ แƒ’แƒแƒ›แƒแƒ“แƒ’แƒ”แƒ‘แƒ
แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒ˜ แƒแƒ แƒ˜แƒก แƒ’แƒ แƒแƒคแƒ˜แƒ™แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒฃแƒจแƒแƒแƒ‘แƒก แƒ’แƒแƒ แƒ™แƒ•แƒ”แƒฃแƒšแƒ˜ แƒ“แƒ แƒแƒ˜แƒ— แƒคแƒ˜แƒฅแƒกแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ˜แƒฎแƒจแƒ˜แƒ แƒ˜แƒ—. แƒ–แƒแƒ แƒ˜ แƒแƒกแƒ” แƒ’แƒแƒ›แƒแƒ˜แƒงแƒฃแƒ แƒ”แƒ‘แƒ


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

5.5 BuildFactory


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": "."}))

periodicBuildTimer แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒแƒ› แƒžแƒ”แƒ แƒ˜แƒแƒ“แƒฃแƒšแƒแƒ‘แƒ˜แƒก แƒ“แƒ แƒแƒก แƒฌแƒแƒ›แƒ”แƒ‘แƒจแƒ˜.

BuildFactory แƒฅแƒ›แƒœแƒ˜แƒก แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒก แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒ›แƒฃแƒจแƒ. In BuildFactory แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก แƒ’แƒแƒกแƒแƒขแƒแƒ แƒ”แƒ‘แƒ”แƒš แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ–แƒ” แƒ›แƒฃแƒจแƒ-แƒ˜. แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜ แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒ— addStep

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒจแƒ˜ แƒแƒ แƒ˜แƒก git แƒกแƒฃแƒคแƒ—แƒ -d -f -f โ€“x, แƒ›แƒแƒจแƒ˜แƒœ git แƒ’แƒแƒ“แƒแƒฎแƒ“แƒ. แƒ”แƒก แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ“แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒจแƒ˜ แƒ›แƒ”แƒ—แƒแƒ“แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒ™แƒแƒคแƒ˜แƒแƒ“ แƒแƒ  แƒแƒ แƒ˜แƒก แƒœแƒแƒ—แƒฅแƒ•แƒแƒ›แƒ˜, แƒ›แƒแƒ’แƒ แƒแƒ› แƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒแƒ‘แƒก แƒœแƒแƒ’แƒฃแƒšแƒ˜แƒกแƒฎแƒ›แƒ”แƒ• แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒก แƒกแƒฃแƒคแƒ—แƒ... แฒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜ แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜='แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜' แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ”แƒ‘แƒก, แƒ แƒแƒ› แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜ แƒแƒ แƒ˜แƒก แƒ˜แƒ› แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒ“แƒแƒœ, แƒกแƒแƒ“แƒแƒช แƒฉแƒ”แƒฉแƒฃแƒขแƒ˜, แƒ›แƒ˜แƒฃแƒฎแƒ”แƒ“แƒแƒ•แƒแƒ“ แƒ˜แƒ›แƒ˜แƒกแƒ, แƒ แƒแƒ› แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ˜แƒ“แƒแƒœ, แƒ แƒฉแƒ”แƒ‘แƒ แƒฎแƒ”แƒšแƒฃแƒฎแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜.

แƒ›แƒ”แƒแƒ แƒ” แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ แƒกแƒแƒกแƒแƒ›แƒแƒ แƒ—แƒšแƒ แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ˜แƒ— แƒ›แƒ˜แƒ”แƒกแƒแƒšแƒ›แƒ”แƒ‘แƒ˜ แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒ›แƒฃแƒจแƒ-แƒ แƒ“แƒ˜แƒ แƒ”แƒฅแƒขแƒแƒ แƒ˜แƒแƒ“แƒแƒœ /home/habr/worker/yourproject/build แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒชแƒ•แƒšแƒแƒ“แƒ˜แƒ— PATHONPATH=... แƒแƒ›แƒ แƒ˜แƒ’แƒแƒ“, แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒแƒ— แƒ˜แƒกแƒ˜แƒœแƒ˜ แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒ›แƒฃแƒจแƒ- แƒงแƒแƒ•แƒ”แƒš แƒœแƒแƒ‘แƒ˜แƒฏแƒ–แƒ” แƒฃแƒขแƒ˜แƒš.ShellCommand. แƒ”แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ“แƒ”แƒก แƒžแƒ˜แƒ แƒ“แƒแƒžแƒ˜แƒ  แƒกแƒแƒชแƒแƒ•แƒจแƒ˜. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ–แƒ” แƒฉแƒ”แƒฉแƒฃแƒขแƒ˜-แƒ” แƒฉแƒแƒ•แƒแƒ แƒ“แƒ”แƒ‘แƒ˜แƒแƒœ /home/habr/worker/yourproject/build. แƒ—แƒฃแƒ›แƒชแƒ, แƒ›แƒแƒจแƒ˜แƒœ แƒแƒ แƒกแƒ”แƒ‘แƒแƒ‘แƒก แƒแƒ แƒ˜ "แƒ›แƒแƒ’แƒ แƒแƒ›":

  1. แƒ›แƒฃแƒจแƒ แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒแƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒ— --แƒฃแƒ›แƒแƒกแƒ™แƒ˜ แƒ˜แƒกแƒ”, แƒ แƒแƒ› แƒแƒ  แƒ“แƒแƒ‘แƒšแƒแƒ™แƒแƒก แƒแƒฆแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒแƒ“แƒ›แƒแƒขแƒแƒœแƒ-แƒ.
  2. at แƒ’แƒ˜แƒข แƒ‘แƒ˜แƒซแƒ’แƒ˜-e แƒแƒ› แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜แƒ“แƒแƒœ แƒ—แƒฅแƒ•แƒ”แƒœ แƒฃแƒœแƒ“แƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒกแƒแƒ™แƒฃแƒ—แƒ แƒ”แƒ‘แƒ แƒแƒฆแƒกแƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒแƒกแƒ” แƒ แƒแƒ› แƒ›แƒแƒ’แƒ•แƒ˜แƒแƒœแƒ”แƒ‘แƒ˜แƒ— แƒฉแƒ”แƒฉแƒฃแƒขแƒ˜-e-แƒ› แƒแƒ  แƒ“แƒแƒ™แƒแƒ แƒ’แƒ Git แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ˜แƒก แƒฃแƒคแƒšแƒ”แƒ‘แƒ.

5.6 แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜


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

แƒ˜แƒ›แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฎแƒ”แƒ‘, แƒ—แƒฃ แƒ แƒ แƒแƒ แƒ˜แƒก แƒแƒฆแƒ›แƒแƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒ˜แƒก แƒฃแƒ—แƒฎแƒ แƒ”แƒก แƒแƒฅ. แƒแƒฎแƒšแƒ แƒ›แƒ” แƒ’แƒ”แƒขแƒงแƒ•แƒ˜แƒ— แƒฃแƒคแƒ แƒ แƒ“แƒ”แƒขแƒแƒšแƒฃแƒ แƒแƒ“, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒ˜แƒ’แƒ˜. BuilderConfig แƒแƒ แƒ˜แƒก แƒ™แƒแƒœแƒกแƒขแƒ แƒฃแƒฅแƒขแƒแƒ แƒ˜ แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜. แƒแƒกแƒ”แƒ—แƒ˜ แƒ“แƒ˜แƒ–แƒแƒ˜แƒœแƒ”แƒ แƒ”แƒ‘แƒ˜ แƒ’['แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜'] แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ— แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ”, แƒ แƒแƒ“แƒ’แƒแƒœ แƒ”แƒก แƒแƒ แƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜แƒก แƒคแƒฃแƒ แƒชแƒ”แƒšแƒ˜ แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒขแƒ˜แƒžแƒ˜. แƒแƒฎแƒšแƒ แƒ›แƒแƒ“แƒ˜แƒ— แƒ’แƒแƒ“แƒแƒ•แƒฌแƒ”แƒ แƒแƒ— แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ BuildBotแƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒก แƒฉแƒ•แƒ”แƒœแƒก แƒแƒ›แƒแƒชแƒแƒœแƒแƒก.


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

แƒแƒฎแƒšแƒ แƒ›แƒ” แƒ’แƒ”แƒขแƒงแƒ•แƒ˜แƒ— แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ–แƒ” BuilderConfig.

แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒก แƒแƒ–แƒฃแƒกแƒขแƒ”แƒ‘แƒก แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜-แƒ. แƒแƒฅ แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒแƒกแƒแƒฎแƒ”แƒšแƒ”แƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜... แƒ”แƒก แƒœแƒ˜แƒจแƒœแƒแƒ•แƒก, แƒ แƒแƒ› on แƒ›แƒฃแƒจแƒ- แƒกแƒฌแƒแƒ แƒ”แƒ“ แƒ”แƒก แƒ’แƒ–แƒ แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ /home/habr/worker/yourproject/build. แƒจแƒ”แƒ“แƒฃแƒšแƒ”แƒ แƒ˜ แƒซแƒ”แƒ‘แƒœแƒ แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒแƒ› แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ—.

แƒ›แƒฃแƒจแƒแƒ™แƒ—แƒ แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒคแƒฃแƒ แƒชแƒ”แƒšแƒก แƒ›แƒฃแƒจแƒ-แƒก. แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒ’แƒแƒœ แƒ—แƒ˜แƒ—แƒแƒ”แƒฃแƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ”แƒ›แƒแƒขแƒแƒก แƒ’['แƒ›แƒฃแƒจแƒแƒ™แƒ”แƒ‘แƒ˜'].

แƒฅแƒแƒ แƒฎแƒแƒœแƒ - แƒ™แƒแƒœแƒ™แƒ แƒ”แƒขแƒฃแƒšแƒ˜ แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒแƒœแƒแƒช แƒ˜แƒ’แƒ˜ แƒแƒกแƒแƒชแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜. แƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒก แƒ’แƒแƒฃแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ— on แƒ›แƒฃแƒจแƒ แƒ“แƒแƒแƒกแƒ แƒฃแƒšแƒ”แƒ— แƒแƒ›แƒแƒจแƒ˜ แƒจแƒ”แƒ›แƒแƒ•แƒแƒšแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ—-แƒ.

6. แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜

แƒแƒฅ แƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒแƒกแƒแƒช แƒ›แƒ” แƒ•แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘ BuildBot
.

แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ แƒแƒ’แƒแƒ แƒช แƒ•แƒ”แƒ แƒกแƒ˜แƒ˜แƒก แƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒก svn. แƒ—แƒแƒ•แƒแƒ“ แƒกแƒแƒชแƒแƒ•แƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ“แƒ”แƒ‘แƒ แƒ แƒแƒ˜แƒ›แƒ” แƒกแƒแƒฎแƒ˜แƒก แƒฆแƒ แƒฃแƒ‘แƒ”แƒšแƒจแƒ˜. แƒแƒฅ แƒแƒ แƒ˜แƒก แƒแƒ› แƒฆแƒ แƒฃแƒ‘แƒšแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ svn.host/svn/yourProject/trunk. แƒฆแƒ แƒฃแƒ‘แƒ”แƒšแƒจแƒ˜ แƒฅแƒ•แƒ”แƒจ svn แƒแƒ แƒ˜แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜: แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜, passwd: แƒ“แƒแƒ’แƒแƒ•แƒ˜แƒฌแƒงแƒ“แƒแƒ—. แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒ”แƒœ แƒœแƒแƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒก แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ—-แƒ แƒแƒกแƒ”แƒ•แƒ” แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒจแƒ˜ svn, แƒชแƒแƒšแƒ™แƒ” แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜ buildbot/worker_linux. แƒ”แƒก แƒกแƒ™แƒ แƒ˜แƒžแƒขแƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒแƒชแƒแƒ•แƒจแƒ˜ แƒจแƒ”แƒœแƒแƒฎแƒฃแƒšแƒ˜ แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒ“แƒ˜.

BuildMaster ะธ แƒ›แƒฃแƒจแƒ แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— แƒ˜แƒ›แƒแƒ•แƒ” แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ–แƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜.แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ˜ .BuildMaster แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒ›แƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ”แƒจแƒ˜ /แƒกแƒแƒฎแƒšแƒ˜/แƒฐแƒแƒ‘แƒ /แƒแƒกแƒขแƒแƒขแƒ˜. แƒ›แƒฃแƒจแƒ แƒ˜แƒก แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ’แƒ–แƒแƒ–แƒ” /แƒกแƒแƒฎแƒšแƒ˜/แƒฐแƒแƒ‘แƒ /แƒ›แƒฃแƒจแƒ. แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ™แƒแƒ›แƒฃแƒœแƒ˜แƒ™แƒแƒชแƒ˜แƒ BuildMaster-แƒ แƒ“แƒ แƒ›แƒฃแƒจแƒ-แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒžแƒแƒ แƒขแƒ˜ 4000 แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— BuildBot-แƒ, แƒแƒœแƒฃ 'pb' แƒแƒฅแƒ›แƒ˜.

แƒกแƒแƒ›แƒ˜แƒ–แƒœแƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒ›แƒ—แƒšแƒ˜แƒแƒœแƒแƒ“ แƒžแƒ˜แƒ—แƒแƒœแƒจแƒ˜แƒ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜. แƒแƒ›แƒแƒชแƒแƒœแƒแƒ แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒ˜ แƒแƒ“แƒ”แƒ•แƒœแƒแƒ— แƒ›แƒ˜แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒก, แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒแƒ“แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜, แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ แƒ“แƒ แƒฉแƒแƒแƒขแƒแƒ แƒแƒ— แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ. แƒฌแƒแƒ แƒฃแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒงแƒ•แƒ”แƒšแƒ แƒ“แƒ”แƒ•แƒ”แƒšแƒแƒžแƒ”แƒ แƒ›แƒ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ›แƒแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ แƒ”แƒšแƒ”แƒฅแƒขแƒ แƒแƒœแƒฃแƒšแƒ˜ แƒคแƒแƒกแƒขแƒ˜แƒ—, แƒ แƒแƒ› แƒฌแƒแƒ แƒฃแƒ›แƒแƒขแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒ›แƒแƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒแƒ.

แƒ•แƒ”แƒ‘ แƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒ BuildBot แƒฉแƒ•แƒ”แƒœ แƒ“แƒแƒ•แƒฃแƒ™แƒแƒ•แƒจแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ˜แƒ— แƒžแƒแƒ แƒขแƒก 80 แƒแƒ›แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜.แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ˜. แƒแƒ  แƒแƒ แƒ˜แƒก แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ Apatch-แƒ˜แƒก แƒ“แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ. แƒ แƒแƒ’แƒแƒ แƒช แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜ แƒ“แƒ”แƒกแƒžแƒแƒœแƒ”แƒšแƒ˜ แƒฃแƒ™แƒ•แƒ” แƒแƒ แƒ˜แƒก แƒ•แƒ”แƒ‘ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜, BuildBot แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ›แƒแƒก.

แƒจแƒ˜แƒ“แƒ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒจแƒ”แƒกแƒแƒœแƒแƒฎแƒแƒ“ BuildBot แƒฉแƒ•แƒ”แƒœ แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒกแƒ™แƒšแƒ˜แƒขแƒ˜.

แƒคแƒแƒกแƒขแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒฐแƒแƒกแƒขแƒ˜ smtp.your.domain - แƒ˜แƒก แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒฌแƒ”แƒ แƒ˜แƒšแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒคแƒแƒกแƒขแƒ˜แƒ“แƒแƒœ [แƒ”แƒš.แƒคแƒแƒกแƒขแƒ˜แƒ— แƒ“แƒแƒชแƒฃแƒšแƒ˜แƒ] แƒแƒ•แƒขแƒแƒ แƒ˜แƒ–แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒจแƒ”. แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒแƒกแƒžแƒ˜แƒœแƒซแƒ”แƒšแƒ–แƒ”'SMTP 1025 แƒคแƒแƒกแƒขแƒแƒ–แƒ” แƒแƒฅแƒ›แƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒกแƒ›แƒ”แƒœแƒ แƒฎแƒ“แƒ”แƒ‘แƒ.

แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜ แƒฉแƒแƒ แƒ—แƒฃแƒšแƒ˜แƒ แƒแƒ แƒ˜ แƒแƒ“แƒแƒ›แƒ˜แƒแƒœแƒ˜: admin ะธ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜. แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ˜ BuildBot. แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒแƒ แƒ˜แƒก แƒžแƒ˜แƒ แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒก แƒฉแƒแƒ˜แƒ“แƒ˜แƒœแƒแƒก-แƒก.

แƒจแƒ”แƒ›แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— pyinstaller. แƒ“แƒแƒ™แƒฃแƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— แƒ“แƒแƒฅแƒกแƒ˜แƒ’แƒ”แƒœแƒ˜.

แƒแƒ› แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ›แƒ” แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒ” แƒ”แƒก: 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"
}

แƒฏแƒ”แƒ  แƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒจแƒ”แƒฅแƒ›แƒœแƒ BuildMaster-แƒ แƒ“แƒ แƒ›แƒฃแƒจแƒ-แƒ. แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒฉแƒแƒกแƒ•แƒ˜แƒ— แƒ”แƒก แƒคแƒแƒ˜แƒšแƒ˜ master.cfg ะฒ /แƒกแƒแƒฎแƒšแƒ˜/แƒฐแƒแƒ‘แƒ /แƒแƒกแƒขแƒแƒขแƒ˜.

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ แƒ˜แƒก แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ“แƒแƒฌแƒงแƒ”แƒ‘แƒ BuildMaster- แƒ


sudo buildbot start /home/habr/master

แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒ“แƒแƒ˜แƒฌแƒงแƒ”แƒ— แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜ แƒ›แƒฃแƒจแƒ-a


buildbot-worker start /home/habr/worker

แƒ›แƒ–แƒแƒ“แƒแƒ! แƒแƒฎแƒšแƒ Buildbot แƒ—แƒ•แƒแƒšแƒงแƒฃแƒ แƒก แƒแƒ“แƒ”แƒ•แƒœแƒ”แƒ‘แƒก แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒก แƒ“แƒ แƒ’แƒแƒ›แƒแƒ˜แƒฌแƒ•แƒ”แƒ•แƒก แƒฉแƒแƒ˜แƒ“แƒ˜แƒœแƒแƒก-แƒ˜ แƒจแƒ˜แƒ’แƒœแƒ˜แƒ— svn, แƒ–แƒ”แƒ›แƒแƒแƒฆแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ˜ แƒแƒ แƒฅแƒ˜แƒขแƒ”แƒฅแƒขแƒฃแƒ แƒ˜แƒ— แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒแƒ’แƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒขแƒแƒžแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒ.

แƒฅแƒ•แƒ”แƒ›แƒแƒ— แƒแƒฆแƒ•แƒฌแƒ”แƒ  แƒ–แƒ”แƒ›แƒแƒแƒฆแƒœแƒ˜แƒจแƒœแƒฃแƒšแƒ˜แƒก แƒ–แƒแƒ’แƒ˜แƒ”แƒ แƒ— แƒ›แƒแƒฎแƒแƒกแƒ˜แƒแƒ—แƒ”แƒ‘แƒ”แƒšแƒก master.cfg.

6.1 แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒ‘แƒแƒขแƒแƒœแƒ˜แƒกแƒ™แƒ”แƒœ แƒ›แƒ˜แƒ›แƒแƒ•แƒแƒš แƒ’แƒ–แƒแƒ–แƒ”.cfg


แƒฌแƒ”แƒ แƒ˜แƒกแƒแƒก แƒฉแƒ”แƒ›แƒ˜ master.cfg แƒ‘แƒ”แƒ•แƒ แƒ˜ แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒ“แƒแƒจแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜, แƒแƒ›แƒ˜แƒขแƒแƒ› แƒกแƒแƒญแƒ˜แƒ แƒ แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒŸแƒฃแƒ แƒœแƒแƒšแƒ˜แƒก แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ. แƒ˜แƒก แƒ˜แƒœแƒแƒฎแƒ”แƒ‘แƒ แƒ แƒแƒ’แƒแƒ แƒช BuildMaster-ec แƒแƒ‘แƒกแƒแƒšแƒฃแƒขแƒฃแƒ แƒ˜ แƒ’แƒ–แƒ /home/habr/master/twistd.log, แƒ“แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ” แƒ›แƒฃแƒจแƒ-แƒ แƒแƒ‘แƒกแƒแƒšแƒฃแƒขแƒฃแƒ แƒ˜ แƒ’แƒ–แƒ /home/habr/worker/twistd.log. แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ˜แƒก แƒฌแƒแƒ™แƒ˜แƒ—แƒฎแƒ•แƒ˜แƒกแƒแƒก แƒ“แƒ แƒ’แƒแƒ›แƒแƒกแƒฌแƒแƒ แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ›แƒแƒ’แƒ˜แƒฌแƒ”แƒ•แƒ— แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ˜แƒก แƒ’แƒแƒ“แƒแƒขแƒ•แƒ˜แƒ แƒ—แƒ•แƒ BuildMaster-แƒ. แƒแƒ˜, แƒ แƒแƒ’แƒแƒ  แƒ™แƒ”แƒ—แƒ“แƒ”แƒ‘แƒ แƒ”แƒก:


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_alwaystrunk แƒแƒ“แƒ’แƒ”แƒœแƒก แƒฌแƒ”แƒกแƒ”แƒ‘แƒก: แƒ แƒแƒ’แƒแƒ  แƒ“แƒแƒแƒ แƒฆแƒ•แƒ˜แƒแƒก แƒกแƒแƒฅแƒแƒฆแƒแƒšแƒ“แƒ˜แƒก แƒกแƒขแƒ แƒฃแƒฅแƒขแƒฃแƒ แƒ svn แƒขแƒแƒขแƒ”แƒ‘แƒ–แƒ”. แƒ˜แƒก แƒแƒกแƒ”แƒ•แƒ” แƒกแƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒก แƒ›แƒแƒ— แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒ’แƒ–แƒ”แƒ‘แƒก. แƒ—แƒแƒ•แƒ˜แƒก แƒ›แƒฎแƒ แƒ˜แƒ• split_file_alwaystrunk แƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒ‘แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒก แƒ˜แƒ›แƒ˜แƒ—, แƒ แƒแƒ› แƒกแƒแƒชแƒแƒ•แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ›แƒแƒ’แƒ˜แƒกแƒขแƒ แƒแƒšแƒฃแƒ แƒ˜.

ะ’ แƒ’แƒแƒœแƒ แƒ˜แƒ’แƒ”แƒ‘แƒ˜ แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒคแƒ˜แƒšแƒขแƒ แƒ˜แƒก แƒจแƒ”แƒชแƒ•แƒšแƒแƒ•แƒ˜แƒœแƒช แƒฎแƒ”แƒ“แƒแƒ•แƒก แƒแƒ แƒ แƒ“แƒ แƒ›แƒแƒกแƒ—แƒแƒœ แƒแƒกแƒแƒชแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒคแƒ˜แƒšแƒ˜แƒแƒšแƒ˜ แƒ›แƒแƒ’แƒ˜แƒกแƒขแƒ แƒแƒšแƒฃแƒ แƒ˜ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒแƒกแƒแƒชแƒ˜แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ— แƒ›แƒ”แƒจแƒ•แƒ”แƒแƒ‘แƒ˜แƒ— split_file_alwaystrunk. แƒชแƒ•แƒšแƒ˜แƒšแƒ”แƒ‘แƒ”แƒ‘แƒ–แƒ” แƒ แƒ”แƒแƒ’แƒ˜แƒ แƒ”แƒ‘แƒ แƒ›แƒแƒ’แƒ˜แƒกแƒขแƒ แƒแƒšแƒฃแƒ แƒ˜, แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ แƒ›แƒจแƒ”แƒœแƒ”แƒ‘แƒ”แƒšแƒ˜ แƒกแƒแƒฎแƒ”แƒšแƒ˜แƒ— แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜.

แƒ—แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒแƒฅ แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒแƒ“แƒ›แƒ˜แƒœแƒ˜แƒกแƒขแƒ แƒแƒขแƒแƒ แƒ›แƒ แƒ›แƒ˜แƒ˜แƒฆแƒแƒก build-แƒ˜แƒก แƒ“แƒ แƒขแƒ”แƒกแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒคแƒแƒกแƒขแƒ แƒกแƒ˜แƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒช แƒžแƒ แƒแƒชแƒ”แƒกแƒ˜แƒก แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜.

แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ—-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]

แƒ›แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒกแƒฎแƒ•แƒแƒ“แƒแƒกแƒฎแƒ•แƒ แƒ’แƒ–แƒ”แƒ‘แƒ˜.

MailNotifier แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒก แƒ”แƒš.แƒฌแƒ”แƒ แƒ˜แƒšแƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒกแƒแƒ’แƒ–แƒแƒ•แƒœแƒแƒ“.

template_html แƒแƒ“แƒ’แƒ”แƒœแƒก แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒจแƒแƒ‘แƒšแƒแƒœแƒก แƒกแƒแƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ‘แƒ˜แƒฃแƒšแƒ”แƒขแƒ”แƒœแƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. HTML แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ›แƒแƒ แƒ™แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“. แƒ˜แƒก แƒ›แƒแƒ“แƒ˜แƒคแƒ˜แƒชแƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒซแƒ แƒแƒ•แƒ˜แƒ— แƒฏแƒ˜แƒœแƒฏแƒ2 (แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒจแƒ”แƒ“แƒแƒ แƒ”แƒ‘แƒ แƒฏแƒแƒœแƒ’แƒ). BuildBot แƒแƒฅแƒ•แƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ”แƒ‘แƒ˜ แƒฉแƒแƒœแƒแƒชแƒ•แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒจแƒแƒ‘แƒšแƒแƒœแƒจแƒ˜ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒขแƒ”แƒฅแƒกแƒขแƒ˜แƒก แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒชแƒ”แƒกแƒจแƒ˜. แƒ”แƒก แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ แƒฉแƒแƒกแƒ›แƒฃแƒšแƒ˜แƒ {{ แƒแƒ แƒ›แƒแƒ’แƒ˜ แƒฎแƒ•แƒ”แƒฃแƒšแƒ˜ แƒ‘แƒ แƒ”แƒ™แƒ”แƒขแƒ”แƒ‘แƒจแƒ˜ }}. แฒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, แƒจแƒ”แƒ›แƒแƒฏแƒแƒ›แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒแƒฉแƒ•แƒ”แƒœแƒ”แƒ‘แƒก แƒ“แƒแƒกแƒ แƒฃแƒšแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒ”แƒ‘แƒ˜แƒก แƒกแƒขแƒแƒขแƒฃแƒกแƒก, แƒแƒœแƒฃ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒแƒก แƒแƒœ แƒฌแƒแƒ แƒฃแƒ›แƒแƒขแƒ”แƒ‘แƒšแƒแƒ‘แƒแƒก. แƒ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜ แƒ’แƒแƒ›แƒแƒ•แƒ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜. แƒแƒกแƒ” แƒ แƒแƒ›, แƒกแƒแƒ™แƒแƒœแƒขแƒ แƒแƒšแƒ แƒ‘แƒ แƒซแƒแƒœแƒ”แƒ‘แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒฏแƒ˜แƒœแƒฏแƒ2, แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜ BuildBot-a แƒ“แƒ แƒžแƒ˜แƒ—แƒแƒœแƒ˜แƒก แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ”แƒ‘แƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒขแƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒฎแƒ”แƒšแƒกแƒแƒฌแƒงแƒแƒ”แƒ‘แƒ˜, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒจแƒ”แƒฅแƒ›แƒœแƒแƒ— แƒกแƒแƒ™แƒ›แƒแƒแƒ“ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ.

MailNotifier แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒแƒ แƒ’แƒฃแƒ›แƒ”แƒœแƒขแƒ”แƒ‘แƒก.

fromaddr โ€“ แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜, แƒกแƒแƒ˜แƒ“แƒแƒœแƒแƒช แƒงแƒ•แƒ”แƒšแƒ แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ‘แƒ˜แƒฃแƒšแƒ”แƒขแƒ”แƒœแƒก.

แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ— แƒ“แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒก=True แƒฃแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒแƒก แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒก แƒ“แƒ แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ›แƒแƒช แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒฉแƒแƒ˜แƒ“แƒ˜แƒœแƒแƒก.

แƒ›แƒแƒซแƒ”แƒ‘แƒœแƒ, แƒแƒ˜แƒฎแƒ”แƒ“แƒ” แƒ–แƒ”แƒ›แƒแƒ— โ€” แƒกแƒฃแƒคแƒ˜แƒฅแƒกแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ”แƒ›แƒแƒขแƒแƒก แƒ˜แƒ› แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒ˜แƒช แƒ˜แƒฆแƒ”แƒ‘แƒ”แƒœ แƒ‘แƒ˜แƒฃแƒšแƒ”แƒขแƒ”แƒœแƒก. แฒ˜แƒกแƒ” admin แƒ แƒแƒ’แƒแƒ  แƒ›แƒ˜แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ”แƒšแƒ˜ แƒกแƒแƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ แƒ‘แƒ˜แƒฃแƒšแƒ”แƒขแƒ”แƒœแƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ–แƒ” [แƒ”แƒš.แƒคแƒแƒกแƒขแƒ˜แƒ— แƒ“แƒแƒชแƒฃแƒšแƒ˜แƒ].

แƒ แƒ”แƒšแƒ”แƒฐแƒแƒกแƒขแƒ˜ แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒฐแƒแƒกแƒขแƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ–แƒ”แƒช แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜ แƒ˜แƒฎแƒกแƒœแƒ”แƒ‘แƒ SMTP, smptPort แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒžแƒแƒ แƒขแƒ˜แƒก แƒœแƒแƒ›แƒ”แƒ แƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒกแƒ›แƒ”แƒœแƒก SMTP แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜.

แƒ แƒ”แƒŸแƒ˜แƒ›แƒ˜ = "แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ" แƒแƒ›แƒ‘แƒแƒ‘แƒก, แƒ แƒแƒ› แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜, แƒ—แƒฃ แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒฃแƒ› แƒ”แƒ แƒ—แƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜ แƒแƒ•แƒแƒจแƒ”แƒœแƒแƒ—-แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ แƒกแƒขแƒแƒขแƒฃแƒกแƒ˜แƒก แƒฃแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒแƒ‘แƒ˜แƒ— แƒแƒœ แƒ’แƒแƒคแƒ แƒ—แƒฎแƒ˜แƒšแƒ”แƒ‘แƒ˜แƒ—. แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒ‘แƒ˜แƒฃแƒšแƒ”แƒขแƒ”แƒœแƒ˜ แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ.

แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒ›แƒ˜แƒ›แƒฆแƒ”แƒ‘แƒ”แƒ‘แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒ˜แƒ› แƒžแƒ˜แƒ แƒ—แƒ แƒกแƒ˜แƒแƒก, แƒ แƒแƒ›แƒšแƒ”แƒ‘แƒกแƒแƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ”แƒ’แƒ–แƒแƒ•แƒœแƒแƒก แƒ›แƒ”แƒ˜แƒšแƒ˜, แƒ’แƒแƒ แƒ“แƒ แƒ›แƒคแƒšแƒแƒ‘แƒ”แƒšแƒ˜แƒกแƒ แƒ“แƒ แƒ˜แƒ› แƒžแƒ˜แƒ แƒ˜แƒกแƒ, แƒ•แƒ˜แƒœแƒช แƒจแƒ”แƒแƒกแƒ แƒฃแƒšแƒ แƒฉแƒแƒ˜แƒ“แƒ˜แƒœแƒแƒก.

messageFormatter แƒแƒ แƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒแƒ•แƒก แƒจแƒ”แƒขแƒงแƒแƒ‘แƒ˜แƒœแƒ”แƒ‘แƒ˜แƒก แƒคแƒแƒ แƒ›แƒแƒขแƒก, แƒ›แƒ˜แƒก แƒจแƒแƒ‘แƒšแƒแƒœแƒก แƒ“แƒ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ”แƒ แƒ—แƒแƒ‘แƒšแƒ˜แƒแƒ‘แƒแƒก แƒฏแƒ˜แƒœแƒฏแƒ2. แƒ•แƒแƒ แƒ˜แƒแƒœแƒขแƒ”แƒ‘แƒ˜, แƒ แƒแƒ’แƒแƒ แƒ˜แƒชแƒแƒ wantProperties=True ะธ wantSteps=True แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ”แƒ— แƒฎแƒ”แƒšแƒ›แƒ˜แƒกแƒแƒฌแƒ•แƒ“แƒแƒ›แƒ˜ แƒชแƒ•แƒšแƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒ”แƒก แƒœแƒแƒ™แƒ แƒ”แƒ‘แƒ˜.

with['services']=[sendMessageTo All] แƒ’แƒ—แƒแƒ•แƒแƒ–แƒแƒ‘แƒ— แƒกแƒ”แƒ แƒ•แƒ˜แƒกแƒ”แƒ‘แƒ˜แƒก แƒฉแƒแƒ›แƒแƒœแƒแƒ—แƒ•แƒแƒšแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ—แƒ แƒจแƒแƒ แƒ˜แƒก แƒ˜แƒฅแƒœแƒ”แƒ‘แƒ แƒฉแƒ•แƒ”แƒœแƒ˜ แƒ แƒ”แƒžแƒแƒ แƒขแƒ˜แƒแƒ แƒ˜.

แฒฉแƒ•แƒ”แƒœ แƒ”แƒก แƒจแƒ”แƒ•แƒซแƒ”แƒšแƒ˜แƒ—! แƒ’แƒ˜แƒšแƒแƒชแƒแƒ•

แƒฉแƒ•แƒ”แƒœ แƒจแƒ”แƒ•แƒฅแƒ›แƒ”แƒœแƒ˜แƒ— แƒฉแƒ•แƒ”แƒœแƒ˜ แƒกแƒแƒ™แƒฃแƒ—แƒแƒ แƒ˜ แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒ“แƒ แƒ“แƒแƒ•แƒ˜แƒœแƒแƒฎแƒ”แƒ— แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒœแƒ˜แƒ แƒ”แƒ‘แƒ, แƒ แƒแƒช แƒ›แƒแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ. BuildBot. แƒ”แƒก, แƒ•แƒคแƒ˜แƒฅแƒ แƒแƒ‘, แƒกแƒแƒ™แƒ›แƒแƒ แƒ˜แƒกแƒ˜แƒ แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒกแƒแƒ’แƒ”แƒ‘แƒแƒ“, แƒกแƒแƒญแƒ˜แƒ แƒแƒ แƒ—แƒฃ แƒแƒ แƒ แƒ”แƒก แƒ˜แƒœแƒกแƒขแƒ แƒฃแƒ›แƒ”แƒœแƒขแƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒ˜ แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒกแƒแƒฅแƒ›แƒœแƒ”แƒšแƒแƒ“. แƒ’แƒแƒ˜แƒœแƒขแƒ”แƒ แƒ”แƒกแƒ”แƒ‘แƒ— แƒ˜แƒก? แƒ’แƒแƒ›แƒแƒ’แƒแƒ“แƒ’แƒ”แƒ‘แƒแƒ—? แƒ™แƒแƒ›แƒคแƒแƒ แƒขแƒฃแƒšแƒ˜แƒ แƒ—แƒฃ แƒแƒ แƒ แƒ›แƒแƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ? แƒ›แƒแƒจแƒ˜แƒœ แƒแƒ› แƒกแƒขแƒแƒขแƒ˜แƒแƒก แƒขแƒงแƒฃแƒ˜แƒšแƒแƒ“ แƒแƒ  แƒ•แƒฌแƒ”แƒ .

แƒ“แƒ แƒจแƒ”แƒ›แƒ“แƒ’แƒแƒ›. แƒ•แƒ˜แƒกแƒฃแƒ แƒ•แƒ”แƒ‘แƒ“แƒ˜, แƒ แƒแƒ› แƒžแƒ แƒแƒคแƒ”แƒกแƒ˜แƒแƒœแƒแƒšแƒ›แƒ แƒกแƒแƒ–แƒแƒ’แƒแƒ“แƒแƒ”แƒ‘แƒแƒ› แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒแƒก BuildBot, แƒฃแƒคแƒ แƒ แƒคแƒแƒ แƒ—แƒ แƒ’แƒแƒฎแƒ“แƒ, แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒแƒ”แƒ‘แƒ˜ แƒ˜แƒ—แƒแƒ แƒ’แƒ›แƒœแƒ แƒ“แƒ แƒ™แƒ˜แƒ“แƒ”แƒ• แƒฃแƒคแƒ แƒ แƒ›แƒ”แƒขแƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜ แƒ˜แƒงแƒ.

แƒ›แƒแƒ“แƒšแƒแƒ‘แƒ แƒงแƒ•แƒ”แƒšแƒแƒก แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก. แฒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ”แƒ‘แƒ˜.

แƒฌแƒงแƒแƒ แƒ: www.habr.com

แƒแƒฎแƒแƒšแƒ˜ แƒ™แƒแƒ›แƒ”แƒœแƒขแƒแƒ แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ