Тасралтгүй чанар
Ганц мод гал болохгүй
Томоохон хэмжээний програм хангамжийн төслийн үед дэд хэсгүүдийг нэгтгэх ажил зайлшгүй тулгардаг. Системийг зохиомжлохдоо гүйцэтгэх үүргийнх нь дагуу ангилж дэд хэсгүүдэд хуваадаг бөгөөд эдгээр хэсгүүдийн кодыг хөгжүүлэгчид хэсэг бүлгээр нь бичнэ. Ингээд тал талд бичигдсэн кодыг нэгтгэх шаардлага зайлшгүй болж байна.
Асуудлын гол нь эдгээр кодуудыг нийлүүлж хөрвүүлэлт хийнэ, ажиллуулна гэдэг өөрөө тун ярвигтай ажил болчихоод байдагт байгаа юм. Тухайлбал хэдэн сарын өмнө миний ажиллаж байсан нэг төсөл дээр нэгдсэн тэст хийх өдөр бид нар нэг ч тест ажиллуулж чадаагүй юм. Дараагийн өдөр нь арай ядан байж бүх кодуудаа нийлүүлээд хөрвүүлэлт хийж дөнгөсөн боловч ажиллахгүй байсаар гуравдах өдөрөө л нийлүүлсэн кодоо ажиллуулж тестлэж болохоор болсон билээ. Ингээд тэр төсөл дээр ажиллаж байсан хорь орчим хөгжүүлэгч гурван өдрийнхөө ажлыг бичсэн кодоо нийлүүлэхэд зориулчихсан гэхээр нэг хүнээр тооцвол хоёр сарын ажил шүү дээ! За энэ ч яахав, ингээд нийлүүлчихлээ гэхэд, дэд хэсгүүд маань хоорондоо зөв харилцаж чадахгүй байснаас алдаа засахад бас нилээд хугацаа орчихсон.
Ийм маягаар кодоо нийлүүлэх гэж нүсэр ажил болоод байвал хол явахгүй гэдэг нь харагдаж байна, мэдээж үүнийг шийдэх арга байлгүй яахав; энэ бол Continuous Integration буюу Тасралтгүй нийлүүлэлт гэж орчуулахаар юмуу даа. Гол санаа нь ердөө л нийлүүлэлтийг тасралтгүй байнга хийж байх юм. Ойр ойрхон нийлүүлэлт хийгээд байхаар кодонд гарч ирж байгаа зөрчил тэр дороо илэрнэ. Хөгжүүлэгч хүн 20 минутын өмнө бичсэн кодоо засахад ганц хоёрхон минут л зарцуулдаг, харин хэдэн өдрийн өмнө бичсэн кодыг засахад багагүй хугацаа зарцуулагдахаас гадна тэр буруу байсан кодноос болоод өөр бусад алдаанууд ч шил шилээ дараад гараад ирнэ. Ер нь хөгжүүлэлтийн үед гаргасан алдаа хугацаа өнгөрөх тусам засахад хэцүү болоод байдаг хуультай.
Кодыг байнга нийлэмжтэй байлгахын тулд нэг газар төвлөрүүлж хадгалах хэрэгтэй болох нь ойлгомжтой. Энэ ажлыг хийдэг багажыг “эх кодын удирдлагын хэрэгсэл” гэдэг бөгөөд CVS, Subversion зэргийг дурдаж болно. CVS маш түгээмэл хэрэглэгддэг эх кодын удирдлагын систем юм. Харин сүүлийн үед Subversion ийг хэрэглэгчид нилээд ихсэж байгаа сурагтай байна. Эдгээр хэрэгслүүд нь эх кодын сүүлийн хувилбарыг хадгалахаас гадна өмнөх хувилбарууд, өөрчлөлтүүдыг хадгалж үлддэг чадвартай.
Хөгжүүлэгч эх кодоос сүүлийн хувилбарыг татаж авах бөгөөд түүн дээр өөрчлөлт хийгээд эргээгээд хадгална. Энэ үед тухайн код дээр өөр нэг хөгжүүлэгч өөрчлөлт хийчихсэн байвал систем маань түүнийг мэдрээд зохих хариуг өгөх юм. Ингээд нэгдсэн кодтой болсноор түүнийг ойр ойрхон хөрвүүлэлт хийж үзээд нийцтэй байгаа эсэхийг шалгаад байх боломжтой болно.
Хөрвүүлэлтийг гараараа ч хийж болно, эсвэл тодорхой хугацааны эргэлттэйгээр ч хийгдэж байхаар тохируулсан ч болно. Эсвэл эх код дээр өөрчлөлт хийгдэх бүрт автоматаар хөрвүүлэлт хийгддэг байвал бүр сайн. Ингэвэл эх код руу нийлүүлэлт хийсэн хөгжүүлэгч өөрийн кодыг нийцтэй байгаа эсэхийг шууд мэдэх боломжтой болох юм.
Гэхдээ зөвхөн хөрвүүлэлт амжилттай хийгдсэнээр кодыг зөв байна гэж болохгүй нь мэдээж, тэгэхээр тест мөн хөрвүүлэлт хийгдсэний дараа автоматаар хийгддэг байвал жинхэнэ “тасралтгүй нийлүүлэлт”-ийг хэрэгжүүлж чадлаа гэсэн үг. Автомат тестийг хийхэд XUnit төрлийн тестийг автоматжуулах хэрэгсэлүүдийг ашиглаж болно. XUnit төрлийн хэрэгслүүдийг зөвхөн хөгжүүлэгч өөрийн хөгжүүлэлтийн орчинд ашиглах нь тийм ч өгөөжтэй биш байдаг. Тухайлбал XUnit төрлийн хэрэгслийг цаг үрсэн хэрэггүй эд гэж үздэг хүмүүс зөндөө байдаг. Тэгвэл нийлүүлэлтийг автоматаар хийх үед тестийг автоматжуулахад XUnit тэстүүдийг ашиглавал өгөөжийг нь бүрэн мэдрэх болно. Тасралтгүй нийлүүлэлтийг хэрэгжүүлэхийн тулд төслийг эхлэхээс авахуулаад нягт нямбай хийх хэрэгтэй байдаг.
Тасралтгүй нийлүүлэлтийн үед баримтлагддаг туршлагууд байдгыг товч жагсаавал:
- Эх кодыг нэгтгэж удирдах. Өмнө дурдсан CVS, Subversion зэрэг хэрэгслүүдийг тохируулах.
- Автоматаар хөрвүүлэлт хийгддэг байх.
- Тестийг мөн автоматжуулах.
- Хүн болгон ойр ойрхон эх код руу нийлүүлж байх. Хүн болгон ойр ойрхон нийлүүлэхгүй бол үнэндээ тасралтгүй нийлүүлэлт хийдэг систем байсны хэрэг гарахгүй.
- Нийлүүлэлт хийгдэх болгон хөрвүүлэлт болон тест хийгддэг байх.
- Нийлүүлэлтийн үр дүнг аль болох хурдан гаргаж үзүүлэх. Хөрвүүлэлт хийдэг сэрвэр тэст хйигддэг сэрвэрийг тусад нь байлгах, шаардлагатай хэсгийг л тэстлэх гэх мэтээр нийлүүлэтийг хурдасгаж болно.
- Тэстийг жинхэнэ орчинтой яг ижилхэн орчинд гүйцэтгэх. Энэ маань бас тасралгүй нийлүүлэлтийн нэг хэсэг гэж ойлгож болно. Эцсийн суурилуулах орчинг ч мөн тасралтгүй циклдээ оруулж байгаа хэрэг.
- Хамгийн сүүлийн ажиллах програмыг хүн бүхэн авч үзэхээр байлгах.
- Хүн бүхэн юу хийж байгаа кодод ямар өөрчлөлтүүд орж байгааг хүн бүхэн харж чаддаг байх.
- Зөөвөрлөлт шилжүүлэлтийг мөн автоматжуулах. Хөгжүүлэлтийн орчноос Тестийн орчин руу эцсийн бүтээгдэхүүнийг автоматаар зөөвөрлөх.
Ингээд хэрвээ та өөрийн багийн хөгжүүлэлтэндээ тасралтгүй нийлүүлэтийг туршиж үзмээр бол дараах нээлттэй бүтээлүүдээс туршаад үзээрэй.
Хэрэгслүүдийг шинж чанараар нь харьцуулалт хийсэн байна:
- Continuous Integration Server Feature Matrix
- Automation for the people: Choosing a Continuous Integration server
- Which open source CI tool is best suited for your application’s environment?
Бусад холбоосууд: