2025 ж. 28 шіл.·2 мин

Ашық кодты CI/CD: командалар үшін GitLab CE және Gitea + Drone

Ашық кодты CI/CD: GitLab CE пен Gitea + Drone-ды команда көлемі, ИБ, интеграциялар және репозиторийлерді тарихы сақталып көшіру тұрғысынан салыстыру.

Ашық кодты CI/CD: командалар үшін GitLab CE және Gitea + Drone

Мәселе: бір өңдеу процесі, скрипттер жиынтығы емес

Көптеген командаларда CI/CD бір сервердегі бірнеше bash-скрипттен басталады. Жобалар аз болғанда бұл жұмыс істейді. Бірақ кейін хаос пайда болады: жинақтар "кейде" құлайды, релиз бір адамның қолына байланады, ал қолжетімдіктер мен секреттер әр тарапта шашырайды.

Көбінесе проблема pipeline-да емес, оның айналасында болады:

  • әртүрлі ортамен және нұсқалармен байланысты болжамсыз жинақтар
  • анық тарихы жоқ қолмен жасалатын релиздер мен кері қайтарулар
  • "сенімге" негізделген қолжетімдіктер, рөлдер мен процестерсіз
  • аудит: кім деплой бастағаны және нақты не өзгергені
  • секреттер айнымалыларда, файлдарда және чаттарда – бақылаусыз

Сондықтан көптеген ұйымдар on-prem үшін ашық кодты CI/CD таңдайды. Осылайша бастапқы код қай жерде сақталатынын, кімнің қолы жететінін, аудит қалай жүретінін және жаңартулар мен инциденттер кезінде деректермен не болатынын бақылаған оңай. Бұл шағын өнімдік командалар үшін де, қатал ИБ талаптары бар ұйымдар үшін де маңызды (мемлекеттік сектор, қаржы, медицина, білім).

Төменде екі практикалық тәсіл қарастырылған.

GitLab CE — бұл "бәрі бір жерде": репозиторийлер, issue-трекинг, CI, registry және рұқсаттар бір жүйеде.

Gitea + Drone — бұл құрамдас бөліктер жиынтығы: жеңіл Git-сервер (Gitea) пен бөлек CI жүйесі (Drone), қажет болса қосымша сервистер (артефакт сақтау, registry, секреттер).

Материал команда мөлшері, жобалар саны және интеграцияларға (мысалы, LDAP/AD, хабарландырулар, артефактілер) сай шешім таңдағанда пайдалы болады, сондай-ақ репозиторийлерді тарихын сақтай отырып және жұмыс үзілісін азайтып көшіру қажет болса да.

Екі тәсіл: бәрі бірде ме әлде компоненттер жиынтығы ма

Ашық кодқа негізделген CI/CD құру кезінде әдетте екі жолдың бірін таңдайды: барлығы бар ірі платформа немесе өз ережелеріңізге сай жинақталған шағын құралдар жиынтығы.

GitLab CE — Git пен CI айналасындағы монолитті платформа. Бір интерфейсте сіз репозиторийлер, merge request-тер, кірістірілген CI, негізгі рұқсат саясаты, журналдар, раннерлерді басқару және бірнеше ыңғайлы функцияларды аласыз, бұл бастау кезінде уақыт үнемдейді. Минусы: жаңартулар мен баптаулар ауырлау болуы мүмкін, ал артық мүмкіндіктер кей кезде қатал ИБ талаптарына кедергі келтіруі мүмкін.

Gitea — жеңіл Git-сервер, ал Drone — бөлек CI. Мұндай шешім жеңілірек ұсталады: әр қызметте аз функция, оқшаулауды оңайлау, орта арасында тасымалдау жеңіл. Бірақ бәрін "жапсыру" сізге келеді: рөлдер, біріккен кіру, секреттер сақтау ережелері, пайплайн шаблондары, бақылау.

