(เจเจธ เจฆเฉเจเจฐเจพ เจเจฟเฉฑเจคเจฐ
เจนเฉเจฒเฉ!
เจฎเฉเจฐเจพ เจจเจพเจฎ เจนเฉ เจเจตเจเฉเจจเฉ เจเฉเจฐเจเจฟเจจ, เจฎเฉเจ เจเฉฑเจ เจฎเจพเจเจจเจฟเฉฐเจ เจเฉฐเจชเจจเฉ เจตเจฟเฉฑเจ เจเฉฑเจ เจตเจฟเจเจพเจธ เจเฉเจฎ เจตเจฟเฉฑเจ เจเฉฑเจ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฐ เจนเจพเจ เจชเฉเจฒเฉเจฎเฉเจเจฒ.
เจเฉเจ เจตเฉ เจตเฉฑเจกเจพ เจชเฉเจฐเฉเจเฉเจเจ เจธเจผเฉเจฐเฉ เจเจฐเจฆเฉ เจธเจฎเฉเจ, เจคเฉเจธเฉเจ เจเจน เจธเฉเจเจฃเจพ เจธเจผเฉเจฐเฉ เจเจฐเจฆเฉ เจนเฉ: "เจเจธ เจจเฉเฉฐ เจฌเจฃเจพเจ เจฐเฉฑเจเจฃ เจฒเจ เจเจฟเจนเฉเจพ เจธเจพเจซเจเจตเฉเจ เจฐ เจตเจฐเจคเจฃเจพ เจธเจญ เจคเฉเจ เจตเจงเฉเจ เจนเฉ?" เจเฉฑเจ IT เจชเฉเจฐเฉเจเฉเจเจ เจ เจเจฒเจพ เจธเฉฐเจธเจเจฐเจฃ เจเจพเจฐเฉ เจเจฐเจจ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจเจ เจชเฉเจพเจตเจพเจ เจตเจฟเฉฑเจเฉเจ เจฒเฉฐเจเจฆเจพ เจนเฉเฅค เจเจน เจเฉฐเจเจพ เจนเฉเฉฐเจฆเจพ เจนเฉ เจเจฆเฉเจ เจเจนเจจเจพเจ เจชเฉเจพเจตเจพเจ เจฆเฉ เจฒเฉเฉ เจธเจตเฉเจเจฒเจฟเจค เจนเฉเฉฐเจฆเฉ เจนเฉเฅค เจเฉฑเจ IT เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจเฉฑเจ เจจเจตเฉเจ เจธเฉฐเจธเจเจฐเจฃ เจจเฉเฉฐ เจเจพเจฐเฉ เจเจฐเจจ เจฆเฉ เจธเจตเฉเจเจพเจฒเจค เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ เจฒเจเจพเจคเจพเจฐ เจเจเจคเจพ. เจฌเจฟเจฒเจกเจฌเฉเจ เจเจธ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจตเจฟเฉฑเจ เจธเจพเจกเฉ เจฒเจ เจเฉฑเจ เจตเจงเฉเจ เจธเจนเจพเจเจ เจธเจพเจฌเจค เจนเฉเจเจเฅค
เจเจธ เจฒเฉเจ เจตเจฟเฉฑเจ เจฎเฉเจ เจธเฉฐเจญเจพเจตเจจเจพเจตเจพเจ เจฆเฉ เจเฉฑเจ เจธเฉฐเจเฉเจช เจเจพเจฃเจเจพเจฐเฉ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจจ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพ เจนเฉ เจฌเจฟเจฒเจกเจฌเฉเจ. เจเจน เจธเจพเจซเจเจตเฉเจ
เจฐ เจเฉ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉ? เจเจธ เจจเจพเจฒ เจเจฟเจตเฉเจ เจธเฉฐเจชเจฐเจ เจเจฐเจจเจพ เจนเฉ เจ
เจคเฉ เจเจธ เจจเจพเจฒ เจเฉฑเจ เจเจฎ เจชเฉเจฐเจญเจพเจตเฉ เจเฉฐเจฎ เจเจฐเจจ เจตเจพเจฒเจพ เจฐเจฟเจธเจผเจคเจพ เจเจฟเจตเฉเจ เจฌเจฃเจพเจเจฃเจพ เจนเฉ? เจคเฉเจธเฉเจ เจเจชเจฃเฉ เจฎเจธเจผเฉเจจ 'เจคเฉ เจเจชเจฃเฉ เจชเฉเจฐเฉเจเฉเจเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจ
เจคเฉ เจเฉเจธเจ เจเจฐเจจ เจฒเจ เจเจพเจฐเจเจธเจผเฉเจฒ เจธเฉเจตเจพ เจฌเจฃเจพ เจเฉ เจธเจพเจกเฉ เจ
เจจเฉเจญเจต เจจเฉเฉฐ เจเฉเจฆ เจฒเจพเจเฉ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค
เจธเจฎเฉฑเจเจฐเฉ
เจธเจฎเฉฑเจเจฐเฉ
1. เจฌเจฟเจฒเจกเจฌเฉเจ เจเจฟเจเจ?
เจชเจนเจฟเจฒเจพเจ habr-e 'เจคเฉ เจฎเฉเจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจฌเจพเจฐเฉ เจฒเฉเจ เจฎเจฟเจฒเฉ เจธเจจ เจฒเจเจพเจคเจพเจฐ เจเจเจคเจพ เจตเจฐเจค เจฌเจฟเจฒเจกเจฌเฉเจ. เจเจฟเจตเฉเจ,
เจฐเฉเจเฉ! เจเฉ เจเจฟเจธเฉ เจจเฉ เจ
เจธเจฒ เจตเจฟเฉฑเจ เจเจธเจจเฉเฉฐ เจเจชเจฃเฉ เจชเฉเจฐเฉเจเฉเจเจเจพเจ เจตเจฟเฉฑเจ เจตเจฐเจคเจฟเจ เจนเฉ? เจเจน yes เจฌเจพเจนเจฐ เจเจพเจฎเฉเจ
เจเจธ เจฒเจ เจฒเฉเจ เจเฉ เจคเจฐเจ เจตเจฐเจค เจฐเจนเฉ เจนเจจ เจฌเจฟเจฒเจกเจฌเฉเจ? เจเจเจผเจฐเจเจพเจฐ, เจเฉฑเจฅเฉ เจนเฉเจฐ เจธเจพเจงเจจ เจนเจจ: เจเจฐเฉเจเจผ เจเฉฐเจเจฐเฉเจฒ ะธ เจเฉเจจเจเจฟเฉฐเจธ. เจฎเฉเจ เจเจธ เจคเจฐเฉเจนเจพเจ เจเจตเจพเจฌ เจฆเฉเจตเจพเจเจเจพเฅค เจเจผเจฟเจเจฆเจพเจคเจฐ เจเฉฐเจฎเจพเจ เจฒเจ เจเฉเจจเจเจฟเฉฐเจธ เจ เจคเฉ เจธเฉฑเจ เจเจพเจซเจผเฉ เจนเฉเจตเฉเจเจพเฅค เจเจธเจฆเฉ เจฌเจฆเจฒเฉ เจตเจฟเฉฑเจ, เจฌเจฟเจฒเจกเจฌเฉเจ - เจตเจงเฉเจฐเฉ เจ เจจเฉเจเฉเจฒ, เจเจฆเฉเจ เจเจฟ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจฆเจพ เจนเฉฑเจฒ เจเฉฑเจฅเฉ เจนเฉ เจนเฉเฉฐเจฆเจพ เจนเฉ เจเจฟเจตเฉเจ เจเจฟ เจ เฉฐเจฆเจฐ เจเฉเจจเจเจฟเฉฐเจธ. เจเฉเจฃ เจคเฉเจนเจพเจกเฉ เจนเฉเฅค เจชเจฐ เจเจฟเจเจเจเจฟ เจ เจธเฉเจ เจเฉฑเจ เจตเจฟเจเจพเจธเจธเจผเฉเจฒ เจเฉเจเจพ เจชเฉเจฐเฉเจเฉเจเจ เจฒเจ เจเฉฑเจ เจธเจพเจงเจจ เจฒเฉฑเจญ เจฐเจนเฉ เจนเจพเจ, เจเจฟเจเจ เจจเจพ เจเฉฑเจ เจ เจเจฟเจนเจพ เจเฉเจฃเฉ เจเฉ เจธเจงเจพเจฐเจจ เจเจฆเจฎเจพเจ เจคเฉเจ เจธเจผเฉเจฐเฉ เจเจฐเจฆเฉ เจนเฉเจ, เจเฉฑเจ เจฌเจฟเจฒเจก เจธเจฟเจธเจเจฎ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเฉเจตเฉเจเจพ เจเจฟเจธ เจตเจฟเฉฑเจ เจเฉฐเจเจฐเจเจเจเฉเจตเจฟเจเฉ เจ เจคเฉ เจเฉฑเจ เจตเจฟเจฒเฉฑเจเจฃ เจเฉฐเจเจฐเจซเฉเจธ เจนเฉเจตเฉเฅค
เจเจนเจจเจพเจ เจฒเจ เจเจฟเจจเฉเจนเจพเจ เจฆเจพ เจเฉเจเจพ เจชเฉเจฐเฉเจเฉเจเจ python เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจฟเจ เจนเฉ, เจธเจตเจพเจฒ เจเฉฑเจ เจฆเจพ เจนเฉ: "เจเจฟเจเจ เจจเจพ เจเฉฑเจ เจเจเฉเจเจฐเจฃ เจชเฉเจฐเจฃเจพเจฒเฉ เจฆเฉ เจเฉเจฃ เจเจฐเฉ เจเจฟเจธเจฆเจพ เจชเฉเจฐเฉเจเฉเจเจ เจตเจฟเฉฑเจ เจตเจฐเจคเฉ เจเจ เจญเจพเจธเจผเจพ เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจเฉฑเจ เจธเจชเจธเจผเจ เจเฉฐเจเจฐเจซเฉเจธ เจนเฉเจตเฉ?" เจ เจคเฉ เจนเฉเจฃ เจเจน เจฒเจพเจญ เจชเฉเจธเจผ เจเจฐเจจ เจฆเจพ เจธเจฎเจพเจ เจนเฉ เจฌเจฟเจฒเจกเจฌเฉเจ.
เจเจธ เจฒเจ, เจธเจพเจกเจพ "เจเฉฐเจธเจเฉเจฐเฉเจฎเฉเจเจเจฒ เจเฉเจเจ"เฅค เจเจชเจฃเฉ เจฒเจ, เจฎเฉเจ เจเจพเจฐ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจฆเฉ เจชเจเจพเจฃ เจเฉเจคเฉ เจนเฉ เจฌเจฟเจฒเจกเจฌเฉเจ:
- เจเจน GPL เจฒเจพเจเจธเฉฐเจธ เจฆเฉ เจ เจงเฉเจจ เจเฉฑเจ เจเจชเจจ เจธเฉเจฐเจธ เจซเจฐเฉเจฎเจตเจฐเจ เจนเฉ
- เจเจน python เจฆเฉ เจเฉฑเจ เจธเฉฐเจฐเจเจจเจพ เจเฉเจฒ เจ เจคเฉ เจฒเฉเฉเฉเจเจฆเฉเจเจ เจเจพเจฐเจตเจพเจเจเจ เจฆเฉ เจตเจฐเจฃเจจ เจตเจเฉเจ เจตเจฐเจคเฉเจ เจนเฉ
- เจเจน เจฎเจธเจผเฉเจจ เจคเฉเจ เจเจตเจพเจฌ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฆเจพ เจเฉฑเจ เจฎเฉเจเจพ เจนเฉ เจเจฟเจธ 'เจคเฉ เจ เจธเฉเจเจฌเจฒเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ
- เจเจน, เจ เฉฐเจค เจตเจฟเฉฑเจ, เจเฉฑเจ เจฎเฉเจเจผเจฌเจพเจจ เจฒเจ เจเฉฑเจเฉ-เจเฉฑเจ เจฒเฉเฉเจพเจ เจนเจจ. เจคเฉเจจเจพเจคเฉ เจฒเจ python เจ เจคเฉ เจฎเจฐเฉเฉเจฟเจ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจ เจคเฉ เจเฉฑเจ เจตเจฐเจเฉเจ เจฒ เจฎเจธเจผเฉเจจ เจ เจคเฉ java เจฎเจธเจผเฉเจจ เจฆเฉ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉเฅค
2. เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ เจฆเฉ เจ เจเจตเจพเจ เจตเจพเจฒเฉ เจงเจพเจฐเจจเจพ
เจเจพเจธเจ เจกเจฟเจธเจเฉเจฐเฉเจฌเจฟเจเจธเจผเจจ เจเจฐเจเฉเจเฉเจเจเจฐ เจฆเจพ เจเฉเจเจฆเจฐเฉ เจนเฉ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ. เจเจน เจเฉฑเจ เจธเฉเจตเจพ เจนเฉ เจเฉ:
- เจเจฐเฉเจ เจฐเฉฑเจเจฆเจพ เจนเฉ เจชเฉเจฐเฉเจเฉเจเจ เจธเจฐเฉเจค เจฐเฉเฉฑเจ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒเฉเจเจ
- เจญเฉเจเจฆเจพ เจนเฉ เจเจฎเจพเจเจกเจพเจ เจเฉ เจเจฟ เจชเฉเจฐเฉเจเฉเจเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจ เจคเฉ เจเจธเจฆเฉ เจเจพเจเจ เจเจฐเจจ เจฒเจ เจตเจฐเจเจฐ เจธเฉเจตเจพ เจฆเฉเจเจฐเจพ เจฒเจพเจเฉ เจเฉเจคเฉเจเจ เจเจพเจฃเฉเจเจ เจเจพเจนเฉเจฆเฉเจเจ เจนเจจ
- เจธเฉเจเจฟเจค เจเจฐเจฆเจพ เจนเฉ เจเฉเจคเฉเจเจ เจเจพเจฐเจตเจพเจเจเจ เจฆเฉ เจจเจคเฉเจเจฟเจเจ เจฌเจพเจฐเฉ เจเจชเจญเฉเจเจคเจพ
เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ เจซเจพเจเจฒ เจฆเฉเจเจฐเจพ เจธเฉฐเจฐเจเจฟเจค เจเฉเจคเจพ เจเจฟเจ เจนเฉ master.cfg. เจเจน เจซเจพเจเจฒ เจฐเฉเจ เจตเจฟเฉฑเจ เจนเฉ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ. เจฌเจพเจ เจฆ เจตเจฟเฉฑเจ เจฎเฉเจ เจฆเจฟเจเจพเจตเจพเจเจเจพ เจเจฟ เจเจน เจฐเฉเจ เจเจฟเจตเฉเจ เจฌเจฃเจพเจเจ เจเจฟเจ เจนเฉเฅค เจซเจพเจเจฒ เจเจชเจฃเฉ เจเจช master.cfg เจเฉฑเจ เจชเจพเจเจฅเจจ เจธเจเฉเจฐเจฟเจชเจ เจนเฉ เจเฉ เจเจพเจฒเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉ เจฌเจฟเจฒเจกเจฌเฉเจ.
เจ เจเจฒเฉ เจธเจญ เจคเฉเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจตเจธเจคเฉ เจฌเจฟเจฒเจกเจฌเฉเจ เจเฉฑเจ เจจเจพเจฎ เจนเฉ เจเจพเจฎเจพ. เจเจน เจธเฉเจตเจพ เจเจฟเจธเฉ เจนเฉเจฐ เจนเฉเจธเจ 'เจคเฉ เจเฉฑเจ เจตเฉฑเจเจฐเฉ OS เจฆเฉ เจจเจพเจฒ เจฒเจพเจเจ เจเฉเจคเฉ เจเจพ เจธเจเจฆเฉ เจนเฉ, เจเจพเจ เจนเฉ เจธเจเจฆเจพ เจนเฉ เจเจฟ เจเฉฑเจ เจเจฟเฉฑเจฅเฉ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ. เจเจน เจเจชเจฃเฉ เจชเฉเจเฉเจเจพเจ เจ เจคเฉ เจตเฉเจฐเฉเจเจฌเจฒเจพเจ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจตเจฟเจธเจผเฉเจธเจผ เจคเฉเจฐ 'เจคเฉ เจคเจฟเจเจฐ เจตเจฐเจเฉเจ เจฒ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจ เจตเฉ เจฎเฉเจเฉเจฆ เจนเฉ เจธเจเจฆเจพ เจนเฉเฅค เจเจน เจตเจฐเจเฉเจ เจฒ เจตเจพเจคเจพเจตเจฐเจฃ python เจเจชเจฏเฉเจเจคเจพเจตเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจคเจฟเจเจฐ เจเฉเจคเฉ เจเจพ เจธเจเจฆเฉ เจนเจจ virtualenv, venv.
เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ เจนเจฐ เจเจฟเจธเฉ เจจเฉเฉฐ เจนเฉเจเจฎเจพเจ เจฆเจพ เจชเฉเจฐเจธเจพเจฐเจฃ เจเจฐเจฆเจพ เจนเฉ เจเจพเจฎเจพ-y, เจ เจคเฉ เจเจน, เจฌเจฆเจฒเฉ เจตเจฟเฉฑเจ, เจเจนเจจเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจฆเจพ เจนเฉเฅค เจญเจพเจต, เจเจน เจชเจคเจพ เจเจฒเจฆเจพ เจนเฉ เจเจฟ เจเฉฑเจ เจชเฉเจฐเฉเจเฉเจเจ เจฌเจฃเจพเจเจฃ เจ เจคเฉ เจเฉเจธเจ เจเจฐเจจ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเฉฑเจฒ เจธเจเจฆเฉ เจนเฉ เจเจพเจฎเจพ-e เจตเจฟเฉฐเจกเฉเจเจผ เจเจฒเจพ เจฐเจฟเจนเจพ เจนเฉ เจ เจคเฉ เจฒเฉเจจเจเจธ เจเจฒเจพเจเจฃ เจตเจพเจฒเฉ เจเจฟเจธเฉ เจนเฉเจฐ เจตเจฐเจเจฐ 'เจคเฉเฅค
เจเจฎเจฐเจพ เจเฉฑเจก เจฆเจฟเจ เจชเฉเจฐเฉเจเฉเจเจ เจธเจฐเฉเจค เจเฉเจก เจนเจฐเฉเจ 'เจคเฉ เจนเฉเฉฐเจฆเจพ เจนเฉ เจเจพเจฎเจพ-เจ.
3. เจธเจฅเจพเจชเจจเจพ
เจเจธ เจฒเจ, เจเจ เจเฉฑเจฒเฉเจเฅค เจฎเฉเจ เจนเฉเจธเจ เจตเจเฉเจ เจเจฌเฉฐเจเฉ 18.04 เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจพเจเจเจพ. เจฎเฉเจ เจเจธ 'เจคเฉ เจเฉฑเจ เจฐเฉฑเจเจพเจเจเจพ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ-a เจ เจคเฉ เจเฉฑเจ เจเจพเจฎเจพ-a เจชเจฐ เจชเจนเจฟเจฒเจพเจ เจคเฉเจนเจพเจจเฉเฉฐ 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. เจชเจนเจฟเจฒเฉ เจเจฆเจฎ
เจฌเจฃเจพเจเจฃ เจฆเจพ เจธเจฎเจพเจ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ. เจเจน เจธเจพเจกเฉ เจซเฉเจฒเจกเจฐ เจตเจฟเฉฑเจ เจนเฉเจตเฉเจเจพ /เจเจฐ/เจนเฉเจฌเจฐ/เจฎเจพเจธเจเจฐ.
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.
"เจธเฉเจจเจนเจฟเจฐเฉ เจเฉเฉฐเจเฉ
เจ
เจคเฉ เจนเฉเจฃ เจเจฟเจธ เจฒเจ เจฎเฉเจ เจชเจฟเจเจฒเจพ เจชเฉเจฐเจพ เจฒเจฟเจเจฟเจ เจธเฉ: เจเฉฑเจ เจธเจเฉเจฐเจฟเจชเจ เจเฉ เจเจฟ เจฎเจพเจธเจเจฐ เจคเฉเจ เจฎเฉฐเจ เจเจฐเฉเจเจพ เจเจพเจฎเจพ-เจ
เจคเฉ เจเจธ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจตเจฟเฉฑเจ เจฐเจฟเจฎเฉเจ เจคเฉเจฐ 'เจคเฉ เจเฉเจคเฉ เจเจ เจจเฉเฉฐ เจเจเจเจผเฉเจเจฟเจเจ เจจเจนเฉเจ เจเฉเจคเจพ เจเจพเจตเฉเจเจพ เจเจฟเจเจเจเจฟ เจธเจเฉเจฐเจฟเจชเจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจ เจ
เจงเจฟเจเจพเจฐ เจจเจนเฉเจ เจนเจจเฅค เจธเจฅเจฟเจคเฉ เจจเฉเฉฐ เจ เฉเจ เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเฉฑเจ เจเฉเฉฐเจเฉ เจฆเฉ เจฒเฉเฉ เจชเจตเฉเจเฉ
เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ ะธ เจเจพเจฎเจพ เจเฉฑเจ เจฆเฉเจเฉ เจจเจพเจฒ เจเฉฑเจ เจธเจฌเฉฐเจง เจธเจฅเจพเจชเจค เจเจฐเฉ. เจ เจเจฟเจนเจพ เจนเฉเฉฐเจฆเจพ เจนเฉ เจเจฟ เจเจน เจเฉเฉฑเจ เจเจพเจเจฆเจพ เจนเฉ เจ เจคเฉ เจเจพเจฎเจพ เจฆเฉ เจเจตเจพเจฌ เจฒเจ เจเฉเจ เจธเจฎเฉเจ เจฆเฉ เจเจกเฉเจ เจเจฐ เจฐเจนเฉ เจนเจพเจ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ-เจ. เจเฉเจเจฐ เจเฉเจ เจเจตเจพเจฌ เจจเจนเฉเจ เจฎเจฟเจฒเจฆเจพ, เจคเจพเจ เจเฉเจจเฉเจเจธเจผเจจ เจฎเฉเฉ เจเจพเจฒเฉ เจนเฉ เจเจพเจเจฆเจพ เจนเฉเฅค เจเฉเฉฐเจเฉ --keepalive=60 เจธเจฟเจฐเจซเจผ เจเจธ เจคเฉเจ เจฌเจพเจ เจฆ เจฆเจพ เจธเจฎเจพเจ เจฆเจฐเจธเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ เจจเจพเจฒ เจเฉเฉเจจ เจฐเฉเจฌเฉเจ เจเจฐเจฆเจพ เจนเฉเฅค
5. เจธเฉฐเจฐเจเจจเจพ. เจเจฆเจฎ เจฆเจฐ เจเจฆเจฎ เจตเจฟเจ เฉฐเจเจจ
เจเฉเจจเจซเจฟเจเจฐเฉเจธเจผเจจ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ เจฎเจธเจผเฉเจจ เจฆเฉ เจเจธ เจชเจพเจธเฉ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ เจเจฟเฉฑเจฅเฉ เจ เจธเฉเจ เจเจฎเจพเจเจก เจจเฉเฉฐ เจเจฒเจพเจเจ เจธเฉ เจฌเจฃเจพเจเจฃ-เจฎเจพเจธเจเจฐ. เจธเจพเจกเฉ เจเฉเจธ เจตเจฟเฉฑเจ, เจเจน เจเฉฑเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจนเฉ /เจเจฐ/เจนเฉเจฌเจฐ/เจฎเจพเจธเจเจฐ. เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ 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 เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ เจเฉเจเจซเจฟเจ
c = BuildmasterConfig = {}
BuildmasterConfig โ เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ เจฆเจพ เจฎเฉเจฒ เจธเจผเจฌเจฆเจเฉเจธเจผเฅค เจเจน เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฟเจฒ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ. เจตเจฐเจคเฉเจ เจตเจฟเฉฑเจ เจเจธเจพเจจเฉ เจฒเจ, เจธเฉฐเจฐเจเจจเจพ เจเฉเจก เจตเจฟเฉฑเจ เจเฉฑเจ เจเจชเจจเจพเจฎ เจชเฉเจธเจผ เจเฉเจคเจพ เจเจฟเจ เจนเฉ "c". เจธเจฟเจฐเจฒเฉเจ
5.2 เจเจฐเจฎเจเจพเจฐเฉ
c['workers'] = [worker.Worker("example-worker", "pass")]
เจเจธ เจตเจพเจฐ เจ
เจธเฉเจ เจธเฉฐเจเฉเจค เจเจฐเจฆเฉ เจนเจพเจ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ-y เจฆเฉ เจธเฉเจเฉ เจเจพเจฎเจพ-เจธ. เจเจชเจฃเฉ เจเจช เจจเฉเฉฐ เจเจพเจฎเจพ เจ
เจธเฉเจ เจฌเจฃเจพเจเจ เจนเฉ
5.3 เจคเจฌเจฆเฉเจฒเฉ_เจธเจฐเฉเจค
c['change_source'] = []
c['change_source'].append(changes.GitPoller(
'git://github.com/buildbot/hello-world.git',
workdir='gitpoller-workdir', branch='master',
pollInterval=300))
เจเฉเฉฐเจเฉ เจฆเฉเจเจฐเจพ เจคเจฌเจฆเฉเจฒเฉ_เจธเจฐเฉเจค เจกเจฟเจเจธเจผเจจเจฐเฉ เจธเฉ เจธเจพเจจเฉเฉฐ เจธเฉเจเฉ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเฉ เจนเฉ เจเจฟเฉฑเจฅเฉ เจ เจธเฉเจ เจเฉฑเจ เจตเจธเจคเฉ เจชเจพเจเจฃเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเจพเจ เจเฉ เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจธเจฐเฉเจค เจเฉเจก เจจเจพเจฒ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจจเฉเฉฐ เจชเฉเจฒ เจเจฐเจฆเจพ เจนเฉเฅค เจเจฆเจพเจนเจฐเจจ เจเฉฑเจ Git เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉ เจเฉ เจเฉเจ เจ เฉฐเจคเจฐเจพเจฒเจพเจ 'เจคเฉ เจชเฉเจฒ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉเฅค
เจชเจนเจฟเจฒเฉ เจฆเจฒเฉเจฒ เจคเฉเจนเจพเจกเฉ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจฆเจพ เจฎเจพเจฐเจ เจนเฉเฅค
workdir เจซเฉเจฒเจกเจฐ เจฆเฉ เจฎเจพเจฐเจ เจจเฉเฉฐ เจฆเจฐเจธเจพเจเจเจฆเจพ เจนเฉ เจเจฟเฉฑเจฅเฉ เจชเจพเจธเฉ เจนเฉ เจเจพเจฎเจพ- เจฎเจพเจฐเจ เจฆเจพ เจฐเจฟเจธเจผเจคเฉเจฆเจพเจฐ /home/habr/worker/yourProject/build git เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจฆเฉ เจธเจฅเจพเจจเจ เจธเฉฐเจธเจเจฐเจฃ เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเฉเจเจพ.
เจธเจผเจพเจเจพ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจเฉฑเจ เจเจพเจธ เจธเจผเจพเจเจพ เจธเจผเจพเจฎเจฒ เจนเฉ เจเจฟเจธเจฆเจพ เจ เจจเฉเจธเจฐเจฃ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค
pollInterval เจเจฟเจธ เจคเฉเจ เจฌเจพเจ เจฆ เจธเจเจฟเฉฐเจเจพเจ เจฆเฉ เจธเฉฐเจเจฟเจ เจธเจผเจพเจฎเจฟเจฒ เจนเฉ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ เจคเจฌเจฆเฉเจฒเฉเจเจ เจฒเจ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจชเฉเจฒ เจเจฐเฉเจเจพเฅค
เจเฉฑเจ เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒเฉเจเจ เจจเฉเฉฐ เจเจฐเฉเจ เจเจฐเจจ เจฒเจ เจเจ เจคเจฐเฉเจเฉ เจนเจจเฅค
เจธเจญ เจคเฉเจ เจธเจฐเจฒ เจคเจฐเฉเจเจพ เจนเฉ เจชเฉเจฒเจฟเฉฐเจ, เจเจฟเจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ เจเจฟ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ เจธเจฎเฉเจ-เจธเจฎเฉเจ 'เจคเฉ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจจเจพเจฒ เจธเจฐเจตเจฐ เจจเฉเฉฐ เจชเฉเจฒ เจเจฐเจฆเจพ เจนเฉเฅค เจเฉ เจเจฎเจฟเจ เจเจฐเฉ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒเฉเจเจ เจจเฉเฉฐ เจฆเจฐเจธเจพเจเจเจฆเจพ เจนเฉ, เจซเจฟเจฐ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ เจเฉเจ เจฆเฉเจฐเฉ เจจเจพเจฒ เจเฉฑเจ เจ
เฉฐเจฆเจฐเฉเจจเฉ เจตเจธเจคเฉ เจฌเจฃเจพเจตเฉเจเจพ เจฌเจฆเจฒเฉ เจ
เจคเฉ เจเจธเจจเฉเฉฐ เจเจตเฉเจเจ เจนเฉเจเจกเจฒเจฐ เจจเฉเฉฐ เจญเฉเจเฉ เจธเฉเจกเจฟเจเจฒเจฐ, เจเฉ เจเจฟ เจชเฉเจฐเฉเจเฉเจเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจ
เจคเฉ เจเฉเจธเจ เจเจฐเจจ เจฒเจ เจเจฆเจฎเจพเจ เจจเฉเฉฐ เจฒเจพเจเจ เจเจฐเฉเจเจพ เจเจพเจฎเจพ-เจ. เจเจนเจจเจพเจ เจเจฆเจฎเจพเจ เจตเจฟเฉฑเจ เจธเฉฐเจเฉเจค เจเฉเจคเจพ เจเจพเจตเฉเจเจพ เจ
เฉฑเจชเจกเฉเจ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ. เจฌเจฟเจฒเจเฉเจฒ 'เจคเฉ เจเจพเจฎเจพเจเจน เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจฆเฉ เจเฉฑเจ เจธเจฅเจพเจจเจ เจเจพเจชเฉ เจฌเจฃเจพเจเจเจพเฅค เจเจธ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจตเฉเจฐเจตเฉ เจ
เจเจฒเฉ เจฆเฉ เจญเจพเจเจพเจ เจตเจฟเฉฑเจ เจนเฉเจ เจพเจ เจฆเจฟเฉฑเจคเฉ เจเจพเจฃเจเฉเฅค (
เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒเฉเจเจ เจจเฉเฉฐ เจเจฐเฉเจ เจเจฐเจจ เจฆเจพ เจเฉฑเจ เจนเฉเจฐ เจตเฉ เจธเจผเจพเจจเจฆเจพเจฐ เจคเจฐเฉเจเจพ เจนเฉ เจธเจฐเจตเจฐ เจคเฉเจ เจธเจฟเฉฑเจงเฉ เจธเฉเจจเฉเจนเฉ เจญเฉเจเจฃเจพ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ- เจชเฉเจฐเฉเจเฉเจเจ เจธเจฐเฉเจค เจเฉเจกเจพเจ เจจเฉเฉฐ เจฌเจฆเจฒเจฃ เจฌเจพเจฐเฉเฅค เจเจธ เจเฉเจธ เจตเจฟเฉฑเจ, เจเจฟเจตเฉเจ เจนเฉ เจกเจฟเจตเฉเจฒเจชเจฐ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉ เจเจฎเจฟเจ เจเจฐเฉ, เจชเฉเจฐเฉเจเฉเจเจ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจพเจฒเจพ เจธเจฐเจตเจฐ เจเฉฑเจ เจธเฉเจจเฉเจนเจพ เจญเฉเจเฉเจเจพ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ-y. เจ เจคเฉ เจเจน, เจฌเจฆเจฒเฉ เจตเจฟเฉฑเจ, เจเฉฑเจ เจตเจธเจคเฉ เจฌเจฃเจพ เจเฉ เจเจธเจจเฉเฉฐ เจฐเฉเจ เจฆเฉเจตเฉเจเจพ PBCchangeSource. เจ เฉฑเจเฉ, เจเจธ เจตเจธเจคเฉ เจจเฉเฉฐ เจคเจฌเจฆเฉเจฒ เจเฉเจคเจพ เจเจพเจตเฉเจเจพ เจธเฉเจกเจฟเจเจฒเจฐ, เจเฉ เจชเฉเจฐเฉเจเฉเจเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจ เจคเฉ เจเจธเจฆเฉ เจเจพเจเจ เจเจฐเจจ เจฒเจ เจเจฆเจฎเจพเจ เจจเฉเฉฐ เจธเจฐเจเจฐเจฎ เจเจฐเจฆเจพ เจนเฉเฅค เจเจธ เจตเจฟเจงเฉ เจฆเจพ เจเฉฑเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเจฟเฉฑเจธเจพ เจเฉฐเจฎ เจเจฐ เจฐเจฟเจนเจพ เจนเฉ เจนเฉเฉฑเจ- เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจธเจฐเจตเจฐ เจธเจเฉเจฐเจฟเจชเจเจพเจเฅค เจธเจเฉเจฐเจฟเจชเจ เจตเจฟเฉฑเจ เจนเฉเฉฑเจ-a, เจเจพเจฐเจตเจพเจ เจเจฐเจจ เจฒเจ เจเจผเจฟเฉฐเจฎเฉเจตเจพเจฐ เจนเฉ, เจเจฆ เจเจฎเจฟเจ เจเจฐเฉ-เจ, เจคเฉเจนเจพเจจเฉเฉฐ เจเจชเจฏเฉเจเจคเจพ เจจเฉเฉฐ เจเจพเจฒ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจคเจฌเจฆเฉเจฒเฉ เจญเฉเจเฉ เจ เจคเฉ เจจเฉเฉฑเจเจตเจฐเจ เจเจกเจฐเฉเฉฑเจธ เจฆเจฟเจ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ-เจ. เจคเฉเจนเจพเจจเฉเฉฐ เจเจธ เจจเฉเฉฑเจเจตเจฐเจ เจชเฉเจฐเจ เจจเฉเฉฐ เจตเฉ เจจเจฟเจฐเจงเจพเจฐเจฟเจค เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเฉ เจธเฉเจฃเฉเจเจพ PBCchangeSource. PBCchangeSource, เจคเจฐเฉเจเฉ เจจเจพเจฒ, เจนเจฟเฉฑเจธเจพ เจนเฉ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ-เจ. เจเจธ เจตเจฟเจงเฉ เจจเฉเฉฐ เจเจเจพเจเจผเจค เจฆเฉ เจฒเฉเฉ เจนเฉเจตเฉเจเฉ เจชเจฐเจฌเฉฐเจงเจ-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"]))
เจธเจผเจกเจฟเจเจฒเจฐ - เจเจน เจเฉฑเจ เจ
เจเจฟเจนเจพ เจคเฉฑเจค เจนเฉ เจเฉ เจเฉฑเจ เจเจฐเจฟเฉฑเจเจฐ เจตเจเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ เจเฉ เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจ
เจธเฉเจเจฌเจฒเฉ เจ
เจคเฉ เจเฉเจธเจเจฟเฉฐเจ เจฆเฉ เจชเฉเจฐเฉ เจฒเฉเฉ เจจเฉเฉฐ เจธเจผเฉเจฐเฉ เจเจฐเจฆเจพ เจนเฉเฅค
เจเจน เจฌเจฆเจฒเจพเจ
เจเฉ เจฐเจฟเจเจพเจฐเจก เจเฉเจคเฉ เจเจ เจธเจจ เจคเจฌเจฆเฉเจฒเฉ_เจธเจฐเฉเจค, เจเฉฐเจฎ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒ เจฌเจฟเจฒเจกเจฌเฉเจ- เจเฉฑเจ เจเจคเจฐเจพเจเจผ เจเจฐเจจ เจฒเจ เจฌเจฆเจฒเฉ เจ
เจคเฉ เจนเฉเจฃ เจนเจฐ เจธเจผเฉเจกเจฟเจเจฒเจฐ เจเจนเจจเจพเจ เจฆเฉ เจ
เจงเจพเจฐ เจคเฉ, เจเจน เจชเฉเจฐเฉเจเฉเจเจ เจฌเจฃเจพเจเจฃ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจธเจผเฉเจฐเฉ เจเจฐเจจ เจฒเจ เจฌเฉเจจเจคเฉเจเจ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเจน เจเจน เจตเฉ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจฆเจพ เจนเฉ เจเจฟ เจเจนเจจเจพเจ เจฌเฉเจจเจคเฉเจเจ เจจเฉเฉฐ เจเจคเจพเจฐ เจตเจฟเฉฑเจ เจเจฆเฉเจ เจคเจฌเจฆเฉเจฒ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจเฉฑเจ เจตเจธเจคเฉ
เจ
เจธเฉเจ เจฆเฉเจเจฆเฉ เจนเจพเจ เจเจฟ เจฎเฉเจเฉเจฆเจพ เจเจฆเจพเจนเจฐเจฃ เจตเจฟเฉฑเจ เจ
เจเจฟเจนเจพ เจนเฉ เจธเจผเจกเจฟเจเจฒเจฐ 2 เจเฉเจเฉเฉ เจฌเจฃเจพเจ เจเจ เจนเจจเฅค เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจนเจฐเฉเจ เจฆเฉ เจเจชเจฃเฉ เจเจฟเจธเจฎ เจนเฉ.
เจธเจฟเฉฐเจเจฒเจฌเฉเจฐเจพเจเจ เจธเจผเฉเจกเจฟเจเจฒเจฐ - เจ เจจเฉเจธเฉเจเฉ 'เจคเฉ เจธเจญ เจคเฉเจ เจชเฉเจฐเจธเจฟเฉฑเจง เจเจฒเจพเจธเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจเฅค เจเจน เจเฉฑเจ เจธเจผเจพเจเจพ เจจเฉเฉฐ เจฆเฉเจเจฆเจพ เจนเฉ เจ เจคเฉ เจเจธ เจตเจฟเฉฑเจ เจเฉฑเจ เจฐเจฟเจเจพเจฐเจก เจเฉเจคเฉ เจคเจฌเจฆเฉเจฒเฉ เจฆเฉเจเจฐเจพ เจเจพเจฒเฉ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจเจฆเฉเจ เจเจน เจคเจฌเจฆเฉเจฒเฉเจเจ เจฆเฉเจเจฆเจพ เจนเฉ, เจคเจพเจ เจเจน เจฌเจฟเจฒเจก เจฌเฉเจจเจคเฉ เจญเฉเจเจฃ เจตเจฟเฉฑเจ เจฆเฉเจฐเฉ เจเจฐ เจธเจเจฆเจพ เจนเฉ (เจตเจฟเจธเจผเฉเจธเจผ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจตเจฟเฉฑเจ เจจเจฟเจฐเจงเจพเจฐเจค เจฎเจฟเจเจฆ เจฒเจ เจฎเฉเจฒเจคเจตเฉ เจเจฐ เจธเจเจฆเจพ เจนเฉ เจเฉเจฐเฉ เจธเจเฉเจฌเจฒ เจเจพเจเจฎเจฐ) เจตเจฟเจ เจจเจพเจฎ เจ เจจเฉเจธเฉเจเฉ เจฆเจพ เจจเจพเจฎ เจธเฉเฉฑเจ เจเจฐเจฆเจพ เจนเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจเฉเจคเจพ เจเจพเจตเฉเจเจพ เจฌเจฟเจฒเจกเจฌเฉเจ- เจตเฉเฉฑเจฌ เจเฉฐเจเจฐเจซเฉเจธ. 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": "."}))
เจชเฉเจฐเฉเจ เจกเจฟเจ เจฌเจฟเจฒเจก เจเจพเจเจฎเจฐ เจเจธ เจฎเจฟเจเจฆ เจฆเจพ เจธเจฎเจพเจ เจธเจเจฟเฉฐเจเจพเจ เจตเจฟเฉฑเจ เจจเจฟเจธเจผเจเจฟเจค เจเจฐเจฆเจพ เจนเฉเฅค
เจฌเจฟเจฒเจก เจซเฉเจเจเจฐเฉ เจเฉฑเจ เจเจพเจธ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ, เจเฉ เจซเจฟเจฐ เจฌเจฟเจฒเจกเจฐ เจจเฉเฉฐ เจญเฉเจเจฆเจพ เจนเฉ เจเจพเจฎเจพ. The เจฌเจฟเจฒเจก เจซเฉเจเจเจฐเฉ เจชเจพเจฒเจฃ เจเฉเจคเฉ เจเจพเจฃ เจตเจพเจฒเฉ เจเจฆเจฎเจพเจ เจจเฉเฉฐ เจฆเจฐเจธเจพเจเจเจฆเจพ เจนเฉ เจเจพเจฎเจพ-y. เจตเจฟเจงเฉ เจจเฉเฉฐ เจเจพเจฒ เจเจฐเจเฉ เจเจฆเจฎ เจเฉเฉเฉ เจเจพเจเจฆเฉ เจนเจจ addStep
เจเจธ เจเจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจ เจชเจนเจฟเจฒเจพ เจเฉเฉเจฟเจ เจเจฟเจ เจเจฆเจฎ เจนเฉ git เจธเจพเจซเจผ -d -f -f -xเจซเจฟเจฐ git เจเฉเจเจเจเจ. เจเจน เจเจพเจฐเจตเจพเจเจเจ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจเฉเจคเฉเจเจ เจเจเจเจ เจนเจจ เจขเฉฐเจ เจนเฉ, เจเฉ เจธเจชเจธเจผเจ เจคเฉเจฐ 'เจคเฉ เจจเจนเฉเจ เจฆเฉฑเจธเจฟเจ เจเจฟเจ เจนเฉ เจชเจฐ เจเฉฑเจ เจกเจฟเจซเฉเจฒเจ เจฎเฉเฉฑเจฒ เจจเฉเฉฐ เจฆเจฐเจธเจพเจเจเจฆเจพ เจนเฉ เจคเจพเจเจผเจพ. เจชเฉเจฐเจพเจฎเฉเจเจฐ เจฎเฉเจก = 'เจตเจงเจพเจ' เจฆเจฐเจธเจพเจเจเจฆเจพ เจนเฉ เจเจฟ เจซเจพเจเจฒเจพเจ เจกเจพเจเจฐเฉเจเจเจฐเฉ เจคเฉเจ เจนเจจ เจเจฟเฉฑเจฅเฉ chechout, เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจคเฉเจ เจเฉเฉฐเจฎ เจนเฉเจฃ เจฆเฉ เจฆเฉเจฐเจพเจจ, เจ เจเฉเจค เจฐเจนเฉเฅค
เจฆเฉเจเจพ เจเฉเฉเจฟเจ เจเจฟเจ เจเจฆเจฎ เจธเจเฉเจฐเจฟเจชเจ เจจเฉเฉฐ เจเจพเจฒ เจเจฐ เจฐเจฟเจนเจพ เจนเฉ เจฎเฉเจเฉฑเจฆเจฎเฉ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจฆเฉ เจจเจพเจฒ เจธเจค เจธเฉเจฐเฉ เจ เจเจพเจฒ เจชเจพเจธเฉ 'เจคเฉ เจเจพเจฎเจพ- เจกเจพเจเจฐเฉเจเจเจฐเฉ เจคเฉเจ เจ /home/habr/worker/yourProject/build เจเจจเจตเจพเจเจฐเจฎเฉเจเจ เจตเฉเจฐเฉเจเจฌเจฒ PATHONPATH=... เจจเจพเจฒ, เจคเฉเจธเฉเจ เจเจชเจฃเฉเจเจ เจธเจเฉเจฐเจฟเจชเจเจพเจ เจฒเจฟเจ เจธเจเจฆเฉ เจนเฉ เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจชเจพเจธเฉ 'เจคเฉ เจเจฒเจพ เจธเจเจฆเฉ เจนเฉเฅค เจเจพเจฎเจพ- เจนเจฐ เจเจฆเจฎ util.ShellCommand. เจเจน เจธเจเฉเจฐเจฟเจชเจเจพเจ เจจเฉเฉฐ เจธเจฟเฉฑเจงเฉ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจฐเฉฑเจเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจซเจฟเจฐ 'เจคเฉ chechout-e เจเจน เจตเจฟเฉฑเจ เจกเจฟเฉฑเจ เจเจพเจตเฉเจเจพ /home/habr/worker/yourProject/build. เจนเจพเจฒเจพเจเจเจฟ, เจซเจฟเจฐ เจฆเฉ "เจชเจฐ" เจนเจจ:
- เจเจพเจฎเจพ เจเฉฑเจ เจเฉเฉฐเจเฉ เจจเจพเจฒ เจฌเจฃเจพเจเจ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ
--เจเจฎเจพเจธเจ เจคเจพเจ เจเจฟ เจเจน เจฌเจพเจ เจฆ เจตเจฟเฉฑเจ เจซเจพเจเจธเฉ เจฆเฉ เจ เจงเจฟเจเจพเจฐเจพเจ เจจเฉเฉฐ เจฌเจฒเฉเจ เจจเจพ เจเจฐเฉ เจเจฎเจฐเจพ เจเฉฑเจก เจฆเจฟเจ-เจฆ. - 'เจคเฉ git เจงเฉฑเจเจพ-e เจเจนเจจเจพเจ เจธเจเฉเจฐเจฟเจชเจเจพเจ เจตเจฟเฉฑเจเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจธเฉฐเจชเฉฑเจคเฉ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจฒเจพเจเจฃเจฏเฉเจเจเจธ เจฒเจ เจฌเจพเจ เจฆ เจตเจฟเฉฑเจ chechout-e เจจเฉ เจเจฟเฉฑเจ เจธเจเฉเจฐเจฟเจชเจ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฆเจพ เจ เจงเจฟเจเจพเจฐ เจจเจนเฉเจ เจเฉเจเจเจเฅค
5.6 เจฌเจฟเจฒเจกเจฐ
c['builders'] = []
c['builders'].append(util.BuilderConfig(name="runtests",
workernames=["example-worker"],
factory=factory))
เจเฉ เจนเฉ เจฌเจพเจฐเฉ เจฌเจฟเจฒเจกเจฐ เจฆเฉฑเจธเจฟเจ เจเจฟเจ เจธเฉ
c['builders'] = []
c['builders'].append(util.BuilderConfig(name="yourProject",
workernames=["yourWorkerName"],
factory=factory))
เจนเฉเจฃ เจฎเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจชเฉเจฐเจพเจฎเฉเจเจฐเจพเจ เจฌเจพเจฐเฉ เจฆเฉฑเจธเจพเจเจเจพ เจฌเจฟเจฒเจกเจฐ เจเฉเจเจซเจฟเจ.
เจจเจพเจฎ เจจเจพเจฎ เจฆเฉฑเจธเจฆเจพ เจนเฉ เจฌเจฟเจฒเจกเจฐ-a เจเฉฑเจฅเฉ เจ เจธเฉเจ เจเจธเจจเฉเฉฐ เจจเจพเจฎ เจฆเจฟเฉฑเจคเจพ เจคเฉเจนเจพเจกเจพ เจชเฉเจฐเฉเจเฉเจเจ... เจเจธ เจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ เจเจฟ 'เจคเฉ เจเจพเจฎเจพ- เจเจนเฉ เจฎเจพเจฐเจ เจฌเจฃเจพเจเจ เจเจพเจตเฉเจเจพ /home/habr/worker/yourProject/build. เจธเจผเฉเจกเจฟเจเจฒเจฐ เจฆเฉ เจคเจฒเจพเจธเจผ เจฌเจฟเจฒเจกเจฐ เจธเจฟเจฐเจซเจผ เจเจธ เจจเจพเจฎ เจจเจพเจฒ.
เจเจฐเจฎเจเจพเจฐเฉ เจฆเฉ เจจเจพเจฎ เจธเจผเฉเจ เจธเจผเจพเจฎเจฟเจฒ เจนเฉ เจเจพเจฎเจพ-เจธ. เจเจฟเจธ เจตเจฟเฉฑเจ เจนเจฐ เจเฉฑเจ เจจเฉเฉฐ เจเฉเฉเจฟเจ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ c['เจตเจฐเจเจฐ'].
เจซเฉเจเจเจฐเฉ - เจเจพเจธ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ, เจเจฟเจธ เจจเจพเจฒ เจเจน เจเฉเฉเจฟเจ เจนเฉเจเจ เจนเฉ เจฌเจฟเจฒเจกเจฐ. เจเจน เจตเจธเจคเฉ เจญเฉเจเฉเจเจพ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ 'เจคเฉ เจเจพเจฎเจพ เจเจธ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจธเจพเจฐเฉ เจเจฆเจฎเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจจ เจฒเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ-เจฆ.
6. เจคเฉเจนเจพเจกเฉ เจเจชเจฃเฉ เจธเฉฐเจฐเจเจจเจพ เจฆเฉ เจเจฆเจพเจนเจฐเจจ
เจเฉฑเจฅเฉ เจเจฆเจพเจนเจฐเจจ เจชเฉเจฐเฉเจเฉเจเจ เจเจฐเจเฉเจเฉเจเจเจฐ เจนเฉ เจเฉ เจฎเฉเจ เจฆเฉเจเจฐเจพ เจฒเจพเจเฉ เจเจฐเจจ เจฆเจพ เจชเฉเจฐเจธเจคเจพเจต เจเจฐเจฆเจพ เจนเจพเจ เจฌเจฟเจฒเจกเจฌเฉเจ
.
เจ
เจธเฉเจ เจตเจฐเจเจจ เจเฉฐเจเจฐเฉเจฒ เจธเจฟเจธเจเจฎ เจตเจเฉเจ เจตเจฐเจคเจพเจเจเฉ svn. เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจเฉเจฆ เจเจฟเจธเฉ เจเจฟเจธเจฎ เจฆเฉ เจเจฒเจพเจเจก เจตเจฟเฉฑเจ เจธเจฅเจฟเจค เจนเฉเจตเฉเจเฉเฅค เจเฉฑเจฅเฉ เจเจธ เจฌเฉฑเจฆเจฒ เจฆเจพ เจชเจคเจพ เจนเฉ
เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ ะธ เจเจพเจฎเจพ เจเจธเฉ เจฎเฉเจเจผเจฌเจพเจจ 'เจคเฉ เจเจฒเจพเจ project.host .เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ เจเจธ เจฆเฉเจเจ เจซเจพเจเจฒเจพเจ เจจเฉเฉฐ เจเฉฑเจ เจซเฉเจฒเจกเจฐ เจตเจฟเฉฑเจ เจธเจเฉเจฐ เจเจฐเจฆเจพ เจนเฉ /เจเจฐ/เจนเฉเจฌเจฐ/เจฎเจพเจธเจเจฐ. เจเจพเจฎเจพ เจเจธ เจจเฉเฉฐ เจนเฉเจ เจฆเจฟเฉฑเจคเฉ เจฎเจพเจฐเจ เจตเจฟเฉฑเจ เจธเจเฉเจฐ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ /เจเจฐ/เจนเจพเจฌเจฐ/เจเจฐเจฎเจเจพเจฐเฉ. เจชเฉเจฐเจเจฟเจฐเจฟเจ เจธเฉฐเจเจพเจฐ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ-a เจ เจคเฉ เจเจพเจฎเจพ-a เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจฆเฉ เจ เจจเฉเจธเจพเจฐ เจชเฉเจฐเจ 4000 เจฆเฉเจเจฐเจพ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ เจฌเจฟเจฒเจกเจฌเฉเจ-a, เจเจน เจนเฉ 'pb' เจชเฉเจฐเฉเจเฉเจเฉเจฒเฅค
เจเฉเจเจพ เจชเฉเจฐเฉเจเฉเจเจ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจชเจพเจเจฅเจจ เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจฟเจ เจนเฉเฅค เจเฉฐเจฎ เจเจธ เจฆเฉเจเจ เจคเจฌเจฆเฉเจฒเฉเจเจ เจจเฉเฉฐ เจเจฐเฉเจ เจเจฐเจจเจพ, เจเฉฑเจ เจเจเจเจผเฉเจเจฟเจเจเฉเจฌเจฒ เจซเจพเจเจฒ เจฌเจฃเจพเจเจฃเจพ, เจฆเจธเจคเจพเจตเฉเจเจผ เจคเจฟเจเจฐ เจเจฐเจจเจพ เจ เจคเฉ เจเฉเจธเจเจฟเฉฐเจ เจเจฐเจจเจพ เจนเฉเฅค เจ เจธเจซเจฒเจคเจพ เจฆเฉ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ, เจธเจพเจฐเฉ เจกเจฟเจตเฉเจฒเจชเจฐเจพเจ เจจเฉเฉฐ เจเจฎเฉเจฒ เจฆเฉเจเจฐเจพ เจเฉฑเจ เจธเฉเจจเฉเจนเจพ เจญเฉเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ เจเจฟ เจเฉฑเจ เจ เจธเจซเจฒ เจเจพเจฐเจตเจพเจ เจนเฉเฅค
เจตเฉเฉฑเจฌ เจกเจฟเจธเจชเจฒเฉ เจฌเจฟเจฒเจกเจฌเฉเจ เจ เจธเฉเจ เจเจธ เจฒเจ เจชเฉเจฐเจ 80 เจจเจพเจฒ เจเฉเฉเจพเจเจเฉ project.host. Apatch เจจเฉเฉฐ เจเฉฐเจธเจเจพเจฒ เจเจฐเจจเจพ เจเจผเจฐเฉเจฐเฉ เจจเจนเฉเจ เจนเฉเฅค เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจฆเฉ เจนเจฟเฉฑเจธเฉ เจตเจเฉเจ เจฎเจฐเฉเฉเจฟเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ เจเฉฑเจ เจตเฉเฉฑเจฌ เจธเจฐเจตเจฐ เจนเฉ, เจฌเจฟเจฒเจกเจฌเฉเจ เจเจธ เจจเฉเฉฐ เจตเจฐเจคเจฆเจพ เจนเฉ.
เจฒเจ เจ เฉฐเจฆเจฐเฉเจจเฉ เจเจพเจฃเจเจพเจฐเฉ เจธเจเฉเจฐ เจเจฐเจจ เจฒเจ เจฌเจฟเจฒเจกเจฌเฉเจ เจ เจธเฉเจ เจตเจฐเจคเจพเจเจเฉ sqlite.
เจฎเฉเจฒเจฟเฉฐเจ เจฒเจ เจเฉฑเจ เจนเฉเจธเจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ smtp.your.domain - เจเจน เจฎเฉเจฒ เจคเฉเจ เจเจฟเฉฑเจ เฉเจเจ เจญเฉเจเจฃ เจฆเฉ เจเจเจฟเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉ [เจเจฎเฉเจฒ เจธเฉเจฐเฉฑเจเจฟเจ เจค] เจชเฉเจฐเจฎเจพเจฃเจฟเจเจคเจพ เจฆเฉ เจฌเจฟเจจเจพเจ. เจฎเฉเจเจผเจฌเจพเจจ 'เจคเฉ เจตเฉ.SMTP ' เจชเฉเจธเจ 1025 'เจคเฉ เจฎเจฟเฉฐเจ เจธเฉเจฃเฉ เจเจพ เจฐเจนเฉ เจนเจจเฅค
เจชเฉเจฐเจเจฟเจฐเจฟเจ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจฆเฉ เจฒเฉเจ เจนเจจ: เจชเจฐเจฌเฉฐเจงเจ ะธ เจเจชเจญเฉเจเฉ เจจเฉเฉฐ. admin เจชเฉเจฐเจธเจผเจพเจธเจ เจฌเจฟเจฒเจกเจฌเฉเจ. เจเจชเจญเฉเจเจคเจพ เจตเจเจจเจฌเฉฑเจง เจตเจฟเจ เจเจคเฉ เจนเฉ เจเจฎเจฟเจ เจเจฐเฉ-เจธ.
เจฆเฉเจเจฐเจพ เจเจเจเจผเฉเจเจฟเจเจเฉเจฌเจฒ เจซเจพเจเจฒ เจคเจฟเจเจฐ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉ เจชเจพเจเจเฉฐเจธเจเจพเจฒเจฐ. เจฆเฉเจเจฐเจพ เจฆเจธเจคเจพเจตเฉเจเจผ เจคเจฟเจเจฐ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ doxygen.
เจเจธ เจเจฐเจเฉเจเฉเจเจเจฐ เจฒเจ เจฎเฉเจ เจเจน เจฒเจฟเจเจฟเจ: 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"
}
เจชเจนเจฟเจฒเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจฒเฉเฉ เจนเฉ
เจ เจเจฒเจพ เจเจฆเจฎ เจธเฉเจตเจพ เจธเจผเฉเจฐเฉ เจเจฐเจจเจพ เจนเฉ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐaa
sudo buildbot start /home/habr/master
เจซเจฟเจฐ เจธเฉเจตเจพ เจธเจผเฉเจฐเฉ เจเจฐเฉ เจเจพเจฎเจพ-a
buildbot-worker start /home/habr/worker
เจคเจฟเจเจฐ! เจนเฉเจฃ เจฌเจฟเจฒเจกเจฌเฉเจ เจคเจฌเจฆเฉเจฒเฉเจเจ เจจเฉเฉฐ เจเจฐเฉเจ เจเจฐเฉเจเจพ เจ เจคเฉ เจเจฐเจฟเฉฑเจเจฐ เจเจฐเฉเจเจพ เจเจฎเจฟเจ เจเจฐเฉ-y เจตเจฟเฉฑเจ svn, เจเจชเจฐเฉเจเจค เจเจฐเจเฉเจเฉเจเจเจฐ เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจชเฉเจฐเฉเจเฉเจเจ เจฌเจฃเจพเจเจฃ เจ เจคเฉ เจเฉเจธเจ เจเจฐเจจ เจฆเฉ เจเจฆเจฎเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจจเจพเฅค
เจนเฉเจ เจพเจ เจฎเฉเจ เจเจชเจฐเฉเจเจค เจฆเฉเจเจ เจเฉเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเจพเจเจเจพ master.cfg.
6.1 เจคเฉเจนเจพเจกเฉ master.cfg เจฆเฉ เจฐเจธเจคเฉ 'เจคเฉ
เจฒเจฟเจเจฃ เจตเฉเจฒเฉ เจฎเฉเจฐเฉ master.cfg เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจเจฒเจคเฉเจเจ เจนเฉเจฃเจเฉเจเจ, เจเจธ เจฒเจ เจฒเฉเจ เจซเจพเจเจฒ เจจเฉเฉฐ เจชเฉเฉเจนเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเจตเฉเจเฉเฅค เจฆเฉ เจฐเฉเจช เจตเจฟเฉฑเจ เจธเจเฉเจฐ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ-EC เจชเฉเจฐเจจ เจฎเจพเจฐเจ /home/habr/master/twistd.log, เจ
เจคเฉ เจชเจพเจธเฉ 'เจคเฉ เจเจพเจฎเจพ- เจเฉฑเจ เจชเฉเจฐเจจ เจฎเจพเจฐเจ เจฆเฉ เจจเจพเจฒ /home/habr/worker/twistd.log. เจเจฟเจตเฉเจ เจคเฉเจธเฉเจ เจเจฒเจคเฉ เจจเฉเฉฐ เจชเฉเฉเจนเจฆเฉ เจนเฉ เจ
เจคเฉ เจเจธเจจเฉเฉฐ เจ เฉเจ เจเจฐเจฆเฉ เจนเฉ, เจคเฉเจนเจพเจจเฉเฉฐ เจธเฉเจตเจพ เจจเฉเฉฐ เจฎเฉเฉ เจเจพเจฒเฉ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจชเจตเฉเจเฉ เจฌเจฟเจฒเจกเจฎเจพเจธเจเจฐ-a เจเจน เจเจฟเจตเฉเจ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ:
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_alwaystruk เจเจน เจเจนเจฟ เจเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉ เจเจฟ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจตเจฟเฉฑเจ เจธเจฟเจฐเจซ เจธเจผเจพเจฎเจฒ เจนเจจ เจคเฉฐเจฆ.
ะ เจ เจจเฉเจธเฉเจเฉ เจธเฉฐเจเฉเจค เจเฉเจคเจพ เจซเจฟเจฒเจเจฐ เจฌเจฆเจฒเฉเจเฉ เจฆเฉเจเจฆเจพ เจนเฉ เจเฉเจ เจ เจคเฉ เจเจธเจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจธเจผเจพเจเจพ เจเฉเฉเจฆเจพ เจนเฉ เจคเฉฐเจฆ เจฆเฉเจเจฐเจพ เจฆเจฟเฉฑเจคเฉ เจเจ เจเจธเฉเจธเฉเจเจธเจผเจจ เจฆเฉ เจ เจจเฉเจธเจพเจฐ split_file_alwaystruk. เจตเจฟเฉฑเจ เจคเจฌเจฆเฉเจฒเฉเจเจ เจฆเจพ เจเจตเจพเจฌ เจคเฉฐเจฆ, เจฒเจพเจเจ เจเฉเจคเจพ เจฌเจฟเจฒเจกเจฐ เจจเจพเจฎ เจฆเฉ เจจเจพเจฒ เจคเฉเจนเจพเจกเจพ เจชเฉเจฐเฉเจเฉเจเจ.
เจตเจฟเจธเจผเฉเจธเจผเจคเจพ เจเฉฑเจฅเฉ เจเจธเจฆเฉ เจฒเฉเฉ เจนเฉ เจคเจพเจ เจเจฟ เจชเฉเจฐเจธเจผเจพเจธเจ เจจเฉเฉฐ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจฆเฉ เจฎเจพเจฒเจ เจตเจเฉเจ เจฌเจฟเจฒเจก เจ เจคเฉ เจเฉเจธเจเจฟเฉฐเจ เจจเจคเฉเจเจฟเจเจ เจฆเฉเจเจ เจฎเฉเจฒเจฟเฉฐเจ เจธเฉเจเฉเจเจ เจชเฉเจฐเจพเจชเจค เจนเฉเจฃเฅค
เจเจฆเจฎ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ-a เจเจฎเจฐเจพ เจเฉฑเจก เจฆเจฟเจ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ เจฆเฉ เจธเจฅเจพเจจเจ เจธเฉฐเจธเจเจฐเจฃ เจตเจฟเฉฑเจ เจธเจฅเจฟเจค เจเจฟเจธเฉ เจตเฉ เจซเจพเจเจฒ เจจเฉเฉฐ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจฎเจฟเจเจพเจเจฃ เจฆเฉ เจธเจฎเจฐเฉฑเจฅ เจเจพเจฎเจพ-เจ. เจ เจคเฉ เจซเจฟเจฐ เจชเฉเจฐเจพ เจเจฐเฉ svn เจ เฉฑเจชเจกเฉเจ. เจฎเฉเจก เจจเฉเฉฐ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจฆเฉเจเจฐเจพ เจธเฉฐเจฐเจเจฟเจค เจเฉเจคเจพ เจเจฟเจ เจนเฉ เจฎเฉเจก = เจชเฉเจฐเจพ, เจตเจฟเจงเฉ = เจคเจพเจเจผเจพ. เจชเฉเจฐเจพเจฎเฉเจเจฐ haltOnTailure เจเจนเจฟเฉฐเจฆเจพ เจนเฉ เจเจฟ เจเฉ svn เจ เฉฑเจชเจกเฉเจ เจเฉฑเจ เจเจฒเจคเฉ เจจเจพเจฒ เจเจฒเจพเจเจ เจเจพเจตเฉเจเจพ, เจซเจฟเจฐ เจฌเจฟเจฒเจกเจฟเฉฐเจ เจ เจคเฉ เจเฉเจธเจเจฟเฉฐเจ เจฆเฉ เจชเฉเจฐเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจจเฉเฉฐ เจฎเฉเจ เฉฑเจคเจฒ เจเจฐ เจฆเจฟเฉฑเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจเจฟเจเจเจเจฟ เจ เฉฑเจเฉ เจฆเฉเจเจ เจเจพเจฐเจตเจพเจเจเจ เจฆเจพ เจเฉเจ เจฎเจคเจฒเจฌ เจจเจนเฉเจ เจนเฉเฅค
6.3 เจคเฉเจนเจพเจจเฉเฉฐ เจชเฉฑเจคเจฐ: เจชเฉฑเจคเจฐเจเจพเจฐเจพเจ เจจเฉเฉฐ เจเฉเจธเจผเจฃเจพ เจเจฐเจจ เจฒเจ เจ เจงเจฟเจเจพเจฐเจค เจนเจจ
เจจเฉ เจเจฎเฉเจฒ เจฆเฉเจเจฐเจพ เจธเฉเจเจจเจพเจตเจพเจ เจญเฉเจเจฃ เจฒเจ เจเฉฑเจ เจธเฉเจตเจพ เจนเฉเฅค
template_html=u'''
<h4>ะกัะฐััั ะฟะพัััะพะตะฝะฝะพะณะพ ัะตะปะธะทะฐ: {{ summary }}</h4>
<p>ะัะฟะพะปัะทัะตะผัะน ัะตัะฒะธั ะดะปั ะฟะพัััะฐะตะฝะธั: {{ workername }}</p>
<p>ะัะพะตะบั: {{ projects }}</p>
<p>ะะปั ัะพะณะพ ััะพ ะฑั ะฟะพัะผะพััะตัั ะธะฝัะตััะตะนั ัะฟัะฐะฒะปะตะฝะธั ะฟัะพะนะดะธัะต ะฟะพ ัััะปะบะต: {{ buildbot_url }}</p>
<p>ะะปั ัะพะณะพ ััะพ ะฑั ะฟะพัะผะพััะตัั ัะตะทัะปััะฐั ัะฑะพัะบะธ ะฟัะพะนะดะธัะต ะฟะพ ัััะปะบะต: {{ build_url }}</p>
<p>ะัะฟะพะปัะทัั WinSCP ะผะพะถะฝะพ ะฟะพะดะบะปััะธัััั ะบ ัะตัะฒะตัั c ip:xxx.xx.xxx.xx. ะะพะนะดั ะฟะพะด habr/password, ะทะฐะฑัะฐัั ัะพะฑัะฐะฝะฝัะน executable ัะฐะนะป ั ะดะธัะตะบัะพัะธะธ ~/worker/yourProject/build/dist.</p>
<p><b>ะะพัััะพะตะฝะธะต ะฑัะปะพ ะฟัะพะธะทะฒะตะดะตะฝะพ ัะตัะตะท Buildbot</b></p>
'''
sendMessageToAll = reporters.MailNotifier(fromaddr="[email protected]",
sendToInterestedUsers=True,
lookup="your.domain",
relayhost="smtp.your.domain",
smtpPort=1025,
mode="warnings",
extraRecipients=['[email protected]'],
messageFormatter=reporters.MessageFormatter(
template=template_html,
template_type='html',
wantProperties=True,
wantSteps=True)
)
c['services'] = [sendMessageToAll]
เจเจน เจธเฉเจจเฉเจนเฉ เจญเฉเจ เจธเจเจฆเจพ เจนเฉ
เจฎเฉเจฒ เจจเฉเจเฉเจซเจพเจเจฐ เจธเฉเจเจจเจพเจตเจพเจ เจญเฉเจเจฃ เจฒเจ เจเจฎเฉเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเฉเฅค
เจเฉเจเจชเจฒเฉเจ_html เจจเจฟเจเจเจผเจฒเฉเจเจฐ เจฒเจ เจเฉเจเจธเจ เจเฉเจฎเจชเจฒเฉเจ เจธเฉเฉฑเจ เจเจฐเจฆเจพ เจนเฉเฅค HTML เจฆเฉ เจตเจฐเจคเฉเจ เจฎเจพเจฐเจเจ
เฉฑเจช เจฌเจฃเจพเจเจฃ เจฒเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉเฅค เจเจธ เจจเฉเฉฐ เจเฉฐเจเจฃ เจฆเฉเจเจฐเจพ เจธเฉเจงเจฟเจ เจเจฟเจ เจนเฉ
เจฎเฉเจฒ เจจเฉเจเฉเจซเจพเจเจฐ เจนเฉเจ เจฒเจฟเจเฉเจเจ เจฆเจฒเฉเจฒเจพเจ เจธเจผเจพเจฎเจฒ เจนเจจเฅค
addr เจคเฉเจ - เจเจน เจชเจคเจพ เจเจฟเจธ เจคเฉเจ เจนเจฐ เจเฉเจ เจจเจฟเจเจเจผเจฒเฉเจเจฐ เจชเฉเจฐเจพเจชเจค เจเจฐเฉเจเจพเฅค
InterestedUsers เจจเฉเฉฐ เจญเฉเจเฉ=เจธเฉฑเจเจพ เจฎเจพเจฒเจ เจ เจคเฉ เจเจชเจญเฉเจเจคเจพ เจจเฉเฉฐ เจเฉฑเจ เจธเฉเจจเฉเจนเจพ เจญเฉเจเจฆเจพ เจนเฉ เจเจฟเจธเจจเฉ เจฌเจฃเจพเจเจ เจนเฉ เจเจฎเจฟเจ เจเจฐเฉ.
เจเจพเจเจเจจเจพ โ เจเฉฑเจ เจชเจฟเจเฉเจคเจฐ เจเฉ เจจเจฟเจเจเจผเจฒเฉเจเจฐ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจตเจพเจฒเฉ เจเจชเจญเฉเจเจคเจพเจตเจพเจ เจฆเฉ เจจเจพเจตเจพเจ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจเฉเจคเจพ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค เจเจธ เจฒเจ เจชเจฐเจฌเฉฐเจงเจ เจเจชเจญเฉเจเจคเจพ เจชเจคเฉ 'เจคเฉ เจจเจฟเจเจเจผเจฒเฉเจเจฐ เจเจฟเจตเฉเจ เจชเฉเจฐเจพเจชเจค เจเจฐเฉเจเจพ [เจเจฎเฉเจฒ เจธเฉเจฐเฉฑเจเจฟเจ เจค].
relayhost เจนเฉเจธเจ-เจจเจพเจ เจจเฉเฉฐ เจฆเจฐเจธเจพเจเจเจฆเจพ เจนเฉ เจเจฟเจธ 'เจคเฉ เจธเจฐเจตเจฐ เจเฉเจฒเฉเจนเจฟเจ เจเจฟเจ เจนเฉ SMTP, เจเฉฑเจ smptPort เจธเฉเจฃเจจ เจตเจพเจฒเจพ เจชเฉเจฐเจ เจจเฉฐเจฌเจฐ เจฆเฉฑเจธเจฆเจพ เจนเฉ SMTP เจธเจฐเจตเจฐ
เจฎเฉเจก="เจเฉเจคเจพเจตเจจเฉ" เจเจนเจฟเฉฐเจฆเจพ เจนเฉ เจเจฟ เจฎเฉเจฒเจฟเฉฐเจ เจธเจฟเจฐเจซ เจคเจพเจ เจนเฉ เจเฉเจคเฉ เจเจพเจฃเฉ เจเจพเจนเฉเจฆเฉ เจนเฉ เจเฉเจเจฐ เจเฉฑเจเฉ เจเฉฑเจ เจเฉฑเจ เจเจฆเจฎ เจนเฉ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ-a, เจเฉ เจธเจฅเจฟเจคเฉ เจฆเฉ เจ เจธเจซเจฒเจคเจพ เจเจพเจ เจเฉเจคเจพเจตเจจเฉ เจฆเฉ เจจเจพเจฒ เจเจคเจฎ เจนเฉเจเจเฅค เจธเจซเจฒเจคเจพ เจฆเฉ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ, เจเฉฑเจ เจจเจฟเจเจเจผเจฒเฉเจเจฐ เจญเฉเจเจฃ เจฆเฉ เจเฉเจ เจฒเฉเฉ เจจเจนเฉเจ เจนเฉ.
เจตเจพเจงเฉ เจชเฉเจฐเจพเจชเจคเจเจฐเจคเจพ เจฎเจพเจฒเจ เจ เจคเฉ เจเจธ เจตเจฟเจ เจเจคเฉ เจคเฉเจ เจเจฒเจพเจตเจพ เจเจฟเจจเฉเจนเจพเจ เจจเฉเฉฐ เจกเจพเจ เจญเฉเจเฉ เจเจพเจฃเฉ เจเจพเจนเฉเจฆเฉ เจนเฉ เจเจนเจจเจพเจ เจฆเฉ เจธเฉเจเฉ เจธเจผเจพเจฎเจฒ เจเจฐเจฆเฉ เจนเฉ เจเจฎเจฟเจ เจเจฐเฉ.
เจธเฉเจจเฉเจนเจพ เจซเจพเจฐเจฎเฉเจเจฐ เจเฉฑเจ เจตเจธเจคเฉ เจนเฉ เจเฉ เจธเฉเจจเฉเจนเจพ เจซเจพเจฐเจฎเฉเจ, เจเจธเจฆเฉ เจเฉเจเจชเจฒเฉเจ, เจ เจคเฉ เจเจธ เจคเฉเจ เจเจชเจฒเจฌเจง เจตเฉเจฐเฉเจเจฌเจฒเจพเจ เจฆเจพ เจเฉฑเจ เจธเฉเฉฑเจ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐเจฆเฉ เจนเฉ jinja2. เจตเจฟเจเจฒเจช เจเจฟเจตเฉเจ เจเจฟ wantProperties=เจธเฉฑเจเจพ ะธ wantSteps=เจธเฉฑเจเจพ เจเจชเจฒเจฌเจง เจตเฉเจฐเฉเจเจฌเจฒเจพเจ เจฆเฉ เจเจธ เจธเฉเฉฑเจ เจจเฉเฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจเจฐเฉเฅค
เจจเจพเจฒ['services']=[sendMessageToAll] เจธเฉเจตเจพเจตเจพเจ เจฆเฉ เจเฉฑเจ เจธเฉเจเฉ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจฆเจพ เจนเฉ, เจเจฟเจธ เจตเจฟเฉฑเจ เจธเจพเจกเฉ เจนเฉเจตเฉเจเฉ เจฐเจฟเจชเฉเจฐเจเจฐ.
เจ เจธเฉเจ เจเจน เจเฉเจคเจพ! เจตเจงเจพเจเจเจ
เจ เจธเฉเจ เจเจชเจฃเฉ เจเฉเจฆ เจฆเฉ เจธเฉฐเจฐเจเจจเจพ เจฌเจฃเจพเจ เจนเฉ เจ เจคเฉ เจเจพเจฐเจเจเฉเจธเจผเจฒเจคเจพ เจจเฉเฉฐ เจฆเฉเจเจฟเจ เจนเฉ เจเฉ เจเจน เจธเจฎเจฐเฉฑเจฅ เจนเฉ. เจฌเจฟเจฒเจกเจฌเฉเจ. เจเจน, เจฎเฉเจจเฉเฉฐ เจฒเจเจฆเจพ เจนเฉ, เจเจน เจธเจฎเจเจฃ เจฒเจ เจเจพเจซเจผเฉ เจนเฉ เจเจฟ เจเฉ เจคเฉเจนเจพเจกเฉ เจชเฉเจฐเฉเจเฉเจเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจฒเจ เจเจธ เจธเจพเจงเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจพเจ เจจเจนเฉเจ. เจเฉ เจคเฉเจธเฉเจ เจเจธ เจตเจฟเฉฑเจ เจฆเจฟเจฒเจเจธเจชเฉ เจฐเฉฑเจเจฆเฉ เจนเฉ? เจเฉ เจเจน เจคเฉเจนเจพเจกเฉ เจฒเจ เจฒเจพเจญเจฆเจพเจเจ เจนเฉเจตเฉเจเจพ? เจเฉ เจเจน เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจเจฐเจพเจฎเจฆเจพเจเจ เจนเฉ? เจซเจฟเจฐ เจฎเฉเจ เจเจน เจฒเฉเจ เจตเจฟเจ เจฐเจฅ เจจเจนเฉเจ เจฒเจฟเจ เจฐเจฟเจนเจพเฅค
เจ เจคเฉ เจ เฉฑเจเฉ. เจฎเฉเจ เจชเฉเจธเจผเฉเจตเจฐ เจญเจพเจเจเจพเจฐเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ เจเจพเจนเจพเจเจเจพ เจฌเจฟเจฒเจกเจฌเฉเจ, เจเฉเฉเจพ เจนเฉ เจเจฟเจ, เจฎเฉเจจเฉเจ เจฒ เจ เจจเฉเจตเจพเจฆ เจเฉเจคเฉ เจเจ, เจ เจคเฉ เจนเฉเจฐ เจตเฉ เจเจฆเจพเจนเจฐเจจเจพเจ เจธเจจเฅค
เจคเฉเจนเจพเจกเฉ เจงเจฟเจเจจ เจฒเจ เจธเจญ เจฆเจพ เจงเฉฐเจจเจตเจพเจฆเฅค เจเฉเจธเจผเจเจฟเจธเจฎเจคเฉ.
เจธเจฐเฉเจค: www.habr.com