Үздіксіз интеграция - Continuous integration - Wikipedia

Бағдарламалық жасақтама жасау
Негізгі қызмет
Парадигмалар мен модельдер
Әдістемелер және шеңберлер
Қолдау пәндері
Тәжірибелер
Құралдар
Стандарттар және білім органдары
Глоссарийлер
Контурлар

Жылы бағдарламалық жасақтама, үздіксіз интеграция (CI) - бұл барлық әзірлеушілердің жұмыс көшірмелерін ортақ пайдалануға біріктіру тәжірибесі негізгі сызық күніне бірнеше рет.[1] Греди Бук алғаш рет CI терминін ұсынды оның 1991 жылғы әдісі,[2] ол күніне бірнеше рет интеграциялануды жақтамағанымен. Экстремалды бағдарламалау (XP) CI тұжырымдамасын қабылдады және күніне бірнеше рет интеграциялануды жақтады - мүмкін күніне он рет.[3]

Негіздеме

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

Даму магистральға оралмай филиалда жалғасқан сайын, интеграциялық қақтығыстардың пайда болу қаупі соғұрлым көп болады[4] және әзірлеуші ​​филиалы қайтадан біріктірілген кездегі сәтсіздіктер. Әзірлеушілер репозитарийге код жіберген кезде, алдымен репозиторийдегі көшірмесін алғаннан кейінгі өзгерістерді көрсету үшін кодты жаңартады. Репозиторийде қаншама өзгерістер болса, әзірлеушілер өз өзгерістерін жібермес бұрын соғұрлым көп жұмыс жасауы керек.

Сайып келгенде, репозиторий әзірлеушілердің негізгі сызбаларынан өзгеше болуы мүмкін, олар кейде «біріктіру тозақ» немесе «біріктіру тозақ» деп аталатын нәрсеге енеді,[5] мұнда интеграциялануға кететін уақыт олардың бастапқы өзгерістерін енгізуге кеткен уақыттан асып түседі.[6]

Жұмыс процестері

Тесттерді жергілікті деңгейде іске қосыңыз

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

CI кодын компиляциялау

Құрылыс сервері кодты мезгіл-мезгіл немесе тіпті әрбір жасалғаннан кейін құрастырады және нәтижелерін әзірлеушілерге хабарлайды. Құру серверлерін пайдалану XP (экстремалды бағдарламалау) қауымдастығынан тыс енгізілген болатын және көптеген ұйымдар барлық XP-ді қабылдамай CI қабылдады.

CI-де тестілерді іске қосыңыз

Автоматтандырылған блок сынақтарынан басқа, CI қолданатын ұйымдар, әдетте, енгізу үшін құрастыру серверін қолданады үздіксіз қолдану процестері сапа бақылауы жалпы - жиі қолданылатын кішкене күш-жігер. Бөлім мен интеграция тесттерін жүргізуден басқа, мұндай процестер қосымша статикалық анализдер жүргізеді, өнімділікті өлшейді және профилдейді, бастапқы кодтан құжаттаманы шығарады және пішімдейді және нұсқаулықты жеңілдетеді QA процестер. Танымал туралы Travis CI ашық көзге арналған қызмет, тестілеуді CI жұмыс орындарының тек 58,64% құрайды.[7]

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

CI-ден артефакт орналастырыңыз

Енді CI жиі араласады үздіксіз жеткізу немесе үздіксіз орналастыру CI / CD құбыры деп аталады. «Үздіксіз жеткізу» магистральда тіркелген бағдарламалық жасақтаманың әрдайым пайдаланушыларға жайғастырылатын күйде болатындығына көз жеткізеді және «үздіксіз орналастыру» орналастыру процесін толығымен автоматтандырады.

Тарих

Үздіксіз интеграция туралы алғашқы еңбек - Г.Э.Кайзер, Д.Э.Перри және В.М.Шелл дамытқан Infuse ортасы.[8]

1994 жылы Грэйди Бук үздіксіз интеграциялау тіркесін қолданды Қолданбалармен объектіге бағытталған талдау және жобалау (Екінші басылым)[9] микро процестерді қолдана отырып дамыта отырып, «ішкі релиздер жүйенің үздіксіз интеграциясын бейнелейтінін және микро процесті жабу үшін болатынын» түсіндіру.

1997 жылы, Кент Бек және Рон Джеффрис ойлап тапты Экстремалды бағдарламалау Кезінде (XP) Chrysler компенсациялық жүйесі үздіксіз интеграцияны қамтитын жоба.[1][өзін-өзі жариялаған ақпарат көзі ] Бек 1998 жылы үздіксіз интеграция туралы жариялады, технологиялық қолдаудың алдында бетпе-бет сөйлесудің маңыздылығын атап өтті.[10] 1999 жылы Бек өзінің экстремалды бағдарламалау туралы алғашқы толық кітабында көбірек нақтылады.[11] CruiseControl, алғашқы CI құралдарының бірі,[12][өзін-өзі жариялаған ақпарат көзі ] 2001 жылы шығарылды.

Жалпы тәжірибелер

Бұл бөлімде тізімдер берілген озық тәжірибелер үздіксіз интеграцияға жету және осы тәжірибені қалай автоматтандыру туралы әртүрлі авторлар ұсынған. Автоматтандыру бұл озық тәжірибенің өзі.[13][14]

Үздіксіз интеграция - жаңа немесе өзгертілген кодты қолданыстағы код репозиторийімен жиі интеграциялау тәжірибесі - жиі орын алуы керек, сондықтан аралық терезе қалмайды міндеттеме және салу және әзірлеушілер байқамай, оларды дереу түзетпейінше ешқандай қателіктер туындамауы мүмкін.[1] Қалыпты практика - бұл кез-келген жоспарланған құрастырудан гөрі, репозитарийге жасалынған барлық құрылымдардан бас тарту. Мұны жылдам жасалынатын мульти-дамытушы ортада жасаудың практикалық ерекшеліктері мынаны білдіреді: әр міндеттеме жасалғаннан кейін қысқа уақытты іске қосу, содан кейін құрылғыны осы таймердің бітуі немесе соңғы құрастырудан кейінгі ұзақ уақыттан кейін бастау қажет. . Әрбір жаңа міндеттеме қысқа уақыт триггері үшін пайдаланылатын таймерді қалпына келтіретіндіктен, бұл көптеген батырмаларды жою алгоритмдерінде қолданылатын әдіс.[15] Осылайша жедел іс-қимылдар сериясы арасында қажетсіз құрылыстың алдын алу үшін іс-шаралар «жария етіледі». Көптеген автоматтандырылған құралдар бұл жоспарлауды автоматты түрде ұсынады.

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

Осы мақсаттарға жету үшін үздіксіз интеграция келесі принциптерге сүйенеді.

Код репозиторийін жүргізіңіз

Бұл тәжірибе жобаның бастапқы коды үшін қайта қарау жүйесін қолдануды қолдайды. Жобаны құруға қажетті барлық артефактілер репозиторийге қойылуы керек. Бұл практикада және қайта қарауды бақылау қоғамдастығы жүйені жаңа кассадан құрастыруға болатындығы және қосымша тәуелділіктерді қажет етпейтіні туралы тұжырым жасайды. Экстремалды бағдарламалау адвокат Мартин Фаулер қайда екенін де ескертеді тармақталу құралдармен қолдау көрсетіледі, оны қолдануды барынша азайту керек.[16] Оның орнына бағдарламалық жасақтаманың бірнеше нұсқасын қатар ұстауға емес, интеграцияланғанға артықшылық беріледі. Негізгі сызық (немесе магистраль ) бағдарламалық жасақтаманың жұмыс нұсқасы болуы керек.

Құрылысты автоматтандырыңыз

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

Құрылыстың өзін-өзі тексеруіне жағдай жасаңыз

Код құрастырылғаннан кейін, барлық тестілер оны әзірлеушілер күткендей әрекет ететіндігін растау үшін өтуі керек.[17]

Барлығы күн сайын бастапқы деңгейге шығады

Жүйелі түрде жасай отырып, кез-келген тапсырыс беруші қайшылықты өзгерістердің санын азайта алады. Бір аптадағы жұмысты тексеру басқа ерекшеліктерге қайшы келу қаупін тудырады және оны шешу өте қиын болуы мүмкін. Жүйенің бір аймағындағы ерте, кішігірім қақтығыстар топ мүшелерінің өздері жасап жатқан өзгеріс туралы хабарлауына себеп болады.[18] Барлық өзгертулерді күніне кем дегенде бір рет жасау (бір функцияға бір рет), әдетте, үздіксіз интеграция анықтамасының бөлігі болып саналады. Сонымен қатар а түнгі құрылыс әдетте ұсынылады.[дәйексөз қажет ] Бұл төменгі шекаралар; типтік жиілік әлдеқайда жоғары болады деп күтілуде.

Әрбір міндеттеме (бастапқы деңгейге дейін) жасалуы керек

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

Қателерді түзетудің кез-келген әрекеті сынақ ісімен бірге келуі керек

Қатені түзету кезінде қатені көбейтетін сынақ ісін итеру жақсы тәжірибе болып табылады. Бұл а деп аталатын түзетудің қалпына келтірілуіне және қатенің қайта пайда болуына жол бермейді регрессия. Зерттеушілер бұл тапсырманы автоматтандыруды ұсынды: егер қателерді түзету міндеттемесінде сынақ жағдайы болмаса, оны бұрыннан бар сынақтардан жасауға болады.[19]

Құрылысты тез сақтаңыз

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

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

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

Соңғы жеткізілім материалдарын алуды жеңілдетіңіз

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

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

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

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

Орналастыруды автоматтандыру

CI жүйелерінің көпшілігі сценарийлерді құрастыру аяқталғаннан кейін іске қосуға мүмкіндік береді. Көптеген жағдайларда, қосымшаны тірі тест-серверге орналастыру үшін сценарий жазуға болады, оған барлығы қарауы мүмкін. Бұл ойлаудың алға жылжуы үздіксіз орналастыру бағдарламалық жасақтаманы ақаулардың немесе регрессиялардың алдын алу үшін көбінесе қосымша автоматтандырумен тікелей өндіріске орналастыруды талап етеді.[20][21]

Шығындар мен артықшылықтар

Үздіксіз интеграция келесідей пайда әкелуге арналған:

  • Интеграциялық қателер ерте анықталған және кішігірім өзгерістер жиынтығының арқасында іздеу оңай. Бұл жобаның қызмет ету мерзімі ішінде уақыт пен ақшаны үнемдейді.
  • Барлығы өздерінің сәл сәйкес келмейтін нұсқаларын тексеруге тырысқанда, шығарылым күндеріндегі соңғы минуттағы хаосты болдырмайды
  • Қондырғының сынақтары сәтсіз болған кезде немесе а қате пайда болады, егер әзірлеушілерге код базасын қатесіз күйге қайтару қажет болса түзету, өзгерістердің аз саны ғана жоғалады (өйткені интеграция жиі болады)
  • Тестілеу, демонстрациялау немесе шығару мақсатында «ағымдағы» құрылымның тұрақты қол жетімділігі
  • Кодты жиі тіркеу бағдарламалаушыларды модульдік, онша күрделі емес код жасауға итермелейді[дәйексөз қажет ]

Үздіксіз автоматтандырылған тестілеудің артықшылықтары:

Үздіксіз интеграцияның кейбір кемшіліктері мыналарды қамтуы мүмкін:

  • Автоматтандырылған тест-люкс құру үшін жаңа функцияларды қамтуға және кодты әдейі өзгертуге бағытталған күш-жігерді қоса алғанда, айтарлықтай жұмыс қажет.
  • А орнату үшін бірнеше жұмыс бар құрастыру жүйесі және ол күрделі болып, икемді түрлендіруді қиындата алады.[22]
  • Егер жобаның ауқымы аз болса немесе тексерілмейтін мұра кодын қамтыса, үздіксіз интеграция міндетті түрде құнды болмайды.
  • Қосылған құн тестілердің сапасына және кодтың қаншалықты тексерілетіндігіне байланысты.[23]
  • Үлкен командалар интеграция кезегіне үнемі жаңа код қосылатындығын білдіреді, сондықтан жеткізілімдерді қадағалау (сапаны сақтай отырып) қиын және кезекте тұру барлығын баяулатуы мүмкін.[23]
  • Күніне бірнеше рет жасалған және біріктірілген кезде, функцияның ішінара кодын оңай жіберуге болады, сондықтан функция аяқталғанға дейін интеграция тестілері сәтсіздікке ұшырайды.[23]
  • Қауіпсіздік және дамудың маңызды міндеті (мысалы, DO-178C, ISO 26262 ) үздіксіз интеграцияны қолдану арқылы қол жеткізуге қиын болатын қатаң құжаттама мен процесстегі шолуды талап етеді. Өмірлік циклдің бұл түрі көбінесе өнімді шығаруға дейін өнімді келісуге рұқсат беру қажет болған кезде қосымша қадамдар жасауды талап етеді.

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ а б c Фаулер, Мартин (2006 ж. 1 мамыр). «Үздіксіз интеграция». Алынған 9 қаңтар 2014.
  2. ^ Бук, Греди (1991). Нысанға бағытталған дизайн: қосымшалармен. Бенджамин Каммингс. б. 209. ISBN  9780805300918. Алынған 18 тамыз 2014.
  3. ^ Бек, К. (1999). «Экстремалды бағдарламалаумен өзгерісті қамту». Компьютер. 32 (10): 70–77. дои:10.1109/2.796139. ISSN  0018-9162.
  4. ^ Дувалл, Пол М. (2007). Үздіксіз интеграция. Бағдарламалық жасақтаманың сапасын жақсарту және тәуекелді азайту. Аддисон-Уэсли. ISBN  978-0-321-33638-5.
  5. ^ Каннингэм, Уорд (5 тамыз 2009). «Интеграциялық тозақ». WikiWikiWeb. Алынған 19 қыркүйек 2009.
  6. ^ «Үздіксіз интеграция дегеніміз не?». Amazon веб-қызметтері.
  7. ^ Дюрие, Томас; Абреу, Руй; Монперрус, Мартин; Биссанде, Тегаменде Ф .; Круз, Луис (2019). «Travis CI-дің 35+ миллион жұмысына талдау». Бағдарламалық қамтамасыз ету мен эволюцияға арналған IEEE халықаралық конференциясы (ICSME). IEEE: 291–295. arXiv:1904.09416. Бибкод:2019arXiv190409416D. дои:10.1109 / ICSME.2019.00044. ISBN  978-1-7281-3094-1. S2CID  203593737.
  8. ^ Кайзер, Г. Е .; Перри, Д. Е .; Шелл, В.М. (1989). Тұндыру: интеграциялық тестілеуді басқаруды өзгертулерді басқарумен біріктіру. Компьютерлік бағдарламалық қамтамасыздандыру және қолданбалы он үшінші халықаралық конференция материалдары. Орландо, Флорида. 552-558 бет. дои:10.1109 / CMPSAC.1989.65147.
  9. ^ Booch, Grady (желтоқсан 1998). Қосымшалармен объектіге бағытталған талдау және жобалау (PDF) (2-ші басылым). Алынған 2 желтоқсан 2014.
  10. ^ Бек, Кент (28 наурыз 1998). «Экстремалды бағдарламалау: бағдарламалық жасақтама жасаудың гуманистік пәні». Бағдарламалық жасақтама жасаудың негізгі тәсілдері: Бірінші халықаралық конференция. 1. Лиссабон, Португалия: Спрингер. б. 4. ISBN  9783540643036.
  11. ^ Бек, Кент (1999). Экстремалды бағдарламалау түсіндіріледі. Аддисон-Уэсли кәсіби. б.97. ISBN  978-0-201-61641-5.
  12. ^ «DevOps қысқаша тарихы, III бөлім: Автоматтандырылған тестілеу және үздіксіз интеграция». CircleCI. 1 ақпан 2018. Алынған 19 мамыр 2018.
  13. ^ Брунейс, Дэвид (1 қаңтар 2010). «[OSLC] Мүмкін болатын жаңа жұмыс тобы - Автоматтандыру». open-services.net қауымдастығы (Тарату тізімі). Архивтелген түпнұсқа 1 қыркүйек 2018 ж. Алынған 16 ақпан 2010.
  14. ^ Тейлор, Брэдли. «ShadowPuppet және Capistrano көмегімен рельстерді орналастыру және автоматтандыру». Рельстер машинасы (Дүниежүзілік өрмек журнал). Архивтелген түпнұсқа 2012 жылдың 2 желтоқсанында. Алынған 16 ақпан 2010.
  15. ^ Мысалға қараңыз «Дебют». Ардуино. 29 шілде 2015.
  16. ^ Фаулер, Мартин. «Тәжірибелер». Үздіксіз интеграция (мақала). Алынған 29 қараша 2015.
  17. ^ Радги, Дэн. «Үздіксіз интеграция». Atlassian Agile Coach.
  18. ^ «Үздіксіз интеграция». Ойлау жұмыстары.
  19. ^ Данглот, Бенджамин; Монперрус, Мартин; Рудаметкин, Вальтер; Бодри, Бенуа (5 наурыз 2020). «Үздіксіз интеграция кезіндегі міндеттемелердің мінез-құлық өзгерістерін анықтау тәсілі мен эталоны». Бағдарламалық жасақтама эмпирикалық. 25 (4): 2379–2415. arXiv:1902.08482. дои:10.1007 / s10664-019-09794-7. ISSN  1382-3256. S2CID  67856113.
  20. ^ Рис, Эрик (30 наурыз 2009). «5 қарапайым қадамда үздіксіз орналастыру». Радар. Рейли. Алынған 10 қаңтар 2013.
  21. ^ Фитц, Тимоти (10 ақпан 2009). «IMVU-да үздіксіз орналастыру: мүмкін емес мүмкіндікті күніне елу рет жасау». Wordpress. Алынған 10 қаңтар 2013.
  22. ^ Laukkanen, Eero (2016). «Үздіксіз жеткізуді қабылдау кезіндегі проблемалар, себептер және шешімдер - жүйелі әдеби шолу». Ақпараттық және бағдарламалық технологиялар. 82: 55–79. дои:10.1016 / j.infsof.2016.10.001.
  23. ^ а б c Деббиче, Адам. «Бағдарламалық жасақтама талаптарының бұзылуы жағдайында үздіксіз интеграцияның қиындықтарын бағалау: жағдайлық есеп» (PDF).

Сыртқы сілтемелер