Кіріспе

Бағдарламалық жасақтаманы жасау және сынақтан өткізу практикасы. Үздіксіз интеграция (CI) – бағдарламалық жүйені дамыту барысында оны жиі құрастыру және сынақтан өткізу практикасы. Ол бағдарламашылар жазған кодтың әрқашан құрастырылатынын, жұмыс істейтінін және автоматты тестілеуден өтетінін қамтамасыз етуге бағытталған. Дамытушылар интеграциялық тармаққа өзгерістерін енгізеді, ал автоматтандырылған жүйе оны құрастырып, сынақтан өткізеді. Күнде бірнеше рет интеграциялауды тікелей ұсынбаса да, кейіннен CI осы мүмкіндікті де қамтыды.

Тарих

Тұрақты интеграция бойынша ең алғашқы белгілі жұмыс G. E. Kaiser, D. E. Perry және W. M. Schell әзірлеген Infuse ортасы болды. 1994 жылы Грейди Буч «Object Oriented Analysis and Design with Applications» (2-ші басылымы) кітабында микропроцестерді пайдалана отырып дамыту қалай жүргізілу керектігін түсіндіру үшін «үздіксіз интеграция» терминін қолданды. Ол: «ішкі релиздер жүйенің бір түрі ретінде үздіксіз интеграцияны білдіреді және микропроцестерді аяқтауға итермелейді» деді. 1997 жылы Кент Бек және Рон Джеффрис Chrysler Comprehensive Compensation System жобасы аясында, үздіксіз интеграцияны да қамти отырып, экстремалды бағдарламалау (XP) әдісін ойлап тапты. Бек 1998 жылы үздіксіз интеграция туралы жариялап, технологиялық қолдаудан гөрі тікелей байланыстың маңыздылығын атап өтті. 1999 жылы Бек экстремалды бағдарламалау туралы алғашқы толық кітабында бұл мәселенің мәнін одан әрі ашты. 2001 жылы CruiseControl – алғашқы ашық кодты CI құралдарының бірі жарық көрді. 2010 жылы Тимоти Фиц IMVU инженерлік тобының алғашқы практикалық CI жүйесін қалай құрастырғаны және пайдаланғаны туралы егжей-тегжейлі мақала жариялады. Оның жазбасы бастапқыда күмәнмен қабылданса да, ол тез арада IMVU-ға негізделген Lean бағдарламалық жасақтаманы әзірлеу әдістемесінің бір бөлігі ретінде кеңінен қолданыс тапты.

Мақсаты

CI-дің мақсаты – автоматтандырылған процесті жеткілікті жиілікте іске қосу, осылайша коммит пен құрастыру арасында ешқандай үзіліс қалмауы, және қателер әзірлеушілердің назарына ілігіп, дереу түзетілуі тиіс. Сервер сонымен қатар статикалық талдау, өнімділікті өлшеу, бастапқы кодтан құжаттаманы шығару және қолмен QA процестерін жеңілдету сияқты басқа да сапаны бақылау және бағдарламалық қамтамасыз ету сапасы процестерін де жүзеге асыруы мүмкін.

Қатынасты іс-әрекеттер

Бұл бөлімде үздік тәжірибелерді қолданушылардың CI-ді күшейтуге бағытталған басқа да тәжірибелері тізімделген.

Автоматтандыруды құру

Автоматтандыру – үздік тәжірибе.

Атомдық міндеттемелер

CI нұсқаны басқару жүйесі атомдық тіркеуді қолдауын қажет етеді; яғни, дамытушы жасаған барлық өзгерістер бір тіркеу ретінде орындалуы тиіс.

Өзгерістерді енгізу

Кодты өзгерткенде, әзірлеуші қолданыстағы код базасының көшірмесін құрайтын тармақ жасайды. Басқа өзгерістер репозиторийге сақталғанда, бұл көшірме соңғы нұсқадан айырмашылыққа ие болады. Интеграциялық тармаққа біріктірілмей, тармақтағы жұмыс қаншалықты ұзарса, әзірлеуші тармағы қайтадан біріктірілгенде, соғұрлым көп интеграциялық қақтығыстар мен сәтсіздіктер туындау қаупі артады. Әзірлеушілер кодты репозиторийге жібергенде, ең алдымен өздерінің көшірмесін алғаннан бері репозиторийде болған өзгерістерді көрсету үшін кодын жаңартуы керек. Репозиторийдегі өзгерістердің саны неғұрлым көп болса, әзірлеушілер өз өзгерістерін жібермес бұрын соғұрлым көп жұмыс істеуі керек болады. Соңында, репозиторий әзірлеушілердің бастапқы нұсқаларынан соншалықты ерекшеленуі мүмкін, олар кейде "біріктіру тозағы" немесе "интеграция тозағы" деп аталатын жағдайға түседі, онда интеграциялауға кеткен уақыт бастапқы өзгерістерді жасауға кеткен уақыттан асып түседі.

Тұрақты жеткізу және үздіксіз қолдану

Тұрақты жеткізу интеграциялық тармаққа қосылған бағдарламалық жасақтаманың әрқашан қолданушыларға орналастыруға дайын күйде болуын қамтамасыз етеді, ал үздіксіз орналастыру орналастыру процесін автоматтандырады. Тұрақты жеткізу және үздіксіз орналастыру көбінесе CI-мен бірге қолданылады және олар бірлесіп CI/CD құбыржолын құрайды.

Нұсқаларды басқару

CI жақтастары құрастыру үшін қажетті барлық файлдар мен ақпаратты нұсқаны басқару жүйесінде (git үшін – репозиторийде) сақтауды ұсынады; жүйені таза көшіруден құрастыруға болып, қосымша тәуелділіктерді қажет етпеуі тиіс. Мартин Фаулер барлық дамытушылардың бір интеграциялық тармаққа өзгерістерін жіберуін ұсынады.

Құруды автоматтандыру

Автоматтандыру құралдары құрастыру процесін автоматтандырады. Үзіліссіз интеграцияны жақтаушылар жүйені құру үшін бір команда жеткілікті болуы керек деп санайды. Автоматтандыру көбінесе интеграцияны автоматтандыруды қамтиды, ал ол көбінесе өндірістік ортаға орналастыруды қамтиды. Көптеген жағдайларда, құрастыру скрипті тек бинарлық файлдарды ғана құрастырмай, сонымен қатар құжаттаманы, веб-сайт беттерін, статистиканы және тарату орталарын (мысалы, Debian DEB, Red Hat RPM немесе Windows MSI файлдары) да жасайды.

Әркім күн сайын негізгі деңгейге бағынуда

Әрбiр коммиттер тұрақты түрде коммиттеу арқылы, қақтығыс тудыратын өзгерістер санын азайта алады. Апталық жұмыстың барлығын бірден тексеру, басқа мүмкіндіктермен қақтығысқа түсу қаупін тудырады және оны шешу өте қиын болуы мүмкін. Жүйенің бір бөлігіндегі ерте, шағын қақтығыстар команда мүшелерін жасап жатқан өзгерістері туралы әңгімелесуге итермелейді. Барлық өзгерістерді күніне кемінде бір рет (әр құрылған мүмкіндік үшін бір рет) коммиттеу, әдетте, үздіксіз интеграцияның анықтамалық бөлігі саналады. Сонымен қатар, түнде құрастыру жасау ұсынылады. Бұл ең төменгі шектер, ал әдеттегі жиілігі одан да жоғары болуы керек.

Әрбір коммит құрылуы тиіс

Жүйе ағымдағы жұмыс нұсқасына өзгерістерді (коммиттер) жасау арқылы олардың дұрыс интеграцияланғанын тексеруі керек. Көбінесе автоматтандырылған үздіксіз интеграция қолданылады, бірақ бұл қолмен де жасалуы мүмкін. Автоматтандырылған үздіксіз интеграция үздіксіз интеграция сервері немесе бағдарламасы арқылы нұсқаулықты басқару жүйесіндегі өзгерістерді қадағалап, құрастыру процесін автоматты түрде іске қосады.

Әрбір қателерді түзеуді тапсыру сынақ кейсімен бірге болуы тиіс

Қателерді түзету кезінде, осы қатені қайта жасайтын тест жағдайын қосу – жақсы тәжірибе. Бұл түзетудің кері қайтарылуына және қатенің қайта пайда болуына, яғни регрессияға жол бермейді.

Тез орнатуды жалғастыру

Құрылыс жылдам аяқталуы керек, интеграцияда мәселе туса, ол тез байқалады.

Өндірістік ортаның клонында сынақ

Сынақ ортасының болуы, сыналған жүйелерді өндірістік ортаға енгізген кезде қателерге алып келуі мүмкін, себебі өндірістік орта сынақ ортасынан маңызды жағынан өзгеше болуы мүмкін. Дегенмен, өндірістік ортаның толық көшірмесін жасау өте қымбатқа түседі. Оның орнына, сынақ ортасы немесе жеке өндіріске дейінгі орта ("сайыс") өндірістік ортаның кеңейтілген нұсқасы ретінде құрылуы тиіс, бұл технологиялық жиынтықтың құрамын және ерекшеліктерін сақтай отырып, шығындарды азайтуға мүмкіндік береді. Осы сынақ орталарында, қызметтерді виртуализациялау тәуелділіктерге (мысалы, API, үшінші тарап қолданбалары, қызметтер, мейнфреймдер және т.б.) қажет болғанда қол жеткізу үшін жиі қолданылады, олар команданың бақылауында болмағанда, даму кезеңінде болғанда немесе виртуалды сынақ зертханасында конфигурациялау қиын болғанда пайдалы.

Соңғы нәтижелерді оңай алуға мүмкіндік беру

Мүдделі тараптар мен тестілеушілерге құрастыруды дереу қолжетімді ету, талаптарға сай келмейтін мүмкіндікті қайта жасау кезіндегі қажетті жұмыстың көлемін азайтуға мүмкіндік береді. Сонымен қатар, ерте тестілеулер ақаулардың енгізілгенге дейін анықталмауының ықтималдығын төмендетеді. Қателерді ертерек табу оларды түзетуге жұмсалатын еңбекті азайтады. Барлық бағдарламашылар күнін жобаны репозиторийден жаңартудан бастауы тиміс. Осылайша, олардың барлығы жаңа жағдаймен таныс болады.

Барлық адамдар соңғы нұсқаның нәтижелерін көре алады

Құрастыру қате шықса, оны анықтау және егер қателік болса, осы өзгерісті кім жасады және ол өзгеріс қандай болды, соны білу оңай болуы керек.

Автоматты түрде орналастыру

CI жүйелерінің көпшілігі құрастыру аяқталғаннан кейін скрипттерді іске қосуға мүмкіндік береді. Көп жағдайда, қолданбаны тірі сынақ серверіне орналастыру үшін скрипт жазу мүмкін, оны барлығы көре алады. Осы тәсілдің одан әрі дамуы – үздіксіз енгізу, ол бағдарламалық құралды тікелей өндіріске орналастыруды қажет етеді, көбінесе ақаулар мен регрессияларды алдын алу үшін қосымша автоматтандырумен бірге.