BuildBot เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดธเด‚เดฏเต‹เดœเดจเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚

BuildBot เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดธเด‚เดฏเต‹เดœเดจเด‚ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚
(เดšเดฟเดคเตเดฐเด‚ เด•เด‚เดชเตเดฏเต‚เดŸเตเดŸเดฑเตˆเดธเตผ เดจเดฟเดจเตเดจเต เดชเดฟเด•เตเดธเดฌเต‡)

เดนเดฒเต‹!

เดŽเดจเตเดฑเต† เดชเต‡เดฐเต เดŽเดตเตเดœเต†เดจเดฟ เดšเต†เตผเด•เดฟเตป, เดžเดพเตป เด’เดฐเต เดฎเตˆเดจเดฟเด‚เด—เต เด•เดฎเตเดชเดจเดฟเดฏเดฟเดฒเต† เด’เดฐเต เดตเดฟเด•เดธเดจ เดŸเต€เดฎเดฟเดฒเต† เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฑเดพเดฃเต เดชเต‹เดณเดฟเดฎเต†เดฑเตเดฑเตฝ.

เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดตเดฒเดฟเดฏ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดจเดฟเด™เตเด™เตพ เดšเดฟเดจเตเดคเดฟเด•เตเด•เดพเตป เดคเตเดŸเด™เตเด™เตเดจเตเดจเต: "เดเดคเต เดธเต‹เดซเตโ€Œเดฑเตเดฑเตโ€Œเดตเต†เดฏเดฑเดพเดฃเต เด…เดคเต เดธเตผเดตเตเดตเต€เดธเต เดšเต†เดฏเตเดฏเดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต?" เด…เดŸเตเดคเตเดค เดชเดคเดฟเดชเตเดชเต เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เด’เดฐเต เดเดŸเดฟ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดจเดฟเดฐเดตเดงเดฟ เด˜เดŸเตเดŸเด™เตเด™เดณเดฟเดฒเต‚เดŸเต† เด•เดŸเดจเตเดจเตเดชเต‹เด•เตเดจเตเดจเต. เดˆ เด˜เดŸเตเดŸเด™เตเด™เดณเตเดŸเต† เดถเตƒเด‚เด–เดฒ เดฏเดพเดจเตเดคเตเดฐเดฟเด•เดฎเดพเด•เตเดฎเตเดชเต‹เตพ เด‡เดคเต เดจเดฒเตเดฒเดคเดพเดฃเต. เด’เดฐเต เดเดŸเดฟ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดคเดจเตเดจเต† เด’เดฐเต เดชเตเดคเดฟเดฏ เดชเดคเดฟเดชเตเดชเต เดชเตเดฑเดคเตเดคเดฟเดฑเด•เตเด•เตเดจเตเดจ เด“เดŸเตเดŸเต‹เดฎเต‡เดฑเตเดฑเดกเต เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเต† เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดเด•เต€เด•เดฐเดฃเด‚. เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต เดˆ เดชเตเดฐเด•เตเดฐเดฟเดฏ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดจเดฒเตเดฒ เดธเดนเดพเดฏเดฟเดฏเดพเดฏเดฟ เดฎเดพเดฑเดฟ.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดธเดพเดงเตเดฏเดคเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด’เดฐเต เด…เดตเดฒเต‹เด•เดจเด‚ เดจเตฝเด•เดพเตป เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต. เดˆ เดธเต‹เดซเตเดฑเตเดฑเตโ€Œเดตเต†เดฏเดฑเดฟเดจเต เดŽเดจเตเดคเต เด•เดดเดฟเดตเตเดฃเตเดŸเต? เด…เดตเดจเต† เดŽเด™เตเด™เดจเต† เดธเดฎเต€เดชเดฟเด•เตเด•เดพเด‚, เด…เดตเดจเตเดฎเดพเดฏเดฟ เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดซเดฒเดชเตเดฐเดฆเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจ เดฌเดจเตเดงเด‚ เดŽเด™เตเด™เดจเต† เด•เต†เดŸเตเดŸเดฟเดชเตเดชเดŸเตเด•เตเด•เดพเด‚? เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฎเต†เดทเต€เดจเดฟเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตโ€Œเดฑเตเดฑเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเดพเดฏเดฟ เด’เดฐเต เดตเตผเด•เตเด•เดฟเด‚เด—เต เดธเต‡เดตเดจเด‚ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต† เดžเด™เตเด™เดณเตเดŸเต† เด…เดจเตเดญเดตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเตเดตเดฏเด‚ เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต.

เด‰เดณเตเดณเดŸเด•เตเด•เด‚

เด‰เดณเตเดณเดŸเด•เตเด•เด‚

1. เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต BuildBot?
2. เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ เดจเดฏเดฟเด•เตเด•เตเดจเตเดจ เด†เดถเดฏเด‚
3. เด‡เตปเดธเตเดฑเตเดฑเดฒเต‡เดทเตป
4. เด†เดฆเตเดฏ เด˜เดŸเตเดŸเด™เตเด™เตพ

5. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป. เด˜เดŸเตเดŸเด‚ เด˜เดŸเตเดŸเดฎเดพเดฏเตเดณเตเดณ เดชเดพเดšเด•เด•เตเด•เตเดฑเดฟเดชเตเดชเต

5.1 เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป
5.2 เดคเตŠเดดเดฟเดฒเดพเดณเดฟเด•เตพ
5.3 change_source
5.4 เดทเต†เดกเตเดฏเต‚เดณเตผเดฎเดพเตผ

5.5 เดจเดฟเตผเดฎเตเดฎเดพเดฃ เดซเดพเด•เตเดŸเดฑเดฟ
5.6 เดจเดฟเตผเดฎเตเดฎเดพเดคเดพเด•เตเด•เตพ

6. เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด‚

6.1 เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฎเดพเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดตเดดเดฟเดฏเดฟเตฝ.cfg
6.2 svn-เตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต
6.3 เดจเดฟเด™เตเด™เตพเด•เตเด•เตเดณเตเดณ เด•เดคเตเดคเต: เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเตผเดฎเดพเตผเด•เตเด•เต เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เดพเตป เด…เดงเดฟเด•เดพเดฐเดฎเตเดฃเตเดŸเต

เดžเด™เตเด™เดณเดคเต เดšเต†เดฏเตเดคเต! เด…เดญเดฟเดจเดจเตเดฆเดจเด™เตเด™เตพ

1. เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต BuildBot?

เดฎเตเดฎเตเดชเต เดนเดฌเตเตผ-เด‡เดฏเดฟเตฝ เดžเดพเตป เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดฒเต‡เด–เดจเด™เตเด™เตพ เด•เดฃเตเดŸเดฟเดฐเตเดจเตเดจเต เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดเด•เต€เด•เดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด‡เดคเต เดžเดพเตป เด…เดคเต เดเดฑเตเดฑเดตเตเด‚ เดตเดฟเดœเตเดžเดพเดจเดชเตเดฐเดฆเดฎเดพเดฏเดฟ เด•เดฃเตเดŸเต†เดคเตเดคเดฟ. เดฎเดฑเตเดฑเตŠเดฐเต เด‰เดฆเดพเดนเดฐเดฃเดฎเตเดฃเตเดŸเต - เดฒเดณเดฟเดคเด‚. เดˆ เดฒเต‡เด–เดจเด™เตเด™เตพ เดคเดพเดณเดฟเด•เตเด•เดพเด‚ เดฎเดพเดจเตเดตเดฒเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด‰เดฆเดพเดนเดฐเดฃเด‚เด’เดชเตเดชเด‚ เด…เดคเต เด…เดคเดฟเดจเตเดถเต‡เดทเด‚, เด‡เด‚เด—เตเดฒเต€เดทเดฟเตฝ. เด•เต‚เดชเตเดชเต† เด’เดฐเต เดจเดฒเตเดฒ เดคเตเดŸเด•เตเด•เด‚ เดจเตฝเด•เตเดจเตเดจเต. เดˆ เดฒเต‡เด–เดจเด™เตเด™เตพ เดตเดพเดฏเดฟเดšเตเดšเตเด•เดดเดฟเดžเตเดžเดพเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเต†เดŸเตเดŸเต†เดจเตเดจเต เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเตเด‚ เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด•.

เดจเดฟเตผเดคเตเดคเตเด•! เด†เดฐเต†เด™เตเด•เดฟเดฒเตเด‚ เด…เดคเต เด…เดตเดฐเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดŸเตเด•เดณเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต‹? เด…เดคเต† เดŽเดจเตเดจเต เดฎเดพเดฑเตเดจเตเดจเต เดจเดฟเดฐเดตเดงเดฟ เด…เดคเต เด…เดตเดฐเตเดŸเต† เดœเต‹เดฒเดฟเด•เดณเดฟเตฝ เดชเตเดฐเดฏเต‹เด—เดฟเดšเตเดšเต. เด•เดฃเตเดŸเตเดชเดฟเดŸเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ ะธัะฟะพะปัŒะทะพะฒะฐะฝะธั เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต เด•เต‚เดŸเดพเดคเต† Google เด•เต‹เดกเต เด†เตผเด•เตเด•เตˆเดตเตเด•เดณเดฟเดฒเตเด‚.

เด…เดชเตเดชเต‹เตพ เด†เดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตปเดฑเต† เดฏเตเด•เตเดคเดฟ เดŽเดจเตเดคเดพเดฃเต เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต? เดŽเดฒเตเดฒเดพเดคเตเดคเดฟเดจเตเดฎเตเดชเดฐเดฟ, เดฎเดฑเตเดฑเต เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ เด‰เดฃเตเดŸเต: เด•เตเดฐเต‚เดฏเดฟเดธเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด‚ ะธ เดœเต†เด™เตเด•เดฟเตปเดธเต. เดžเดพเตป เดˆ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด‰เดคเตเดคเดฐเด‚ เดจเตฝเด•เตเด‚. เดฎเดฟเด•เตเด• เดœเต‹เดฒเดฟเด•เตพเด•เตเด•เตเด‚ เดœเต†เด™เตเด•เดฟเตปเดธเต เดธเดคเตเดฏเด‚ เดฎเดคเดฟเดฏเดพเด•เตเด‚. เด…เดคเดพเด•เดŸเตเดŸเต†, เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต - เด•เต‚เดŸเตเดคเตฝ เด…เดกเดพเดชเตเดฑเตเดฑเต€เดตเต, เด…เดคเต‡เดธเดฎเดฏเด‚ เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เตพ เด…เดตเดฟเดŸเต† เด‰เดณเตเดณเดคเตเดชเต‹เดฒเต† เดคเดจเตเดจเต† เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚ เดœเต†เด™เตเด•เดฟเตปเดธเต. เดคเต€เดฐเตเดฎเดพเดจเด‚ เดจเดฟเดจเตเดฑเต‡เดคเดพเดฃเต. เดŽเดจเตเดจเดพเตฝ เดตเดฟเด•เดธเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดŸเดพเตผเด—เต†เดฑเตเดฑเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เด’เดฐเต เดŸเต‚เดณเดฟเดจเดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดจเตเดจเดคเดฟเดจเดพเตฝ, เด‡เดจเตเดฑเดฑเดพเด•เตเดฑเตเดฑเดฟเดตเดฟเดฑเตเดฑเดฟเดฏเตเด‚ เด…เดคเตเดฒเตเดฏเดฎเดพเดฏ เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด‚ เด‰เดณเตเดณ เด’เดฐเต เดฌเดฟเตฝเดกเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฒเดณเดฟเดคเดฎเดพเดฏ เด˜เดŸเตเดŸเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจ เด’เดจเตเดจเต เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเตเด•เต‚เดŸเดพ.

เดŸเดพเตผเด—เต†เดฑเตเดฑเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดชเตˆเดคเตเดคเดฃเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดตเตผเด•เตเด•เต, เดšเต‹เดฆเตเดฏเด‚ เด‰เดฏเตผเดจเตเดจเตเดตเดฐเตเดจเตเดจเต: "เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดญเดพเดทเดฏเตเดŸเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดคเตเดคเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เด‡เดจเตเดฑเตผเดซเต‡เดธเต เด‰เดณเตเดณ เด’เดฐเต เด‡เดจเตเดฑเด—เตเดฐเต‡เดทเตป เดธเดฟเดธเตเดฑเตเดฑเด‚ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดคเตเดคเตเด•เต‚เดŸเดพ?" เด‡เดชเตเดชเต‹เตพ เดจเต‡เดŸเตเดŸเด™เตเด™เตพ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดธเดฎเดฏเดฎเดพเดฃเต เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต.

เด…เดคเดฟเดจเดพเตฝ, เดžเด™เตเด™เดณเตเดŸเต† "เด‡เตปเดธเตเดŸเตเดฐเตเดฎเต†เดจเตเดฑเตฝ เด•เตเดตเดพเตผเดŸเตเดŸเดฑเตเดฑเต". เดŽเดจเตเดจเต† เดธเด‚เดฌเดจเตเดงเดฟเดšเตเดšเดฟเดŸเดคเตเดคเต‹เดณเด‚, เดžเดพเตป เดจเดพเดฒเต เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดžเตเดžเต เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต:

  1. เด‡เดคเต GPL เดฒเตˆเดธเตปเดธเดฟเดจเต เด•เต€เดดเดฟเดฒเตเดณเตเดณ เด’เดฐเต เด“เดชเตเดชเตบ เดธเต‹เดดเตโ€Œเดธเต เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเดพเดฃเต
  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 # ะกะพะฑัั‚ะฒะตะฝะฝะพ ัะดะตััŒ ะธ ัะพะทะดะฐะตะผ

เด…เดŸเตเดคเตเดค เดชเดŸเดฟ. เดจเดฎเตเด•เตเด•เต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚ เดคเตŠเดดเดฟเดฒเดพเดณเดฟ. เด…เดคเต เดจเดฎเตเดฎเตเดŸเต† เดซเต‹เตพเดกเดฑเดฟเตฝ เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ /เดตเต€เดŸเต/เดนเดพเดฌเตเตผ/เดคเตŠเดดเดฟเดฒเดพเดณเดฟ.

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

เดจเดฟเด™เตเด™เตพ เด“เดŸเตเดฎเตเดชเต‹เตพ เดคเตŠเดดเดฟเดฒเดพเดณเดฟ, เดคเตเดŸเตผเดจเตเดจเต เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เด…เดคเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด‚ /เดตเต€เดŸเต/เดนเดพเดฌเตเตผ/เดคเตŠเดดเดฟเดฒเดพเดณเดฟ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดชเต‡เดฐเตเดณเตเดณ เดซเต‹เตพเดกเตผ, เด…เดคเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต master.cfg. เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดชเต‡เดฐเตเดณเตเดณ เดซเต‹เตพเดกเดฑเดฟเตฝ เด…เดคเต เด’เดฐเต เดกเดฏเดฑเด•เตเดŸเดฑเดฟ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด‚ เดชเดฃเดฟเดฏเตเด•, เด…เดคเต เดคเตเดŸเตผเดจเตเดจเตเด‚ เดšเต†เดฏเตเดฏเตเด‚ เดšเต†เด•เตเด•เต เด”เดŸเตเดŸเต. เดตเตผเด•เตเด•เดฟเด‚เด—เต เดกเดฏเดฑเด•เตเดŸเดฑเดฟ เดคเตŠเดดเดฟเดฒเดพเดณเดฟ-เด…เดคเต เด’เดฐเต เดกเดฏเดฑเด•เตเดŸเดฑเดฟ เด†เดฏเดฟ เดฎเดพเดฑเตเด‚ /home/habr/yourProject/build.

"เด—เต‹เตพเดกเตป เด•เต€
เด‡เดชเตเดชเต‹เตพ เดžเดพเตป เดฎเตเตป เด–เดฃเตเดกเดฟเด• เดŽเดดเตเดคเดฟเดฏเดคเต: เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดฏเดœเดฎเดพเดจเดจเต เดฎเตเดคเตฝ เด†เดตเดถเตเดฏเดชเตเดชเต†เดŸเตเด‚ เดคเตŠเดดเดฟเดฒเดพเดณเดฟ- เด•เต‚เดŸเดพเดคเต† เดˆ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเตฝ เดตเดฟเดฆเต‚เดฐเดฎเดพเดฏเดฟ เดšเต†เดฏเตโ€Œเดคเดคเต เดŽเด•เตโ€Œเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚ เดธเตโ€Œเด•เตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดจเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด…เดจเตเดฎเดคเดฟเดฏเดฟเดฒเตเดฒ. เดธเดพเดนเดšเดฐเตเดฏเด‚ เดถเดฐเดฟเดฏเดพเด•เตเด•เดพเตป, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด•เต€ เด†เดตเดถเตเดฏเดฎเดพเดฃเต --umask=0o22, เดˆ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเตฝ เดŽเดดเตเดคเตเดจเตเดจเดคเต เดจเดฟเดฐเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต, เดŽเดจเตเดจเดพเตฝ เดฒเต‹เดžเตเดšเต เด…เดตเด•เดพเดถเด™เตเด™เตพ เดจเดฟเดฒเดจเดฟเตผเดคเตเดคเตเด‚. เดชเดฟเดจเตเดจเต† เด…เดคเตเดฐเดฏเต‡ เดตเต‡เดฃเตเดŸเต‚.

เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ ะธ เดคเตŠเดดเดฟเดฒเดพเดณเดฟ เดชเดฐเดธเตเดชเดฐเด‚ เดฌเดจเตเดงเด‚ เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเด•. เด…เดคเต เดคเด•เดฐเตเด•เดฏเตเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดคเตŠเดดเดฟเดฒเดพเดณเดฟ เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เด•เตเดฑเดšเตเดšเต เดธเดฎเดฏเด‚ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ-เดŽ. เดชเตเดฐเดคเดฟเด•เดฐเดฃเดฎเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด•เดฃเด•เตเดทเตป เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด‚. เดคเดพเด•เตเด•เต‹เตฝ --keepalive=60 เด…เดคเดฟเดจเต เดถเต‡เดทเดฎเตเดณเตเดณ เดธเดฎเดฏเด‚ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต เด•เดฃเด•เตเดŸเต เดฑเต€เดฌเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

5. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป. เด˜เดŸเตเดŸเด‚ เด˜เดŸเตเดŸเดฎเดพเดฏเตเดณเตเดณ เดชเดพเดšเด•เด•เตเด•เตเดฑเดฟเดชเตเดชเต

เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ เดžเด™เตเด™เตพ เด•เดฎเดพเตปเดกเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดค เดฎเต†เดทเต€เดจเตเดฑเต† เดตเดถเดคเตเดคเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•-เดฎเดพเดธเตเดฑเตเดฑเตผ. เดžเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด‡เดคเตŠเดฐเต เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดพเดฃเต /home/habr/master. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ master.cfg เด‡เดคเตเดตเดฐเต† เดจเดฟเดฒเดตเดฟเดฒเดฟเดฒเตเดฒ, เดชเด•เตเดทเต‡ เด•เดฎเดพเตปเดกเต เด‡เดคเดฟเดจเด•เด‚ เดคเดจเตเดจเต† เดซเดฏเตฝ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต master.cmg.เดธเดพเดฎเตเดชเดฟเตพ. เดจเดฟเด™เตเด™เตพ เด…เดคเดฟเดจเตเดฑเต† เดชเต‡เดฐเต เดฎเดพเดฑเตเดฑเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต 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 = {} 

เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป - เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเดฟเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจ เดจเดฟเด˜เดฃเตเดŸเต. เด‡เดคเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เด‰เดชเดฏเต‹เด—เดคเตเดคเดฟเดจเตเดฑเต† เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเดจเดพเดฏเดฟ, เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด•เต‹เดกเดฟเตฝ เด’เดฐเต เด…เดชเดฐเดจเดพเดฎเด‚ เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต "เดธเดฟ". เดถเต€เตผเดทเด•เด™เตเด™เตพ เด•เต€เด•เดณเตเดŸเต† ะฒ c["เด•เต€เดซเตเดฐเด‚เดกเดฟเดธเตเดฑเตเดฑเต"] เด‡เดตเดฏเตเดฎเดพเดฏเดฟ เด‡เดŸเดชเดดเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดฟเดถเตเดšเดฟเดค เด˜เดŸเด•เด™เตเด™เดณเดพเดฃเต เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ. เด“เดฐเต‹ เด•เต€เดฏเตโ€Œเด•เตเด•เตเด‚, เด…เดจเตเดฌเดจเตเดง เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเต เด’เดฐเต เดฎเต‚เดฒเตเดฏเดฎเดพเดฏเดฟ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต.

5.2 เดคเตŠเดดเดฟเดฒเดพเดณเดฟเด•เตพ

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

เดˆ เดธเดฎเดฏเด‚ เดžเด™เตเด™เตพ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ-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 เดธเด‚เดญเดฐเดฟเด•เตเด•เตเด‚.

เดถเดพเด– เดชเดฟเดจเตเดคเตเดŸเดฐเต‡เดฃเตเดŸ เดถเต‡เด–เดฐเดคเตเดคเดฟเตฝ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดถเดพเด– เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดชเตเดชเต เด‡เดŸเดตเต‡เดณ เด…เดคเดฟเดจเต เดถเต‡เดทเดฎเตเดณเตเดณ เดธเต†เด•เตเด•เตปเดกเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ เดฎเดพเดฑเตเดฑเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดถเต‡เด–เดฐเดคเตเดคเดฟเตฝ เดตเต‹เดŸเตเดŸเต†เดŸเตเดชเตเดชเต เดจเดŸเดคเตเดคเตเด‚.

เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดถเต‡เด–เดฐเดคเตเดคเดฟเตฝ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดŸเตเดฐเดพเด•เตเด•เตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต เดจเดฟเดฐเดตเดงเดฟ เดฎเดพเตผเด—เด™เตเด™เดณเตเดฃเตเดŸเต.

เดเดฑเตเดฑเดตเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ เดฐเต€เดคเดฟเดฏเดพเดฃเต เดตเต‹เดŸเตเดŸเต†เดŸเตเดชเตเดชเต, เด…เดคเต เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ เด‡เดŸเดฏเตเด•เตเด•เดฟเดŸเต† เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเต†เตผเดตเดฑเดฟเดจเต† เดตเต‹เดŸเตเดŸเต†เดŸเตเดชเตเดชเต เดจเดŸเดคเตเดคเตเดจเตเดจเต. เดŽเด™เตเด•เดฟเตฝ เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เตเด• เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเดฒเต† เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดชเตเดฐเดคเดฟเดซเดฒเดฟเดชเตเดชเดฟเดšเตเดšเต เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ เด•เตเดฑเดšเตเดšเต เด•เดพเดฒเดคเดพเดฎเดธเดคเตเดคเต‹เดŸเต† เด’เดฐเต เด†เดจเตเดคเดฐเดฟเด• เดตเดธเตเดคเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด‚ เดฎเดพเดฑเตเดฑเด‚ เด•เต‚เดŸเดพเดคเต† เด‡เดตเดจเตเดฑเต เดนเดพเตปเดกเตโ€Œเดฒเตผเด•เตเด•เต เด…เดฏเดฏเตโ€Œเด•เตเด•เตเด• เดทเต†เดกเตเดฏเต‚เดณเตผ, เด‡เดคเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดจเดŸเดชเดŸเดฟเด•เตพ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด‚ เดคเตŠเดดเดฟเดฒเดพเดณเดฟ-เด‡. เดˆ เด˜เดŸเตเดŸเด™เตเด™เดณเดฟเตฝ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚ เด…เดชเตเดกเต‡เดฑเตเดฑเต เดธเด‚เดญเดฐเดฃเดฟเดฏเดพเดฃเต. เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เด“เดฃเดพเดฃเต เดคเตŠเดดเดฟเดฒเดพเดณเดฟเด‡เดคเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเตเดŸเต† เด’เดฐเต เดชเตเดฐเดพเดฆเต‡เดถเดฟเด• เดชเด•เตผเดชเตเดชเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด‚. เดˆ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเดŸเต† เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เด…เดŸเตเดคเตเดค เดฐเดฃเตเดŸเต เดตเดฟเดญเดพเด—เด™เตเด™เดณเดฟเตฝ เดšเตเดตเดŸเต† เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเด‚. (5.4 ะธ 5.5).

เด’เดฐเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเดฒเต† เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดŸเตเดฐเดพเด•เตเด•เตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด…เดคเดฟเดฒเตเด‚ เด—เด‚เดญเต€เดฐเดฎเดพเดฏ เดฎเดพเตผเด—เตเด—เด‚, เด…เดคเต เดนเต‹เดธเตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจ เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเต‡เดฐเดฟเดŸเตเดŸเต เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต. เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ- เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเต‹เดดเตเดธเต เด•เต‹เดกเตเด•เตพ เดฎเดพเดฑเตเดฑเตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดกเดตเดฒเดชเตเดชเตผ เด‰เดฃเตเดŸเดพเด•เตเด•เดฟเดฏ เด‰เดŸเตป เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เตเด•, เดชเตเดฐเตŠเดœเด•เตเดฑเตเดฑเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ เด‰เดณเตเดณ เดธเต†เตผเดตเตผ เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เด…เดฏเดฏเตเด•เตเด•เตเด‚ เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ-เดตเตˆ. เด’เดฐเต เดตเดธเตเดคเต เดธเตƒเดทเตเดŸเดฟเดšเตเดšเตเด•เตŠเดฃเตเดŸเต เด…เดตเตป เด…เดคเดฟเดจเต† เดคเดŸเดธเตเดธเดชเตเดชเต†เดŸเตเดคเตเดคเตเด‚ PBCchangeSource. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดˆ เด’เดฌเตเดœเด•เตเดฑเตเดฑเต เด‡เดคเดฟเดฒเต‡เด•เตเด•เต เด•เตˆเดฎเดพเดฑเตเด‚ เดทเต†เดกเตเดฏเต‚เดณเตผ, เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เด…เดคเต เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดจเดŸเดชเดŸเดฟเด•เตพ เดธเดœเต€เดตเดฎเดพเด•เตเด•เตเดจเตเดจเต. เดˆ เดฐเต€เดคเดฟเดฏเตเดŸเต† เด’เดฐเต เดชเตเดฐเดงเดพเดจ เดญเดพเด—เด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต เด•เต†เดพเดณเตเดคเตเดคเต-เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเดฒเต† เดธเต†เตผเดตเตผ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ. เดคเดฟเดฐเด•เตเด•เดฅเดฏเดฟเตฝ เด•เต†เดพเดณเตเดคเตเดคเต-a, เดŽเดชเตเดชเต‹เตพ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพเด•เตเด•เต เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟ เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เตเด•-เด‡, เดจเดฟเด™เตเด™เตพ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเดฏเต† เดตเดฟเดณเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต เด…เดฏเด•เตเด•เตเด• เด•เต‚เดŸเดพเดคเต† เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดตเดฟเดฒเดพเดธเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเด• เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ-เดŽ. เด•เต‡เตพเด•เตเด•เตเดจเตเดจ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดชเต‹เตผเดŸเตเดŸเตเด‚ เดจเดฟเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต PBCchangeSource. PBCchangeSource, เดตเดดเดฟ, เดญเดพเด—เดฎเดพเดฃเต เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ-เดŽ. เดˆ เดฐเต€เดคเดฟเด•เตเด•เต เด…เดจเตเดฎเดคเดฟ เด†เดตเดถเตเดฏเดฎเดพเดฃเต เด…เดกเตเดฎเดฟเตป-เดŽ เดชเตเดฐเตŠเดœเด•เตเดฑเตเดฑเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟ เดธเตเดฅเดฟเดคเดฟ เดšเต†เดฏเตเดฏเตเดจเตเดจ เดธเต†เตผเดตเดฑเดฟเตฝ. เดจเดฟเด™เตเด™เตพ เด†เดฆเตเดฏเด‚ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเตเดŸเต† เด’เดฐเต เดฌเดพเด•เตเด•เดชเตเดชเต เด‰เดฃเตเดŸเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

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 เด•เดทเดฃเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต. เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เด“เดฐเต‹เดจเตเดจเดฟเดจเตเด‚ เด…เดคเดฟเดจเตเดฑเต‡เดคเดพเดฏ เดคเดฐเดฎเตเดฃเตเดŸเต.

เดธเดฟเด‚เด—เดฟเตพเดฌเตเดฐเดพเดžเตเดšเต เดทเต†เดกเตเดฏเต‚เดณเตผ - เดทเต†เดกเตเดฏเต‚เดณเดฟเดฒเต† เดเดฑเตเดฑเดตเตเด‚ เดœเดจเดชเตเดฐเดฟเดฏเดฎเดพเดฏ เด•เตเดฒเดพเดธเตเด•เดณเดฟเตฝ เด’เดจเตเดจเต. เด‡เดคเต เด’เดฐเต เดถเดพเด– เดจเดฟเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเดฟเตฝ เดฐเต‡เด–เดชเตเดชเต†เดŸเตเดคเตเดคเดชเตเดชเต†เดŸเตเดŸ เดฎเดพเดฑเตเดฑเดคเตเดคเดพเตฝ เดŸเตเดฐเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เด•เดพเดฃเตเดฎเตเดชเต‹เตพ, เดฌเดฟเตฝเดกเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดฏเตโ€Œเด•เตเด•เตเดจเตเดจเดคเต เด…เดตเดจเต เด•เดพเดฒเดคเดพเดฎเดธเด‚ เดตเดฐเตเดคเตเดคเดพเด‚ (เดชเตเดฐเดคเตเดฏเต‡เด• เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏ เด•เดพเดฒเดฏเดณเดตเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเดฟเดตเดฏเตเด•เตเด•เตเด• เดŸเตเดฐเต€เดธเตเดฑเตเดฑเดฌเดฟเตพ เดŸเตˆเดฎเตผ) AT เดชเต‡เดฐเต เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจ เดทเต†เดกเตเดฏเต‚เดณเดฟเดจเตเดฑเต† เดชเต‡เดฐเต เดธเดœเตเดœเดฎเดพเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต-เดตเต†เดฌเต เด‡เดจเตเดฑเตผเดซเต‡เดธเต. IN เดฎเดพเดฑเตเดฑเตเด• เดซเดฟเตฝเดฑเตเดฑเตผ เด’เดฐเต เดซเดฟเตฝเดŸเตเดŸเตผ เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เดชเดพเดธเดพเดฏเดคเดฟเดจเต เดถเต‡เดทเด‚ เดฌเตเดฐเดพเดžเตเดšเดฟเดฒเต† เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดจเดฟเตผเดฎเตเดฎเดพเดฃเดคเตเดคเดฟเดจเดพเดฏเดฟ เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดฏเตเด•เตเด•เดพเตป เดทเต†เดกเตเดฏเต‚เตพ เด†เดตเดถเตเดฏเดชเตเดชเต†เดŸเตเดจเตเดจเต. IN เดฌเดฟเตฝเดกเตผ เดชเต‡เดฐเตเด•เตพ เดชเต‡เดฐเต เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตผ-a, เด…เดคเต เดžเด™เตเด™เตพ เด•เตเดฑเดšเตเดšเต เด•เดดเดฟเดžเตเดžเต เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด‚. เดžเด™เตเด™เดณเตเดŸเต† เด•เต‡เดธเดฟเดฒเต† เดชเต‡เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดจเดพเดฎเดคเตเดคเดฟเดจเต เดธเดฎเดพเดจเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚: เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเดฆเตเดงเดคเดฟ.

เดซเต‹เดดเตเดธเต เดทเต†เดกเตเดฏเต‚เดณเตผ เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเดฏ เด’เดฐเต เด•เดพเดฐเตเดฏเด‚. เด’เดฐเต เดฎเต—เดธเต เด•เตเดฒเดฟเด•เตเด•เดฟเดฒเต‚เดŸเต†เดฏเดพเดฃเต เด‡เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดทเต†เดกเตเดฏเต‚เตพ เดŸเตเดฐเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต-เดตเต†เดฌเต เด‡เดจเตเดฑเตผเดซเต‡เดธเต. เดชเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพเด•เตเด•เตเดณเตเดณ เด…เดคเต‡ เดธเดพเดฐเดพเด‚เดถเด‚ เด‰เดฃเตเดŸเต เดธเดฟเด‚เด—เดฟเตพเดฌเตเดฐเดพเดžเตเดšเต เดทเต†เดกเตเดฏเต‚เดณเตผ.

PS เดจเดฎเตเดชเตผ 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": "."}))

เดชเต€เดฐเดฟเดฏเต‹เดกเดฟเด•เต เดฌเดฟเตฝเดกเต เดŸเตˆเดฎเตผ เดธเต†เด•เตเด•เตปเดกเดฟเตฝ เดˆ เด†เดตเตผเดคเตเดคเดจเดคเตเดคเดฟเดจเตเดฑเต† เดธเดฎเดฏเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต.

เดฌเดฟเตฝเดกเตเดซเดพเด•เตเดŸเดฑเดฟ เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต เดชเดฃเดฟเดฏเตเด•, เด…เดชเตเดชเต‹เตพ เดเดคเต เดฌเดฟเตฝเดกเตผ เดฒเต‡เด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต เดคเตŠเดดเดฟเดฒเดพเดณเดฟ. เดฆเดฟ เดฌเดฟเตฝเดกเตเดซเดพเด•เตเดŸเดฑเดฟ เดชเดฟเดจเตเดคเตเดŸเดฐเต‡เดฃเตเดŸ เด˜เดŸเตเดŸเด™เตเด™เดณเต† เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต เดคเตŠเดดเดฟเดฒเดพเดณเดฟ-เดตเตˆ. เดฐเต€เดคเดฟ เดตเดฟเดณเดฟเดšเตเดšเต เด˜เดŸเตเดŸเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต addStep

เดˆ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ เดšเต‡เตผเดคเตเดค เด†เดฆเตเดฏ เด˜เดŸเตเดŸเด‚ เด‡เดคเดพเดฃเต git clean -d -f -f โ€“x, เดชเดฟเดจเตเดจเต† git เดšเต†เด•เตเด•เต out เดŸเตเดŸเต. เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดชเดฐเดพเดฎเต€เดฑเตเดฑเดฑเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต เดฐเต€เดคเดฟ, เด‡เดคเต เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดชเตเดฐเดธเตเดคเดพเดตเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเดฒเตเด‚ เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เดฎเต‚เดฒเตเดฏเดคเตเดคเต† เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต เดชเตเดคเดฟเดฏเดคเต. เดชเดฐเดพเดฎเต€เดฑเตเดฑเตผ เดฎเต‹เดกเต='เด‡เตปเด•เตเดฐเดฟเดฎเต†เดจเตเดฑเตฝ' เดซเดฏเดฒเตเด•เตพ เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณเดคเดพเดฃเต†เดจเตเดจเต เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต chechout, เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดจเดทเตโ€ŒเดŸเดชเตเดชเต†เดŸเตเดฎเตเดชเต‹เตพ, เดคเตŠเดŸเตเดŸเตเด•เต‚เดŸเดพเดคเต† เดคเตเดŸเดฐเตเด•.

เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เดšเต‡เตผเดคเตเดค เด˜เดŸเตเดŸเด‚ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดตเดฟเดณเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดตเดฟเดšเดพเดฐเดฃ เดชเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดนเดฒเต‡เดพ เดตเดถเดคเตเดคเต เดคเตŠเดดเดฟเดฒเดพเดณเดฟ-เดŽ เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต /home/habr/worker/yourProject/build เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดพเดฏ PATHONPATH=... เด…เด™เตเด™เดจเต†, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดŽเดดเตเดคเดฟ เดธเตˆเดกเดฟเตฝ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเด‚ เดคเตŠเดดเดฟเดฒเดพเดณเดฟ- เด“เดฐเต‹ เด˜เดŸเตเดŸเดตเตเด‚ util.ShellCommand. เดˆ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดจเต‡เดฐเดฟเดŸเตเดŸเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ เดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต. เด…เดชเตเดชเต‹เตพ at chechout-เด‡ เด…เดตเตผ เด…เดคเดฟเตฝ เดตเต€เดดเตเด‚ /home/habr/worker/yourProject/build. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดฐเดฃเตเดŸเต "เดชเด•เตเดทเต‡" เด‰เดฃเตเดŸเต:

  1. เดคเตŠเดดเดฟเดฒเดพเดณเดฟ เด’เดฐเต เด•เต€ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดฃเด‚ --เด‰เดฎเดพเดธเตเด•เต เด…เดคเตเดตเดดเดฟ เด…เดคเต เดจเดฟเตผเดตเตเดตเดนเดฃ เด…เดตเด•เดพเดถเด™เตเด™เตพ เดคเดŸเดฏเดฟเดฒเตเดฒ เดšเต†เด•เตเด•เต เด”เดŸเตเดŸเต-เดŽ.
  2. เดšเต†เดฏเตเดคเดคเต git pushเดˆ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เดณเดฟเตฝ -e เดจเดฟเด™เตเด™เตพ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเดฌเดฟเตพเด…เด™เตเด™เดจเต† เดชเดฟเดจเตเดจเต€เดŸเต chechoutGit เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเดจเตเดณเตเดณ เด…เดตเด•เดพเดถเด‚ -e เดจเดทเตโ€ŒเดŸเดชเตเดชเต†เดŸเตเดŸเดฟเดฒเตเดฒ.

5.6 เดจเดฟเตผเดฎเตเดฎเดพเดคเดพเด•เตเด•เตพ


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

เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดจเดฟเดฐเตเดฎเตเดฎเดพเดคเดพเดตเต เดชเดฑเดžเตเดžเดฟเดฐเตเดจเตเดจเต เด‡เดตเดฟเดŸเต†. เด‡เดคเต เดŽเด™เตเด™เดจเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด‡เดชเตเดชเต‹เตพ เดžเดพเตป เดจเดฟเด™เตเด™เดณเต‹เดŸเต เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดชเดฑเดฏเตเด‚. เดฌเดฟเตฝเดกเตผ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด’เดฐเต เด•เตบเดธเตเดŸเตเดฐเด•เตเดฑเตเดฑเตผ เด†เดฃเต เดฌเดฟเตฝเดกเตผ. เด…เดคเตเดคเดฐเด‚ เดกเดฟเดธเตˆเดจเตผเดฎเดพเตผ c['เดจเดฟเตผเดฎเตเดฎเดพเดคเดพเด•เตเด•เตพ'] เด‡เดคเต เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเตเด•เดณเตเดŸเต† เด’เดฐเต เดทเต€เดฑเตเดฑเต เด†เดฏเดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดฒเดคเตเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ เดฌเดฟเตฝเดกเตผ เดคเดฐเด‚. เด‡เดจเดฟ เดจเดฎเตเด•เตเด•เต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดตเต€เดฃเตเดŸเตเด‚ เดŽเดดเตเดคเดพเด‚ เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต, เด…เดคเดฟเดจเต† เดจเดฎเตเดฎเตเดŸเต† เดšเตเดฎเดคเดฒเดฏเดฟเดฒเต‡เด•เตเด•เต เด…เดŸเตเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.


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

เด‡เดชเตเดชเต‹เตพ เดžเดพเตป เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดชเดฑเดฏเตเด‚ เดฌเดฟเตฝเดกเตผ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป.

เดชเต‡เดฐเต เดชเต‡เดฐเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตผ-เดŽ. เด‡เดตเดฟเดŸเต† เดžเด™เตเด™เตพ เด…เดคเดฟเดจเต เดชเต‡เดฐเดฟเดŸเตเดŸเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเดฆเตเดงเดคเดฟ... เด‡เดคเดฟเดจเตผเดคเตเดฅเด‚ เด“เตบ เดŽเดจเตเดจเดพเดฃเต เดคเตŠเดดเดฟเดฒเดพเดณเดฟ- เดˆ เดชเดพเดค เดคเดจเตเดจเต† เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚ /home/habr/worker/yourProject/build. เดทเต†เดกเตเดฏเต‚เดณเตผ เด‡เดคเดฟเดจเดพเดฏเดฟ เดคเดฟเดฐเดฏเตเดจเตเดจเต เดฌเดฟเตฝเดกเตผ เดˆ เดชเต‡เดฐเดฟเตฝ เดฎเดพเดคเตเดฐเด‚.