Практикада айырмашылық көбінесе мынада:

  • GitLab CE біртұтас процесті тез береді және "қалай жасау" сұрақтарын азайтады
  • Gitea + Drone архитектура мен оқшаулау еркіндігін береді, бірақ инженерлік тәртіп талап етеді
  • монолитте команданы оқыту оңай, компоненттік шешімде жеке бөліктерді ауыстыру жеңіл
  • монолитте жаңарту қателерінің зардаптары жоғары, модульдік шешімде интеграция нүктелері көп

Қандай шешім таңдалса да, бірнеше міндетті заттар қажет. Олардың болмауы CI/CD-ны тез арада былыққа айналдыруы мүмкін: артефакттар мен образдар реестрі, секреттер сақтау және ротация ережелері, раннерлер мен кезектер үшін мониторинг пен ескертулер, бэкаптар және қалпына келтіру тексерістері.

Кіші команда үшін іске қосу жылдамдығы маңызды болса, "бәрі бірде" шешімі жиі жеңеді. Оқшаулану, минималды сервистер және қатаң құқық бақылауы маңызды ұйымдарда (мемлекет, қаржы) Gitea + Drone жиі ішкі регламенттерге оңай үйлестіріледі, бірақ оны жинау мен қызмет көрсетуге көбірек уақыт қажет.

Команда көлемі мен жоба саны бойынша таңдау

GitLab CE мен Gitea + Drone таңдау әдетте "қайсысы жақсы" емес, адамның және репозиторийлердің санына, және ережелердің қаншалықты біркелкі болуы керектігіне байланысты. Құрал командамен бірге өсіп, әр жарты жылда процестерді қайта жаздыртпауы керек.

Егер бір репозиторий және 5–10 адам болса, қарапайымдылық жеңеді. GitLab CE жаңадан келгендерге жиі түсінікті: репозиторий, issues, merge request және пайплайндар бір жерде. Gitea + Drone да тез тұрады, бірақ сізге басынан келісім керек: қайда review ережелері "тұрады", секреттер қайда сақталады, екі жүйенің кім күтініп отыратыны және адамдар қажетті баптауларды қалай табатыны.

Бірнеше команда және ондаған жоба пайда болғанда "стыктар" сезіледі. GitLab CE-де біркелкі пайплайн шаблондары, құқықтар, топтар мен тармақ ережелерін бекіту оңайырақ. Gitea + Drone-де бұл да мүмкін, бірақ жиі келісімдер мен тәртіп талап етеді: конфиг шаблондары, ортақ плагиндер, репозиторий мен орта атауларының біркелкі схемасы.

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

Шамалап бағыт:

  • 1–10 репозиторий: не тез енгізіледі және оқытылуы оңай — таңдаңыз (көбіне GitLab CE)
  • 10–100 репозиторий: біркелкі ережелер мен шаблондарды қолдау жеңіл жүйені таңдаңыз (көбіне GitLab CE, бірақ компоненттік шешім де жұмыс істейді жақсы стандарттармен)
  • 100+ репозиторий: әкімшілерге түсетін жүктемені, топтық баптаулардың ыңғайлылығын және жаңартулардың болжамдылығын бағалаңыз

Прост мысал: жүйелік интеграторда бірнеше команда (инфрақұрылым, қосымшалар, қолдау) бастапқыда іске қосу жылдамдығы маңызды. Бірақ жобалар ондаған болғанда бірдей тексерулер, анық рөлдер және аз "ерекше жағдайлар" маңызды болады. Көбінде осы кезең таңдау жасауда шешуші болып табылады.

ИБ талаптары: қолжетімдіктер, аудит, секреттер және оқшаулану

Жүйеге келесі қолдау
CI-ды релиздер бөгетсіз жұмыс іте берсін деп 24/7 қолдау мен реакция ұйымдастырамыз.
Қолдауға қосу

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

Рөлдер мен құқықтар: кім не істей алады

Әуелі үш нәрсені жеке басқара алатынын тексеріңіз: кім репозиторийді көре алады, кім пайплайндарды іске қосуға құқылы және кім қорғалған тармақтарға merge жасай алады. Кіші командаларда бұл рөлдер жиі бірдей болады, бірақ бірнеше жоба бар компанияларда бөлу маңызды. Мысалы, мердігер кодқа және Merge Request-ке қол жеткізе алады, бірақ продқа деплой іске қоса алмайды.

Пайдалануға пайдалы ережелерді алдын ала бекітіңіз: қорғалған тармақтар, міндетті ревью, тікелей push-тарды тыйу, пайплайн конфигін өзгертетін құқықтарды бөлек ұстау. Барлығына CI конфигін өзгерту рұқсатын бере салсаңыз, біреу оңай секреттерді логқа шығаратын қадам қосып жіберуі мүмкін.

Аудит, секреттер, оқшаулану және желі

Тексеру және тергеу үшін қажет журналдар: кім құқықтарды өзгертті, кім кілттер қосып, кім жинақтарды іске қосты және пайплайн айнымалыларын кім өзгертті. Аудит DevOps әкімшілеріне ғана емес, бақылау жауапты тұлғаларына да қолжетімді болуы тиіс.

Секреттер (токендер, паролдар, кілттер) көбінесе қарапайым қателіктерден "асылады": репозиторийге салу, логтарға шығу немесе пайплайндарға тым кең құқық беру. Секреттерді қорғалған айнымалыларда сақтау, қолжетімділікті орталарға байланыстыру (dev/stage/prod) және қай тармақтар қолдана алатындығын шектеу практикалық шешім.

Раннерлерді оқшаулау — ИБ тұрғысынан маңызды пункт. Бір ортақ раннер барлық жобаларды жинайтын болса, біреуінде пайда болған уязвимость басқа жобаларға жол ашады.

Минимум тиімді тәжірибелер:

  • сенімді және сенімсіз жобаларға жеке раннерлер
  • бір жерде privileged режимін тек қажет жерге қосу
  • желілік ережелер: раннер тек қажетті сервистерді көруі керек
  • продқа деплой тек қорғалған тармақтардан және қолмен растаумен
  • CI үшін адам әкімшісі емес, жеке есепшоттар мен кілттер

Егер пайплайн продқа қолжетімді болса, оны VPN немесе bastion сияқты критикалық деп ойлаңыз: желіні сегментациялау және минималды құқықтар маңыздырақ.

FAQ

Ең алдымен не таңдау керек: GitLab CE немесе Gitea + Drone?

Егер сізге «қалай істеуді» аз таңдау қажет болса және біртұтас процесті жылдам іске қосу маңызды болса, көбіне GitLab CE таңдалады. Ол репозиторийлерді, merge request-терді және CI-ды бір жерде жабады, сондықтан команданы оқыту және тәртіп орнату оңайырақ. Егер сізге минималды сервис жинағы, оқшаулау және компоненттерді жеке ауыстыру мүмкіндігі керек болса, Gitea + Drone жұбы ыңғайлы болады, бірақ стандарттар мен «склейка» үшін жауап сізде болады.

Қалай түсінуге болады: шешім команда көлемі мен репозиторий санына сай келеді ме?

Кіші командаларға әдетте іске қосу жылдамдығы және «қораптан шыққандай» біртұтас ережелер маңыздырақ, сондықтан GitLab CE жиі оңайырақ болады. 10–100 репозиторийдері бар командалар үшін шаблондар, құқықтар мен топтарды басқару маңызды — мұнда монолит те ыңғайлы, егер сіз оны әкімшілеуге дайын болсаңыз. 100+ репозиторий деңгейінде шешуші фактор — қолдау жүктемесі: жаңартулар, раннерлер, аудит, бэкаптар және интеграциялар.

CI/CD-да қандай бастапқы құқық ережелерін орнату керек?

Үш нәрсені бөлуге бастаңыз: репозиторийлерді көру құқығы, пайплайндарды іске қосу құқығы және қорғалған тармақтарға merge жасау құқығы. Тіпті кіші командада да main-ға тікелей push-ты шектеу және міндетті код-ревью бекіту пайдалы. Бөлек түрде CI конфигін өзгертуді шектеңіз: егер әркім оны өзгерте алса, біреу логтарға секреттерді шығаратын қадам қоса алады.

Пайплайндарда секреттермен қауіпсіз жұмыс істеудің ең дұрыс тәсілі қандай?