เดคเตŠเดดเดฟเดฒเดพเดณเดฟเด•เดณเตเดŸเต† เดชเต‡เดฐเตเด•เตพ เดทเต€เดฑเตเดฑเต เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดคเตŠเดดเดฟเดฒเดพเดณเดฟ-เดŽเดธเต. เด…เดคเดฟเตฝ เด“เดฐเต‹เดจเตเดจเตเด‚ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เดฃเด‚ c['เดคเตŠเดดเดฟเดฒเดพเดณเดฟเด•เตพ'].

เดซเดพเด•เตเดŸเดฑเดฟ - เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดชเดฃเดฟเดฏเตเด•, เด…เดคเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตผ. เด…เดตเตป เดตเดธเตเดคเต เด…เดฏเดฏเตเด•เตเด•เตเด‚ เดชเดฃเดฟเดฏเตเด• เด“เตบ เดคเตŠเดดเดฟเดฒเดพเดณเดฟ เด‡เดคเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดŽเดฒเตเดฒเดพ เด˜เดŸเตเดŸเด™เตเด™เดณเตเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดพเตป เดชเดฃเดฟเดฏเตเด•-เดŽ.

6. เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด‚

เดตเดดเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เดžเดพเตป เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เด†เตผเด•เตเด•เดฟเดŸเต†เด•เตเดšเดฑเดฟเดจเตเดฑเต† เด‰เดฆเดพเดนเดฐเดฃเด‚ เด‡เดคเดพ เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต
.

เดžเด™เตเด™เตพ เด’เดฐเต เดชเดคเดฟเดชเตเดชเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚ svn. เดถเต‡เด–เดฐเด‚ เดคเดจเตเดจเต† เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เด•เตเดฒเต—เดกเดฟเตฝ เดธเตเดฅเดฟเดคเดฟเดšเต†เดฏเตเดฏเตเด‚. เดˆ เดฎเต‡เด˜เดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดฒเดพเดธเด‚ เด‡เดคเดพ svn.host/svn/yourProject/trunk. เดคเดพเดดเต† เดฎเต‡เด˜เดคเตเดคเดฟเตฝ svn เด’เดฐเต เด…เด•เตเด•เต—เดฃเตเดŸเต เด‰เดชเดฏเต‹เด•เตเดคเตƒเดจเดพเดฎเด‚ เด‰เดฃเตเดŸเต: เด‰เดชเดฏเต‡เดพเด•เตเดคเดพเดตเต, เดชเดพเดธเตเดตเต‡เดกเต: เดชเดพเดธเตเดตเต‡เดกเต. เด˜เดŸเตเดŸเด™เตเด™เดณเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดชเดฃเดฟเดฏเตเด•-a เดถเดพเด–เดฏเดฟเดฒเตเด‚ เด‰เดฃเตเดŸเดพเด•เตเด‚ svn, เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดซเต‹เตพเดกเดฑเดฟเตฝ buildbot/worker_linux. เดˆ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเตเด•เตพ เดธเด‚เดฐเด•เตเดทเดฟเดšเตเดš เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟ เด‰เดณเตเดณ เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ เดธเตเดฅเดฟเดคเดฟเดšเต†เดฏเตเดฏเตเดจเตเดจเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเดฌเดฟเตพ.

เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ ะธ เดคเตŠเดดเดฟเดฒเดพเดณเดฟ เด’เดฐเต‡ เดนเต‹เดธเตเดฑเตเดฑเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด• project.host .เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ เด…เดคเดฟเดจเตเดฑเต† เดซเดฏเดฒเตเด•เตพ เด’เดฐเต เดซเต‹เตพเดกเดฑเดฟเตฝ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต /home/habr/master. เดคเตŠเดดเดฟเดฒเดพเดณเดฟ เด…เดคเต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเดพเดคเดฏเดฟเตฝ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต /เดตเต€เดŸเต/เดนเดพเดฌเตเตผ/เดคเตŠเดดเดฟเดฒเดพเดณเดฟ. เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏเด‚ เดจเดŸเดคเตเดคเตเด• เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ-เดŽ เด’เดชเตเดชเด‚ เดคเตŠเดดเดฟเดฒเดพเดณเดฟ-a เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เดชเต‹เตผเดŸเตเดŸเต 4000 เดตเดดเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต-เดŽ, เด…เดคเดพเดฏเดคเต 'pb' เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ.

เดŸเดพเตผเด—เต†เดฑเตเดฑเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดชเตˆเดคเตเดคเดฃเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด…เดคเดฟเดจเตเดฑเต† เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดŸเตเดฐเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•, เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเดฌเดฟเตพ เดซเดฏเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•, เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•, เดชเดฐเดฟเดถเต‹เดงเดจ เดจเดŸเดคเตเดคเตเด• เดŽเดจเตเดจเดฟเดตเดฏเดพเดฃเต เดšเตเดฎเดคเดฒ. เดชเดฐเดพเดœเดฏเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดŽเดฒเตเดฒเดพ เดกเต†เดตเดฒเดชเตเดชเตผเดฎเดพเดฐเตเด‚ เด’เดฐเต เดชเดฐเดพเดœเดฏเดชเตเดชเต†เดŸเตเดŸ เดจเดŸเดชเดŸเดฟเดฏเตเดฃเตเดŸเต†เดจเตเดจเต เดชเตเดฐเดธเตเดคเดพเดตเดฟเด•เตเด•เตเดจเตเดจ เด‡เดฎเต†เดฏเดฟเตฝ เดตเดดเดฟ เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เด…เดฏเดฏเตโ€Œเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดตเต†เดฌเต เดกเดฟเดธเตเดชเตเดฒเต‡ เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต เด‡เดคเดฟเดจเดพเดฏเดฟ เดžเด™เตเด™เตพ เดชเต‹เตผเดŸเตเดŸเต 80-เดฒเต‡เด•เตเด•เต เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเด‚ project.host. Apatch เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ. เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเตเดŸเต† เดญเดพเด—เดฎเดพเดฏเดฟ เดตเดณเดšเตเดšเตŠเดŸเดฟเดšเตเดšเต เด‡เดคเดฟเดจเด•เด‚ เด’เดฐเต เดตเต†เดฌเต เดธเต†เตผเดตเตผ เด‰เดฃเตเดŸเต, เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต เด…เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เด†เดจเตเดคเดฐเดฟเด• เดตเดฟเดตเดฐเด™เตเด™เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เดพเตป เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚ เดธเตเด•เตเดฒเตˆเดฑเตเดฑเต.

เดฎเต†เดฏเดฟเดฒเดฟเด‚เด—เดฟเดจเต เด’เดฐเต เดนเต‹เดธเตเดฑเตเดฑเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต smtp.your.domain - เด‡เดคเต เดฎเต†เดฏเดฟเดฒเดฟเตฝ เดจเดฟเดจเตเดจเต เด•เดคเตเดคเตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต [เด‡เดฎเต†เดฏเดฟเตฝ เดชเดฐเดฟเดฐเด•เตเดทเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต] เด†เดงเดฟเด•เดพเดฐเดฟเด•เดค เด‡เดฒเตเดฒเดพเดคเต†. เดนเต‹เดธเตเดฑเตเดฑเดฟเดฒเตเด‚'SMTP 1025 เดŽเดจเตเดจ เดชเต‹เดธเตเดฑเตเดฑเดฟเตฝ เดฎเดฟเดจเดฟเดฑเตเดฑเตเดธเต เด•เต‡เตพเด•เตเด•เตเดจเตเดจเต.

เดˆ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดฟเตฝ เดฐเดฃเตเดŸเต เด†เดณเตเด•เตพ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต: เด…เดกเตเดฎเดฟเตป ะธ เด‰เดชเดฏเต‡เดพเด•เตเดคเดพเดตเต. เด…เดกเตเดฎเดฟเตป เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเตผเดฎเดพเตผ เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต. เดšเต†เดฏเตเดฏเตเดจเตเดจ เดตเตเดฏเด•เตเดคเดฟเดฏเดพเดฃเต เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเต เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เตเด•-เดŽเดธเต.