Секреттерді қорғалған айнымалыларда сақтаңыз және қолжетімділікті орталарға (dev/stage/prod) байланысты тағайындаңыз, бірден барлық пайплайндарға бермеңіз. Қандай тармақтардың секреттерді қолдана алатынын шектеңіз және мәндер логтарда жазылмауын қадағалаңыз. Ротацияны жоспарлаңыз: токендер мен кілттер мерзімді болуы және ауыстыру процесі айқын болуы керек.

Неліктен раннерлерді оқшаулау туралы бәрі айтады және оны қалай оңай жасауға болады?

Раннер — бұл инфрақұрылымға кіру нүктесі, сондықтан оны оқшаулау қажет. Пайдаланымды минимумға түсіретін практикалық шешім — сенімді және сенімсіз жобалар үшін бөлек раннерлер, сондай-ақ ортаға қарай (prod) бөлек раннерлер. privileged режимін еш себепсіз қоспаңыз және желіні шектеңіз: раннерге тек жинақтау мен деплой үшін қажет қызметтерге ғана қол жетімділік беріңіз.

CI өнімділігінде және тапсырмалар кезегін шешуде қалай қателеспеуге болады?

CI-ды екі бөлік ретінде ойлаңыз: сервис (Git/веб/БД) және есептеу (раннерлер). Көп жағдайда джобтарды бөлек машиналарға шығару дұрыс — солайша ауыр жинақ Git-сервисті «құлатпайды». Кезектер өссе, алдымен параллелділік лимиттерін және раннер санын тексеріңіз, содан кейін ғана ресурстарды ұлғайтыңыз.

Миграцияда не жоғалтпай көшіруге болады, ал не бөлек жоспарлауды қажет етеді?

Коммиттер тарихын, тармақтар мен тегтерді әдетте зеркальды көшіру арқылы сақтап апарасыз. Пайплайн конфигтері де репозиторийде тұрса көшеді. Алайда платформада сақталатындар бөлек жоспарлауды талап етеді: құқықтар, protected-тармақтар, айнымалылар, вебхуктар, секреттер, сондай-ақ issues, merge request-тер және жинақ тарихы.

Git LFS және үлкен репозиторийлер пайдаланылғанда миграцияны қалай бүлдірмеуге болады?

Ең жиі жасалатын қателік — Git LFS-ты ұмыту: репозиторий көшірілді, бірақ ірі файлдар жаңа жерде жүктелмейді және жинақтар сәтсіз болады. Жаңа серверде LFS қосылғанын тексеріп, бірнеше үлкен файлды жүктеп тексеріңіз. Сонымен қатар, push мөлшері мен сервер таймауттарына шектеулер бар-жоғын алдын ала тексеріңіз, үлкен көшіру ортасында үзіліп қалмауы үшін.

CI/CD-ға қандай бэкаптар мен қалпына келтіру тексерістері қажет?

RPO мен RTO-ны нақты сандармен анықтаңыз: қанша деректі жоғалтуға болады және қызмет қанша уақытта қалпына келуі тиіс. Сосын тек Git-ті ғана емес, дерекқорды, конфигурацияларды, артефактілерді және реестрлерді де бэкаптаңыз. Ең маңыздысы — бэкапты үнемі тестіден өткізу. Тексерілмеген бэкап апатта көбіне пайдасыз болады.

Жіктеу және ұйымдастырушылық интеграциялар жиі қашан шығады және интеграторды қашан шақыру керек?

LDAP/AD немесе SSO қажет болса және қатал аудит керек болса, мұны басынан ескеріңіз — кейін қосу қымбатқа түсуі мүмкін. Контейнер суреттері мен артефактілер қайда сақталатынын және оларды қалай тазалайтыныңызды алдын ала шешіңіз, әйтпесе диск тез таусылады. Егер on-prem енгізу және қолдау үшін уақытыңыз немесе біліктілігіңіз жетпесе, интегратор шақыру орынды. Қазақстанда GSE.kz шыгарушысы мен жүйелік интеграторы ретінде S200 серверлері мен 24/7 қолдауды ұйымдастыруға көмектесе алады.