เดŽเด•เตโ€Œเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเดฌเดฟเตพ เดซเดฏเตฝ เดœเดจเดฑเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดตเดดเดฟเดฏเดพเดฃเต เดชเตˆเตปเดธเตเดฑเตเดฑเดพเดณเตผ. เดตเดดเดฟเดฏเดพเดฃเต เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเต เดกเต‹เด•เตเดธเดฟเดœเตป.

เดˆ เดตเดพเดธเตเดคเตเดตเดฟเดฆเตเดฏเดฏเตเด•เตเด•เดพเดฏเดฟ เดžเดพเตป เด‡เดคเต เดŽเดดเตเดคเดฟ: 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.

เด…เดŸเตเดคเตเดค เด˜เดŸเตเดŸเด‚ เดธเต‡เดตเดจเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผa


sudo buildbot start /home/habr/master

เดคเตเดŸเตผเดจเตเดจเต เดธเต‡เดตเดจเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด• เดคเตŠเดดเดฟเดฒเดพเดณเดฟ-a


buildbot-worker start /home/habr/worker

เดคเดฏเตเดฏเดพเดฑเดพเดฃเต! เด‡เดชเตเดชเต‹เตพ เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดŸเตเดฐเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดŸเตเดฐเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚ เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เตเด•-y เด‡เตป svn, เดฎเตเด•เดณเดฟเตฝ เดชเดฑเดžเตเดž เดตเดพเดธเตเดคเตเดตเดฟเดฆเตเดฏ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เด˜เดŸเตเดŸเด™เตเด™เตพ เดจเดฟเตผเดตเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เดฎเตเด•เดณเดฟเตฝ เดชเดฑเดžเตเดžเดตเดฏเตเดŸเต† เดšเดฟเดฒ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดžเดพเตป เดคเดพเดดเต† เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด‚ master.cfg.

6.1 เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฎเดพเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดตเดดเดฟเดฏเดฟเตฝ.cfg


เดŽเดดเตเดคเตเดฎเตเดชเต‹เตพ เดŽเดจเตเดฑเต† master.cfg เดจเดฟเดฐเดตเดงเดฟ เดชเดฟเดถเด•เตเด•เตพ เดธเด‚เดญเดตเดฟเด•เตเด•เตเด‚, เด…เดคเดฟเดจเดพเตฝ เดฒเต‹เด—เต เดซเดฏเตฝ เดตเดพเดฏเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เด†เดฏเดฟ เดธเต‚เด•เตเดทเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตเดฎเดพเดธเตเดฑเตเดฑเตผ-เด‡เดธเดฟ เด•เต‡เดตเดฒ เดชเดพเดค /home/habr/master/twistd.log, เด’เดชเตเดชเด‚ เดตเดถเดคเตเดคเตเด‚ เดคเตŠเดดเดฟเดฒเดพเดณเดฟ- a เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดชเดพเดค /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_alwaystrunk เดจเดฟเดฏเดฎเด™เตเด™เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เตเดจเตเดจเต: เดซเต‹เตพเดกเตผ เด˜เดŸเดจ เดŽเด™เตเด™เดจเต† เดคเด•เตผเด•เตเด•เดพเด‚ svn เดถเดพเด–เด•เดณเดฟเตฝ. เด…เดตเตป เด…เดตเตผเด•เตเด•เต เด†เดชเต‡เด•เตเดทเดฟเด• เดชเดพเดคเด•เดณเตเด‚ เดตเดพเด—เตเดฆเดพเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด…เดคเดฟเดจเตเดฑเต† เดŠเดดเดคเตเดคเดฟเตฝ เดธเตเดชเตเดฒเดฟเดฑเตเดฑเต_เดซเดฏเตฝ_เดŽเดฒเตเดฒเดพเดฏเตโ€Œเดชเตเดชเต‹เดดเตเด‚ เดธเตโ€ŒเดŸเตเดฐเด™เตเด•เต เดถเต‡เด–เดฐเดคเตเดคเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต‡ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดŸเตเดŸเตเดณเตเดณเต‚ เดŽเดจเตเดจเต เดชเดฑเดžเตเดžเตเด•เตŠเดฃเตเดŸเต เดชเตเดฐเด•เตเดฐเดฟเดฏ เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต เดคเตเดฎเตเดชเดฟเด•เตเด•เตˆ.

ะ’ เดทเต†เดกเตเดฏเต‚เดณเตผเดฎเดพเตผ เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดฎเดพเดฑเตเดฑเตเด• เดซเดฟเตฝเดฑเตเดฑเตผเด†เตผ เด•เดพเดฃเตเดจเตเดจเต เด’เดจเตเดจเตเดฎเดฟเดฒเตเดฒ เด’เดฐเต เดถเดพเด–เดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดคเตเดฎเตเดชเดฟเด•เตเด•เตˆ เดจเตฝเด•เดฟเดฏเดฟเดŸเตเดŸเตเดณเตเดณ เด…เดธเต‹เดธเดฟเดฏเต‡เดทเตป เดชเตเดฐเด•เดพเดฐเด‚ เดธเตเดชเตเดฒเดฟเดฑเตเดฑเต_เดซเดฏเตฝ_เดŽเดฒเตเดฒเดพเดฏเตโ€Œเดชเตเดชเต‹เดดเตเด‚ เดธเตโ€ŒเดŸเตเดฐเด™เตเด•เต. เดฎเดพเดฑเตเดฑเด™เตเด™เดณเต‹เดŸเต เดชเตเดฐเดคเดฟเด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต เดคเตเดฎเตเดชเดฟเด•เตเด•เตˆ, เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตผ เดชเต‡เดฐเดฟเดจเตŠเดชเตเดชเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเดฆเตเดงเดคเดฟ.

เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เด‡เดตเดฟเดŸเต† เด‡เดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเดŸเต† เด‰เดŸเดฎ เดŽเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ เด…เดกเตโ€Œเดฎเดฟเดจเต เดฌเดฟเตฝเดกเต, เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดซเดฒเด™เตเด™เดณเตเดŸเต† เดฎเต†เดฏเดฟเดฒเดฟเด‚เด—เต เดฒเดฟเดธเตเดฑเตเดฑเตเด•เตพ เดฒเดญเดฟเด•เตเด•เตเด‚.

เด˜เดŸเตเดŸเด‚ เดชเดฃเดฟเดฏเตเด•-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]

เด…เดฏเดพเตพเด•เตเด•เต เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด…เดฏเดฏเตเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดค เดตเดดเดฟเด•เตพ.

เดฎเต†เดฏเดฟเตฝ เดจเต‹เดŸเตเดŸเดฟเดซเดฏเตผ เด…เดฑเดฟเดฏเดฟเดชเตเดชเตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เดพเตป เด‡เดฎเต†เดฏเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต_html เดตเดพเตผเดคเตเดคเดพเด•เตเด•เตเดฑเดฟเดชเตเดชเดฟเดจเดพเดฏเดฟ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต เดธเดœเตเดœเดฎเดพเด•เตเด•เตเดจเตเดจเต. เดฎเดพเตผเด•เตเด•เตเด…เดชเตเดชเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป HTML เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดŽเดžเตเดšเดฟเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เด‡เดคเต เดชเดฐเดฟเดทเตเด•เดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดœเดฟเดžเตเดš2 (เดŽเดจเตเดจเดคเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดตเตเดจเตเดจเดคเดพเดฃเต django). เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต เดธเดจเตเดฆเต‡เดถ เดตเดพเดšเด•เด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดฟเตฝ เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เด‰เดฃเตเดŸเต. เดˆ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ {{ เด‡เดฐเดŸเตเดŸ เดšเตเดฐเตเดฃเตเดŸ เดฌเตเดฐเต‡เดธเตเด•เดณเดฟเตฝ }} เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดธเด‚เด—เตเดฐเดนเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เดฟเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเดŸเต† เดจเดฟเดฒ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดพเดฏเดคเต, เดตเดฟเดœเดฏเดฎเต‹ เดชเดฐเดพเดœเดฏเดฎเต‹. เดŽ เดชเดฆเตเดงเดคเดฟเด•เตพ เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเดฆเตเดงเดคเดฟ. เด…เดคเดฟเดจเดพเตฝ, เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เด•เดฎเดพเตปเดกเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดœเดฟเดžเตเดš2, เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต-a, เดชเตˆเดคเตเดคเตบ เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเด‚เด—เต เดŸเต‚เดณเตเด•เตพ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดคเดฟเด•เดšเตเดšเตเด‚ เดตเดฟเดœเตเดžเดพเดจเดชเตเดฐเดฆเดฎเดพเดฏ เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เดฎเต†เดฏเดฟเตฝ เดจเต‹เดŸเตเดŸเดฟเดซเดฏเตผ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดตเดพเดฆเด™เตเด™เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

fromaddr - เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เดตเดพเตผเดคเตเดคเดพเด•เตเด•เตเดฑเดฟเดชเตเดชเต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจ เดตเดฟเดฒเดพเดธเด‚.

เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เด…เดฏเดฏเตเด•เตเด•เตเด•=เดŸเตเดฐเต‚ เด‰เดฃเตเดŸเดพเด•เตเด•เดฟเดฏ เด‰เดŸเดฎเดฏเตเด•เตเด•เตเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเตเด‚ เด’เดฐเต เดธเดจเตเดฆเต‡เดถเด‚ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เตเด•.

เดคเดฟเดฐเดฏเตฝ - เดตเดพเตผเดคเตเดคเดพเด•เตเด•เตเดฑเดฟเดชเตเดชเต เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดŸเต† เดชเต‡เดฐเตเด•เดณเดฟเตฝ เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸ เด’เดฐเต เดชเตเดฐเดคเตเดฏเดฏเด‚. เด…เด™เตเด™เดจเต† เด…เดกเตเดฎเดฟเตป เดตเดฟเดฒเดพเดธเดคเตเดคเดฟเตฝ เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเดจเต เดตเดพเตผเดคเตเดคเดพเด•เตเด•เตเดฑเดฟเดชเตเดชเต เดŽเด™เตเด™เดจเต† เดฒเดญเดฟเด•เตเด•เตเด‚ [เด‡เดฎเต†เดฏเดฟเตฝ เดชเดฐเดฟเดฐเด•เตเดทเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต].

เดฑเดฟเดฒเต‡เดนเต‹เดธเตเดฑเตเดฑเต เดธเต†เตผเดตเตผ เดคเตเดฑเดจเตเดจเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดนเต‹เดธเตเดฑเตเดฑเตเดจเดพเดฎเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต SMTPเด’เดฐเต smptPort เด•เต‡เตพเด•เตเด•เตเดจเตเดจ เดชเต‹เตผเดŸเตเดŸเต เดจเดฎเตเดชเตผ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต SMTP เดธเต†เตผเดตเตผ.

เดฎเต‹เดกเต="เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต" เด’เดฐเต เด˜เดŸเตเดŸเดฎเต†เด™เตเด•เดฟเดฒเตเด‚ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ เดฎเดพเดคเตเดฐเดฎเต‡ เดฎเต†เดฏเดฟเดฒเดฟเด‚เด—เต เดจเดŸเดคเตเดคเดพเดตเต‚ เดŽเดจเตเดจเต เดชเดฑเดฏเตเดจเตเดจเต เดชเดฃเดฟเดฏเตเด•-a, เด‡เดคเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดธเต เดชเดฐเดพเดœเดฏเด‚ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต‹เดŸเต† เด…เดตเดธเดพเดจเดฟเดšเตเดšเต. เดตเดฟเดœเดฏเดคเตเดคเดฟเดจเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด’เดฐเต เดตเดพเตผเดคเตเดคเดพเด•เตเด•เตเดฑเดฟเดชเตเดชเต เด…เดฏเดฏเตเด•เตเด•เต‡เดฃเตเดŸ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ.

เด…เดงเดฟเด• เดธเตเดตเต€เด•เตผเดคเตเดคเดพเด•เตเด•เตพ เด‰เดŸเดฎเดฏเตเด•เตเด•เตเด‚ เดฎเต†เดฏเดฟเดฒเดฟเด‚เด—เต เดจเดŸเดคเตเดคเดฟเดฏ เดตเตเดฏเด•เตเดคเดฟเด•เตเด•เตเด‚ เดชเตเดฑเดฎเต† เดฎเต†เดฏเดฟเดฒเดฟเด‚เด—เต เด…เดฏเดฏเตโ€Œเด•เตเด•เต‡เดฃเตเดŸ เดตเตเดฏเด•เตเดคเดฟเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เตเด•.

เดธเดจเตเดฆเต‡เดถเด‚ เดซเต‹เตผเดฎเดพเดฑเตเดฑเตผ เดธเดจเตเดฆเต‡เดถ เดซเต‹เตผเดฎเดพเดฑเตเดฑเต, เด…เดคเดฟเดจเตเดฑเต† เดŸเต†เด‚เดชเตเดฒเต‡เดฑเตเดฑเต, เดฒเดญเตเดฏเดฎเดพเดฏ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเดŸเต† เด’เดฐเต เด•เต‚เดŸเตเดŸเด‚ เดŽเดจเตเดจเดฟเดต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดตเดธเตเดคเตเดตเดพเดฃเต เดœเดฟเดžเตเดš2. เดชเต‹เดฒเตเดณเตเดณ เด“เดชเตเดทเดจเตเด•เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจ เด—เตเดฃเด™เตเด™เตพ=เดธเดคเตเดฏเด‚ ะธ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจ เด˜เดŸเตเดŸเด™เตเด™เตพ=เดธเดคเตเดฏเด‚ เดฒเดญเตเดฏเดฎเดพเดฏ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเดŸเต† เดˆ เดธเต†เดฑเตเดฑเต เดจเดฟเตผเดตเตเดตเดšเดฟเด•เตเด•เตเด•.

เด•เต‚เดŸเต†['เดธเต‡เดตเดจเด™เตเด™เตพ']=[sendMessageToAll] เดธเต‡เดตเดจเด™เตเด™เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดจเตฝเด•เตเดจเตเดจเต, เด…เดตเดฏเดฟเตฝ เดžเด™เตเด™เดณเตเดŸเต‡เดคเตเด‚ เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ เดฒเต‡เด–เด•เดจเต.

เดžเด™เตเด™เดณเดคเต เดšเต†เดฏเตเดคเต! เด…เดญเดฟเดจเดจเตเดฆเดจเด™เตเด™เตพ

เดžเด™เตเด™เตพ เดžเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดคเดฟเดจเต เดชเตเดฐเดพเดชเตเดคเดฎเดพเดฏ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เด•เดพเดฃเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดคเต. เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต. เดจเดฟเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดˆ เด‰เดชเด•เดฐเดฃเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต‹ เดŽเดจเตเดจเต เดฎเดจเดธเดฟเดฒเดพเด•เตเด•เดพเตป เด‡เดคเต เดฎเดคเดฟเดฏเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดตเดจเดฟเตฝ เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดฃเตเดŸเต‹? เด…เดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‰เดชเด•เดพเดฐเดชเตเดชเต†เดŸเตเดฎเต‹? เด…เดตเดจเต‹เดŸเตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดธเตเด–เดฎเดพเดฃเต‹? เด…เดชเตเดชเต‹เตพ เดžเดพเตป เดˆ เดฒเต‡เด–เดจเด‚ เดตเต†เดฑเตเดคเต† เดŽเดดเตเดคเตเดจเตเดจเดฟเดฒเตเดฒ.

เด•เต‚เดŸเดพเดคเต† เด•เต‚เดŸเตเดคเตฝ. เดชเตเดฐเตŠเดซเดทเดฃเตฝ เด•เดฎเตเดฎเตเดฏเต‚เดฃเดฟเดฑเตเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต เดฌเดฟเตฝเดกเตเดฌเต‹เดŸเตเดŸเต, เดตเดฟเดถเดพเดฒเดฎเดพเดฏเดฟ, เดฎเดพเดจเตเดตเดฒเตเด•เตพ เดตเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเตเดŸเต, เด…เดคเดฟเดฒเตเด‚ เด•เต‚เดŸเตเดคเตฝ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต.

เดจเดฟเด™เตเด™เดณเตเดŸเต† เดถเตเดฐเดฆเตเดงเดฏเตเด•เตเด•เต เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เดจเดจเตเดฆเดฟ. เดจเดฒเตเดฒเดคเตเดตเดฐเดŸเตเดŸเต†.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•