Compare commits

..

15 Commits

Author SHA1 Message Date
Dmitry 03a58cda27 ada-pc: 2026-06-15 08:36:19 | 3
Affected files:
.obsidian/plugins/obsidian-linter/data.json
90 Library/HomeLab/Infrastructure — ada-dev.md
99 System/Cache/infra.excalidraw.md.md
2026-06-15 08:36:19 +03:00
Dmitry 0130b2980a ada-pc: 2026-06-15 08:31:17 | 1
Affected files:
99 System/Cache/infra.excalidraw.md.md
2026-06-15 08:31:18 +03:00
Dmitry 3a507fa69b ada-pc: 2026-06-15 08:26:17 | 1
Affected files:
99 System/Cache/infra.excalidraw.md.md
2026-06-15 08:26:17 +03:00
Dmitry bafed635c2 ada-pc: 2026-06-15 08:21:16 | 2
Affected files:
.obsidian/plugins/obsidian-excalidraw-plugin/data.json
99 System/Cache/infra.excalidraw.md.md
2026-06-15 08:21:16 +03:00
Dmitry f67061a06a ada-pc: 2026-06-14 20:51:13 | 1
Affected files:
02 Projects/Наука/НИР/УИР_Сводный_вариант.md
2026-06-14 20:51:14 +03:00
Dmitry e3adae23df ada-pc: 2026-06-12 12:54:15 | 3
Affected files:
90 Library/DevOps/CI-CD — основы.md
99 System/Cache/Pasted image 20260612125256.png
99 System/Cache/Pasted image 20260612125409.png
2026-06-12 12:54:15 +03:00
Dmitry 4c394b3f6b ada-pc: 2026-06-12 11:25:50 | 3
Affected files:
90 Library/DevOps/CI-CD — основы.md
99 System/Archive/CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins.md
99 System/INDEX.md
2026-06-12 11:25:50 +03:00
Dmitry 101cc6141f ada-pc: 2026-06-10 23:02:44 | 1
Affected files:
00 Inbox/CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins.md
2026-06-10 23:02:44 +03:00
Dmitry 4182fab2cd ada-pc: 2026-06-10 22:52:42 | 1
Affected files:
00 Inbox/CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins.md
2026-06-10 22:52:42 +03:00
Dmitry e87145d6b9 ada-pc: 2026-06-10 22:47:42 | 5
Affected files:
.trash/Pasted image 20260610224414.png
.trash/Pasted image 20260610224417.png
.trash/Pasted image 20260610224420.png
.trash/Pasted image 20260610224422.png
00 Inbox/CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins.md
2026-06-10 22:47:42 +03:00
Dmitry c405d5a5ed ada-pc: 2026-06-10 22:32:38 | 6
Affected files:
.trash/Система контроля версий. Знакомство с Git.md
.trash/УИР_Учёт_посещаемости_МИФИ.md
00 Inbox/CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins.md
02 Projects/Наука/НИР/УИР_Сводный_вариант.md
99 System/Archive/gemini-code-1780921978295.md
99 System/Archive/Обзор аналогов и обоснование инструментария системы учёта посещаемости студентов НИЯУ МИФИ.md
2026-06-10 22:32:39 +03:00
Dmitry 793c2ebf3f ada-pc: 2026-06-10 22:27:38 | 1
Affected files:
00 Inbox/Система контроля версий. Знакомство с Git.md
2026-06-10 22:27:38 +03:00
Dmitry 7247dca120 ada-pc: 2026-06-10 22:22:37 | 1
Affected files:
00 Inbox/Система контроля версий. Знакомство с Git.md
2026-06-10 22:22:37 +03:00
Dmitry 62d50b94b1 ada-pc: 2026-06-10 22:17:36 | 2
Affected files:
.obsidian/plugins/editing-toolbar/data.json
00 Inbox/Система контроля версий. Знакомство с Git.md
2026-06-10 22:17:36 +03:00
Dmitry 8091cea606 ada-pc: 2026-06-09 20:34:19 | 1
Affected files:
.obsidian/plugins/editing-toolbar/data.json
2026-06-09 20:34:19 +03:00
19 changed files with 742 additions and 118 deletions
+17 -4
View File
@@ -1,6 +1,6 @@
{
"lastVersion": "4.0.8",
"aestheticStyle": "glass",
"aestheticStyle": "default",
"positionStyle": "top",
"menuCommands": [
{
@@ -1102,7 +1102,7 @@
"toolbarBackgroundColor": "#2D3033",
"toolbarIconColor": "#E2E8F0",
"toolbarIconSize": 18,
"aestheticStyle": "glass"
"aestheticStyle": "default"
},
"following": {
"toolbarBackgroundColor": "rgba(var(--background-secondary-rgb), 0.7)",
@@ -1149,8 +1149,21 @@
"artifact": "03-agent"
},
"pkmer": {
"tokenExpiresAt": 0,
"userInfo": null
"tokenExpiresAt": 1781122456017,
"userInfo": {
"sub": "fa484d57-e07b-48f3-9410-ff0ce39782d8",
"name": "gcdmitry",
"email": "gcdmitry@gmail.com",
"ai_quota": {
"quota": 50000000,
"usedQuota": 0,
"remainingQuota": 50000000,
"remainingTokens": 100,
"requestCount": 0
},
"thino": false,
"supporter": false
}
},
"enableCustomModel": false,
"customModel": {
+1 -1
View File
@@ -120,7 +120,7 @@
"library2": {
"type": "excalidrawlib",
"version": 2,
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag/2.23.0",
"source": "https://github.com/zsviczian/obsidian-excalidraw-plugin/releases/tag2.23.12",
"libraryItems": []
},
"imageElementNotice": true,
+7 -1
View File
@@ -282,7 +282,13 @@
"foldersToIgnore": [
"99 System"
],
"filesToIgnore": [],
"filesToIgnore": [
{
"label": "Excalidraw",
"match": ".*\\.excalidraw(\\.md)?$",
"flags": "i"
}
],
"linterLocale": "system-default",
"logLevel": "ERROR",
"lintCommands": [],
Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

@@ -0,0 +1,223 @@
---
status: seed
type: concept
tags: []
created: 2025-12-17
updated: 2026-06-10
aliases: []
---
# Система контроля версий. Знакомство с Git
## Git
Неоспоримыми преимуществами Git являются:
- Высокая производительность.
- Безопасность.
- Гибкость в распределенных системах.
- Прекрасные возможности для командной работы.
### Производительность
Высокая производительность Git обусловлена подходом по оптимизации внутренних процедур и использованию анализа содержимого файлов Git работает с файлами, храня объекты с содержимым каталога и метаданными их версий.
### Безопасность
Безопасность при работе с Git обеспечивается целостностью исходного кода и применением алгоритма шифрования SHA1.
Использование Git гарантирует подлинность истории изменений и защищает исходный код от тайного внесения изменений.
### Гибкость
Гибкость при работе с Git достигается за счет поддержки линейных и нелинейных циклов разработки, совместимости со множеством других информационных систем и популярных протоколов.
### Возможности для командной работы
Git обладает впечатляющими возможностями для командной работы за счет поддержки множества разнообразных моделей управления исходным кодом, удовлетворяющих нужды больших и маленьких команд, простых и сложных распределенных проектов
## Часть 3. Модели управления исходным кодом
Работа с версиями исходного кода в Git построена на основе использования:
- Коммитов (Commits).
- Веток (Branches).
- Слияния веток (Merge).
- Сравнения версий (Diff).
Большой популярностью до сих пор пользуется модель под названием Gitflow.
### Gitflow
**Gitflow** — модель ветвления в Git, в которой используются основные ветки (Main, Кelease, Вevelop) и функциональные ветки (Feature).
В качестве основных веток в Gitflow часто используются:
- Main (Ex. master).
- Release.
- Develop (Dev).
В ветке Main хранится официальная история релизов, в Release ветках концентрируется функционал готово к выпуску релиза продукта, а ветка Develop предназначена для разработки функционала.
В качестве функциональных веток в `Gitflow` используются *Feature* ветки, ответвленные от основной ветки *Develop*.
Работа над каждым новым функционалом ведется командой в собственной *Feature-ветке*.
После завершения разработки функционала, каждая *Feature-ветка* **сливается** с *Develop-веткой*.
Когда в *Develop-ветке* оказывается достаточно функционала для выпуска нового релиза, на основе Develop-ветки создается ветка Release.
После прохождения всех тестов и проверок, Release-ветка сливается с остальными основными ветками — Main и Develop.
**Весь цикл разработки в модели Gitflow можно визуализировать** **следующим образом:**
![](https://legacy.merionet.ru/images/devops/images/3756/img_01.png)
**Модель Gitflow обладает и недостатками:**
- Не лучшая совместимость с современными процессами CI/CD.
- Не подходит для рабочих процессов, основывающихся на подходах, отличных от регулярного выпуска релизов.
- Потенциально запутанная схема веток и трудности в восстановлении историчности их слияний в сложных проектах.
На данный момент, Gitflow является недостаточно универсальной моделью рабочего процесса разработки и считается устаревшей.
Предпочтительной для современных процессов разработки является модель магистральных рабочих процессов (TBD).
### TBD
**TBD (Trunk Based Development)** — альтернативная модель управления исходным кодом в Git на основе ветвления, пришедшая на смену устаревшей модели Gitflow.
Модель TBD основана на принципе использования одной главной ветки, называемой “магистралью” (Trunk).
Вся работа над новым функционалом ведется разработчиками именно в магистральной ветке, что исключает трудности, связанные со слиянием и неработающими сборками.
Команда разработки, ведущая работу над новым функционалом, сохраняет свои изменения только в Trunk-ветку и обеспечивает непрерывную сборку, тестирование и доставку нового функционала, не привязываясь к срокам и частоте выпуска релизов.
При использовании модели TBD и регулярном добавлении в основную Trunk-ветку функционала, а также настроенных стабильных процессов сборки и доставки продукта (CI/CD), выпустить релиз можно практически в любой момент.
**Модель TBD можно визуализировать следующим образом:**
![](https://legacy.merionet.ru/images/devops/images/3756/img_02.png)
Модель TDB быстро завоевала популярность в разветвленных проектах и прекрасно зарекомендовала себя в распределенных больших командах разработки за счет своей понятности, динамичности и совместимости с CI/CD-процессами.
## Часть 4. Знакомство с Gitlab
### Gitlab
**Gitlab** — это веб-приложение, обеспечивающее управление репозиториями программного кода в системе контроля версий Git.
Установить и использовать Gitlab можно на собственном сервере или в облачной инфраструктуре.
Gitlab позволяет:
- Создавать, изменять и удалять репозитории.
- Управлять пользователями и их правами.
- Автоматизировать процессы CI/CD и тестирования.
- Полнофункционально взаимодействовать с исходным кодом из веб-интерфейса.
Основные преимущества Gitlab:
- Гибкие возможности по планированию командной разработки.
- Создание и управление проектами.
- Построение процессов тестирования кода.
- Непрерывная сборка и доставка (CI/CD).
- Наблюдаемость (Observability).
Gitlab позволяет эффективно поддерживать и развивать выбранный вами подход по управлению исходным кодом и командной разработкой (Gitflow, TDB и другие).
Работа с репозиториями в Gitlab осуществляется посредством создания, изменения, управления, удаления проектов и работы с пользователями.
Функциональность Gitlab позволяет задействовать инструменты по управлению ветками и коммитами пользователей, обеспечивая слаженную командную работу.
В Gitlab реализованы инструменты для проведения следующих операций над исходным кодом:
- Code-review.
- Оценка качества кода.
- Тестирование.
Возможна настройка модели приемки качества исходного кода, его проверки и тестирования.
Gitlab обладает интегрированными инструментами, позволяющими автоматизировать рутинные операции с исходным кодом:
- Непрерывную сборку и доставку (CI/CD).
- Тестирование новых версий.
- Релизный цикл продукта.
- Проверки по безопасности.
Gitlab позволяет отслеживать и обрабатывать множество важной информации о процессе разработки:
- Трекинг затраченного рабочего времени на разработку функционала и выпуск новых релизов.
- Мониторинг работоспособности приложения.
- Расширенный сбор и анализ метрик.
## Часть 5. Основные команды git
### Команды Git
#### `git init`
Создание нового Git-репозитория (преобразование существующего проекта или создание нового пустого репозитория).
#### `git clone`
Создание локальной копии удаленного Git-репозитория.
#### `git branch`
Создание отдельной ветки на основе существующей для осуществления в новой ветке процесса разработки с возможным последующим слиянием.
#### `git checkout`
Переключение между различными версиями целевого объекта (файлы, коммиты и ветки).
#### `git status`
Отображение рабочего состояния файлов в локальной копии отслеживаемого проекта.
#### `git add`
Индексирование изменений в локальной копии отслеживаемого проекта.
#### `git commit`
Подготовка к отправке в удаленный репозиторий набора проиндексированных изменений в локальном проекте.
#### `git push`
Выгрузка в удаленный репозиторий подготовленного набора проиндексированных изменений из отслеживаемой локальной копии.
#### `git pull`
Загрузка содержимого из удаленного репозитория и немедленное слияние изменений в локальный отслеживаемый репозиторий.
#### `git restore`
Отмена индексации изменений в локальном репозитории.
#### `git revert`
Отмена подготовленных к отправке проиндексированных изменений в локальном репозитории с сохранением истории.
#### `git merge`
Слияние ответвления (ветки ответвленной с веткой изначальной). Изменения часто проходят процедуру согласования с участниками команды разработки через механизм merge Request.
#### `git rebase`
Операция, подобная слиянию (Git merge).
**Команды Git merge и Git rebase решают одну и ту же проблему –** **слияние одной ветки в другую, но делают это по-разному.**
**Git merge** — это неразрушающая операция, существующие ветки никак не изменяются.
![](https://legacy.merionet.ru/images/devops/images/3756/img_04.png)
**Git rebase** — это операция фактического перебазирования ответвленной ветки в исходную, с созданием идеальной линейной истории проекта.
![](https://legacy.merionet.ru/images/devops/images/3756/img_03.png)
Золотое правило перебазирования:
**“Never rebase while you're on a public branch”** (никогда не используйте git rebase в публичных репозиториях) Если вы предпочитаете иметь чистую линейную историю без ненужных коммитов слияния – используйте Git rebase.
Если вам необходимо сохранить полную историю проекта и избежать перезаписи публичных коммитов – используйте команду Git merge.
@@ -7,7 +7,7 @@ tags:
- мифи
- разработка
created: 2026-06-08
updated: 2026-06-09
updated: 2026-06-14
---
# УИР\_Сводный\_вариант
@@ -160,8 +160,6 @@ updated: 2026-06-09
PostgreSQL особенно важен для реализации Transactional Outbox: отметка посещаемости и запись события синхронизации должны выполняться атомарно. Если запись отметки прошла успешно, но событие не было создано, внешние реестры могут остаться несогласованными. Если событие было отправлено без успешной записи отметки, возникнет обратная ошибка. Транзакционная модель PostgreSQL позволяет избежать этих сценариев.
Сравнение с MySQL не должно строиться только на тезисе "PostgreSQL быстрее". Корректнее указать, что в цитируемом бенчмарке Salunke и Ouda PostgreSQL показал сильные результаты на ряде операций, а выбор для данного проекта дополнительно обоснован транзакционной целостностью и возможностями типов данных.
### 4.4. Фоновые задачи: Sidekiq и Redis
Для фоновой обработки выбран **Sidekiq** с **Redis** в качестве хранилища очередей. Sidekiq использует многопоточную модель и хорошо интегрируется с Rails-приложениями.
+157
View File
@@ -0,0 +1,157 @@
---
title: CI/CD — основы
status: seed
type: concept
tags:
- devops
- cicd
- gitlab-ci
- jenkins
created: 2026-06-12
updated: 2026-06-12
aliases:
- Основы CI/CD
- Непрерывная интеграция и доставка
source: "CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins"
---
# CI/CD — Основы
**CI/CD** — набор практик автоматизации интеграции, проверки, сборки и доставки изменений программного продукта. Он сокращает цикл обратной связи и делает выпуск изменений повторяемым.
CI/CD связывает управление кодом через [[Git]], командную работу в платформах вроде [[Gitlab]] и развёртывание продукта в целевой инфраструктуре. Это одна из базовых практик [[DevOps - основы]].
## Состав CI/CD
### Continuous Integration
**Continuous Integration (CI)** — частое объединение небольших изменений в общую кодовую базу с автоматической проверкой каждого изменения.
Типичный CI-процесс:
1. Разработчик отправляет изменения в репозиторий.
2. Система запускает статический анализ и автоматические тесты.
3. Приложение собирается или компилируется.
4. Результат упаковывается в версионированный артефакт.
5. Артефакт сохраняется в реестре или хранилище.
Unit-тесты запускают отдельные единицы кода в контролируемом окружении. Кроме них в CI могут входить линтеры, SAST, SCA, интеграционные тесты и проверки качества.
### Continuous Delivery
**Continuous Delivery** — поддержание проверенного артефакта в состоянии готовности к выпуску. Доставка до production обычно требует явного решения или ручного подтверждения.
![[Pasted image 20260612125256.png|353]]
### Continuous Deployment
**Continuous Deployment** — автоматическое развёртывание каждого изменения, прошедшего все проверки, в production без ручного подтверждения.
Delivery и deployment часто обозначают одной аббревиатурой CD, но уровень автоматизации выпуска у них различается.
![[Pasted image 20260612125409.png]]
## Пайплайн
**Pipeline** — описанная последовательность стадий и задач CI/CD. Обычно новый запуск инициируется коммитом, merge request, тегом, расписанием или ручным действием.
Распространённые стадии:
1. получение исходного кода;
2. линтинг и статический анализ;
3. модульное и интеграционное тестирование;
4. сборка приложения;
5. упаковка артефакта, например контейнерного образа на основе [[Основы - Docker]];
6. публикация артефакта;
7. развёртывание;
8. дополнительные проверки;
9. сбор метрик и обратной связи.
Отдельная задача внутри pipeline обычно называется **job**. Jobs объединяются в stages и выполняются на выделенных исполнителях.
## Артефакт
**Артефакт** — неизменяемый результат сборки, который можно проверить, хранить и продвигать между средами. Это может быть бинарный файл, пакет, архив или контейнерный образ.
Один и тот же проверенный артефакт желательно последовательно использовать во всех средах. Повторная сборка перед production создаёт риск получить результат, отличный от протестированного.
## Среды
Продукт проходит через несколько изолированных сред:
- **Dev** — разработка и ранняя интеграция;
- **Test / QA / Integration** — функциональные и интеграционные проверки;
- **Stage / Pre-production / UAT** — проверка в окружении, близком к production;
- **Prod** — эксплуатация продукта пользователями.
Развёртывание может выполняться на виртуальных машинах, в контейнерах или в оркестраторе, например [[Kubernetes - MOC]].
## Обратная связь
Pipeline не заканчивается фактом развёртывания. После выпуска необходимо собирать:
- метрики приложения и инфраструктуры;
- логи;
- трассировки;
- сведения об ошибках;
- продуктовые и пользовательские метрики.
Эти данные возвращаются в цикл разработки и помогают оценить качество релиза. Наблюдаемость pipeline также показывает длительность задач, частоту сбоев и узкие места доставки.
## GitLab CI/CD
**GitLab CI/CD** — встроенная в [[Gitlab]] система автоматизации pipeline. Конфигурация обычно хранится рядом с кодом в файле `.gitlab-ci.yml`.
Jobs выполняются компонентами **GitLab Runner**. Runner может работать на физическом сервере, виртуальной машине, в Docker или Kubernetes.
Преимущества:
- тесная интеграция с репозиториями, merge request и правами GitLab;
- pipeline as code;
- управление jobs, stages, артефактами и окружениями в одном интерфейсе;
- просмотр состояния и результатов задач;
- возможность масштабирования runners.
Ограничения:
- наиболее удобен внутри экосистемы GitLab;
- сложные pipeline требуют аккуратной организации YAML-конфигурации;
- поведение артефактов, cache и зависимостей между jobs необходимо явно проектировать.
## Jenkins
**Jenkins** — самостоятельный open-source сервер автоматизации. Pipeline можно описывать декларативно или программно в `Jenkinsfile` с использованием Groovy.
Преимущества:
- большая экосистема плагинов;
- интеграция со множеством систем контроля версий, сборки и развёртывания;
- гибкость при построении нестандартных процессов;
- развитое сообщество и документация.
Ограничения:
- сервер и агенты необходимо отдельно устанавливать, обновлять и защищать;
- плагины увеличивают поверхность атаки и стоимость сопровождения;
- конфликты версий и накопление плагинов усложняют обновления;
- для небольших команд эксплуатация может быть тяжелее встроенного решения.
## GitLab CI/CD и Jenkins
| Критерий | GitLab CI/CD | Jenkins |
|---|---|---|
| Модель | Встроен в GitLab | Самостоятельный сервер |
| Описание pipeline | YAML | Jenkinsfile, Groovy |
| Исполнители | GitLab Runner | Jenkins agents |
| Интеграции | Нативные возможности GitLab | Обширная система плагинов |
| Сопровождение | Зависит от способа размещения GitLab и runners | Требует сопровождения controller, agents и плагинов |
| Основной сценарий | Проекты, уже использующие GitLab | Гетерогенная инфраструктура и нестандартные интеграции |
Если код и процессы команды находятся в GitLab, GitLab CI/CD обычно требует меньше интеграционной работы. Jenkins оправдан, когда важны независимость от одной платформы, существующая Jenkins-инфраструктура или специфические интеграции.
## Связанные заметки
- [[DevOps - основы]]
- [[Git]]
- [[Gitlab]]
- [[Основы - Docker]]
- [[Kubernetes - MOC]]
@@ -6,11 +6,12 @@ tags:
- infrastructure
- devops
created: 2026-05-18
updated: 2026-05-18
updated: 2026-06-15
source: '[[Infrastructure]]'
aliases:
- Infrastructure — ada-dev
---
# Infrastructure — ada-dev
Заметка фиксирует текущую схему homelab-инфраструктуры `ada-dev`: публичный VPS, домашние узлы, reverse proxy, overlay-сеть и пользовательские сервисы.
@@ -29,7 +30,7 @@ VPS принимает внешний трафик и проксирует ег
## Узлы
### ru-vps
### Ru-vps
`ru-vps` — публичный сервер с белым IP. На схеме он выполняет роль внешнего шлюза:
@@ -41,7 +42,7 @@ VPS принимает внешний трафик и проксирует ег
Практический смысл VPS — держать наружу только минимальный набор портов и не раскрывать домашнюю сеть напрямую.
### mini-pc
### Mini-pc
`mini-pc` описан как `N150 / 12 GB / 256 GB`. По схеме это небольшой домашний узел для инфраструктурных сервисов:
@@ -53,7 +54,7 @@ VPS принимает внешний трафик и проксирует ег
Логика узла: локальная инфраструктура и сервисы, которым полезно быть рядом с домашней сетью.
### cloud-pc
### Cloud-pc
`cloud-pc` описан как `i5 / 16 GB / 256 GB + 5 TB`. Это более крупный узел для сервисов и хранения:
@@ -0,0 +1,201 @@
---
status: seed
type: concept
tags: []
created: 2025-12-17
updated: 2026-06-10
aliases: []
---
# CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins
## Процессы CI/CD
**CI/CD (Continuous integration and Continuous delivery)** — широко распространенная devops-практика, подразумевающая непрерывную сборку и доставку цифрового продукта до конечной инфраструктуры.
### Continuous integration
Методология, при которой изменения в исходный код вносятся последовательно и непрерывно.
Исходный код подвергается проверкам, тестируется, упаковывается в артефакт, помещается в хранилище и готовится к отправке на развертывание.
### Continuous delivery
Практика, являющаяся логическим продолжением непрерывной сборки (интеграции) цифрового продукта.
Артефакт, прошедший все этапы непрерывной сборки, немедленно развертывается на конечной инфраструктуре, где в виде цифрового продуктаьвыполняет свои функции.
**Цели CI/CD:**
- Обеспечить последовательный и непрерывный процесс сборки, проверки, тестирования и развертывания цифровых продуктов.
- Автоматизировать процедуру сборки и доставки.
- Минимизировать возможные ошибки и облегчить процесс их исправления.
- Поддержать современный взгляд на гибкие методологии разработки.
**Преимущества CI/CD:**
- Максимальная автоматизация процессов.
- Своевременное обнаружение ошибок.
- Сокращение цикла получения обратной связи.
- Разделение сред разработки, тестирования и эксплуатации цифрового продукта.
- Глубокая наблюдаемость (Observability).
**Распространенные этапы CI/CD:**
- Создание кода / интеграция функционала.
- Модульное тестирование.
- Сборка / компилирование.
- Доставка артефакта и его развертывание.
- Дополнительные проверки.
- Сбор метрик / сбор обратной связи.
**Начальный этап:**
Этап создания кода (интеграции нового функционала) подразумевает наличие системы контроля версий, где осуществляется коллективная работа над исходным кодом цифрового продукта и ведется разработка функционала (исправление ошибок).
В процессах CI/CD это начальный этап сборки и доставки.
**Автоматизация:**
Модульное тестирование относится к логическим проверкам исходного кода, не подразумевающее запуск приложения на исполнение.
В первую очередь необходимо самим разработчикам для уверенности в отсутствии логических ошибок в разрабатываемых участках исходного кода.
Процессы CI/CD позволяют автоматизировать запуск таких проверок.
**Сборка:**
Сборка (компилирование) продукта из исходного кода чаще всего осуществляется с применением стандартизированной упаковки приложения, готового к запуску на конечной инфраструктуре.
Сборка часто является заключительным этапом процесса CI, далее собранный и готовый к запуску *артефакт* передается процессу непрерывной доставки (но могут иметь место и дополнительные проверки).
**Доставка:**
Доставка собранного и проверенного артефакта до конечной инфраструктуры осуществляется в процессе CD.
Доставленный и развернутый артефакт является конечным продуктом, функции которого эксплуатируют потребители.
**Проверка:**
В зависимости от среды, до которой был доставлен артефакт, он может быть подвергнут дополнительным проверкам, прежде чем отправиться в эксплуатацию.
Различают несколько различных видов сред цифрового продукта:
- Среда разработки (Dev).
- Среда тестирования (Test, QA, Stage, Integration, Pre-production, Uat,..).
- Среда эксплуатации (Prod).
**После прохождения всех этапов процессы CI/CD не заканчиваются:**
- Важно собирать обратную связь о процессе эксплуатации продукта (согласно потребительским метрикам).
- Собирать статистику (Метрики, Логи, Журналы, Трассировки).
- Процессы CI/CD не предполагают остановки и возобновляются с каждым новым коммитом и изменением в исходном коде.
### Пайплайны
Все этапы, составляющие процессы CI/CD, называются пайплайнами (Pipelines).
Создание, изменение, поддержка и совершенствование пайплайнов возможны в специализированных инструментах — **сборочных конвейерах CI/CD.**
## Часть 3. Знакомство с GitlabCI
**GitlabCI (Gitlab CI/CD)** — opensource-инструмент, встроенный в систему управления версиями Gitlab (изначально выпускался как отдельный проект).
GitlabCI выполняет функции сборочного конвейера, позволяющего осуществлять все этапы CI/CD.
**Преимущества GitlabCI:**
- Совместимость с Gitlab.
- Простота интеграции в рабочие процессы.
- Развитое комьюнити.
- Автомасштабирование.
GitlabCI относительно новый инструмент, быстро завоевавший популярность в сообществе.
Своей известностью GitlabCI обязан в первую очередь нативностью с Gitlab, достаточной функциональностью и простотой в использовании.
GitlabCI полностью совместим с системой управления версиями Gitlab, изначально предполагая интеграцию Gitlab в процесс непрерывной сборки (CI).
Однако, возможна интеграция и с другими системами управления версиями.
**GitlabCI обладает множеством полезных возможностей** **для улучшения процесса автоматизации сборки и доставки,** **интеграция которых в рабочий процесс не составит труда:**
- Отслеживание проектов и групп.
- Тонкая настройка пайплайнов.
- Мониторинг состояния задач в этапах CI/CD.
- Анализ результатов выполнения этапов.
GitlabCI обладает встроенным механизмом по автоматическому масштабированию сред исполнения рабочих задач (Runners).
Выполнение задач по сборке может осуществляться на Runners под управлением ВМ на разных ОС, Docker, Kubernetes.
## Часть 4. Знакомство с Jenkins
**Jenkins** — Open-source инструмент CI/CD, предназначенный для автоматизации множества задач в цифровых проектах и являющийся сборочным конвейером.
**Достоинства и преимущества Jenkins:**
- Простота в установке, настройке и эксплуатации.
- Расширяемость за счет использования Jenkins плагинов.
- Развитое сообщество и богатая документация.
Jenkins легко устанавливать, настраивать и обновлять благодаря простым процедурам установки без лишних деталей и специфичных особенностей.
Jenkins обладает обширной и понятной документацией.
В Jenkins создана целая экосистема различных плагинов, расширяющая или модифицирующая существующий функционал, в том числе графический интерфейс.
Плагинов насчитывается более 1500, практически все из них бесплатны и очень просты в установке.
Jenkins обладает самым развитым сообществом по сравнению с другими сборочными конвейерами CI/CD.
К комьюнити относятся не только команда разработки самого инструмента, но и разработчики множества плагинов.
## Часть 5. GitlabCI vs Jenkins
**Сходства GitlabCI и Jenkins:**
- Открытый исходный код.
- Кроссплатформенность.
- Простота в установке и настройке.
- Гибкая работа с пайплайнами.
- Поддержка API.
- Интегрируемость с другими системами в рамках рабочих процессов.
- Обширное неравнодушное комьюнити.
### Возможности
**Уникальные возможности GitlabCI:**
- Нативность Gitlab.
- Не требуется отдельная установка.
- Собственный мониторинг производительности.
- Встроенные решения по проверке качества кода.
**Уникальные возможности Jenkins:**
- Развитая экосистема плагинов.
- Расширенные возможности по интеграции со множеством систем за счет использования плагинов.
- Возможность использования языка Groovy для описания пайплайнов.
- Более обширное комьюнити, лучше документация.
### Недостатки
**Недостатки GitlabCI:**
- Специфичная работа с артефактами.
- Возможные трудности при описании и работе со сложными пайплайнами.
- Местами чувствуется недостаточность языков описания пайплайнов.
**Недостатки Jenkins:**
- Нагромождение плагинов может вызывать сложности в их поддержке и обновлении.
- Для небольших проектов и небольших команд работа может оказаться сложнее, чем с GitlabCI.
GitlabCI и Jenkins замечательные инструменты, обладающие впечатляющими возможностями.
Если вы используете Gitlab в своей работе, логичнее использовать GitlabCI для процессов CI/CD.
Если вы не привязаны к Gitlab и вас впечатляет экосистема плагинов, выбирайте Jenkins.
Оба инструмента прекрасно справляются со своими задачами.
Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

+115 -90
View File
@@ -9,37 +9,26 @@ aliases: []
# Excalidraw Data
## Text Elements
mini-pc N150 / 12 GB / 256 GB ^mini_lbl
cloud-pc i5 / 16 GB / 256 GB + 5 TB ^gihc0eNQ
Internet ^JF8gyxg7
NPM (публичный) ^De5FvlCO
Portainer Agent ^aa6HjhlV
Caddy (публичный) ^De5FvlCO
ZeroTier ^m9o2XfZR
ufw ^irwhPywz
Nginx (80, 443) ^3YCkaaEW
ZeroTier overlay network ^5VEs4mhQ
AdGuard Home ^14mDr3CI
NPM (локальный) ^Oynv3oBy
Caddy (локальный) ^Oynv3oBy
Vaultwarden ^0uUIYjrp
ZeroTier ^8m3hcPU4
Portainer Agent ^O5TryriF
Cockpit ^YY7Tjxu0
Gitea Actions Runner ^bC30cure
Gitea + Registry ^K59um5ww
@@ -50,13 +39,25 @@ ZeroTier ^WzKFf7RD
SMB/BU/Files (5 TB HDD) ^HZKjRf2E
Portainer Server ^7rAi7eTS
Cockpit ^aVjmA1Ms
^Jq0JkEPn
Gitea Actions Runner ^CM1Gp9xI
Gitea Actions Runner ^8PRErTQ6
NixOS ^DQNLMdIF
NixOS ^gTVW2le6
mini-pc N150 / 12 GB / 256 GB ^mini_lbl
157.22.231.198 ^eXMuxq0w
192.168.1.10 ^7IGqv1Hi
192.168.1.5 ^ho5T6rsv
Infrastructure — ada-dev ^title
ru-vps (белый IP) ^vps_lbl
@@ -64,150 +65,174 @@ ru-vps (белый IP) ^vps_lbl
%%
## Drawing
```compressed-json
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=
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
```
%%
+15 -15
View File
@@ -1,6 +1,6 @@
---
generated: 2026-06-05
total: 505
generated: 2026-06-12
total: 510
---
# Vault Index
@@ -9,7 +9,7 @@ total: 505
| Параметр | Значение |
|----------|----------|
| Всего заметок | 505 |
| Всего заметок | 510 |
## .
@@ -20,12 +20,6 @@ total: 505
| [[CODEX]] | CODEX | — | — | [] |
| [[GEMINI]] | GEMINI | — | — | [] |
## 00 Inbox
| Заметка | Aliases | Status | Type | Tags |
|---------|---------|--------|------|------|
| [[Вопросы по Вебу]] | — | processing | concept | [] |
## 01 Ideas
| Заметка | Aliases | Status | Type | Tags |
@@ -45,6 +39,7 @@ total: 505
|---------|---------|--------|------|------|
| [[Анализ рынка систем учета посещаемости]] | Анализ рынка систем учета посещаемости | seed | concept | [] |
| [[НИР]] | НИР | seed | concept | [] |
| [[УИР_Сводный_вариант]] | — | stable | document | [уир, мифи, разработка] |
## 02 Projects/Наука/Статьи
@@ -210,6 +205,7 @@ total: 505
| Заметка | Aliases | Status | Type | Tags |
|---------|---------|--------|------|------|
| [[CI-CD — основы]] | Основы CI/CD, Непрерывная интеграция и доставка | seed | concept | [devops, cicd, gitlab-ci, jenkins] |
| [[DevOps - основы]] | DevOps - основы | stable | concept | [devops] |
| [[Git]] | Git | seed | concept | [devops, git, vcs] |
| [[Gitlab]] | Gitlab | seed | concept | [devops, git, cicd, gitlab] |
@@ -249,8 +245,8 @@ total: 505
| [[Индексное инвестирование]] | Индексное инвестирование | seed | guide | [finance, investments, index, funds] |
| [[Инсайдерская торговля и манипулирование рынком]] | Инсайдерская торговля и манипулирование рынком | seed | concept | [finance, investments, market-abuse] |
| [[Криптовалюты как инвестиционный актив]] | Криптовалюты как инвестиционный актив | seed | concept | [finance, investments, crypto] |
| [[Облигации]] | Облигации | seed | guide | [finance, investments, bonds] |
| [[Облигации с залоговым обеспечением]] | Облигации с залоговым обеспечением денежных требований | seed | concept | [finance, investments, bonds, abs] |
| [[Облигации]] | Облигации | seed | guide | [finance, investments, bonds] |
| [[Оценка акций]] | Оценка акций | seed | guide | [finance, investments, stocks, valuation] |
| [[Риск-профиль инвестора]] | Риск-профиль инвестора | seed | concept | [finance, investments, risk] |
| [[Трейдинг]] | Трейдинг | seed | guide | [finance, trading, risk] |
@@ -408,7 +404,7 @@ total: 505
| Заметка | Aliases | Status | Type | Tags |
|---------|---------|--------|------|------|
| [[Дискриминантный анализ - MOC]] | Дискриминантный анализ - MOC | stable | moc | [math, statistics, discriminant-analysis] |
| [[Параметрический дискриминантный анализ в случае нормального закона распределения классов]] | Параметрический Дискриминантный Анализ В Случае Нормального Закона Распределения | seed | concept | [math, statistics, discriminant-analysis, ml-algorithms] |
| [[Параметрический дискриминантный анализ в случае нормального закона распределения классов]] | Параметрический Дискриминантный Анализ В Случае Нормального Закона Распределения Классов | seed | concept | [math, statistics, discriminant-analysis, ml-algorithms] |
| [[Построение оптимальной процедуры классификации]] | Построение Оптимальной Процедуры Классификации | seed | concept | [math, mephi, statistics, discriminant-analysis] |
| [[Принципы дискриминантного анализа]] | Принципы Дискриминантного Анализа | seed | concept | [math, mephi, statistics, discriminant-analysis] |
| [[Условие отнесения объекта к классу в случае двух признаков]] | Условие Отнесения Объекта К Классу В Случае Двух Признаков | stable | concept | [math, ml, mephi, statistics, discriminant-analysis] |
@@ -451,8 +447,8 @@ total: 505
| [[ФА - вращение]] | ФА - Вращение | seed | concept | [math, statistics, factor-analysis] |
| [[ФА - модель, цель, сущность]] | ФА - Модель, Цель, Сущность | stable | concept | [math, ml, mephi, statistics, factor-analysis] |
| [[Факторное отображение. Факторная структура]] | Факторное Отображение. Факторная Структура | stable | concept | [math, mephi, statistics, factor-analysis] |
| [[Факторный анализ. Цели и сущность. Постановка задачи. Отличие от анализа главных компонент]] | Факторный Анализ. Цели И Сущность. Постановка Задачи. Отличие От Анализа Главных Компонент | seed | concept | [math, mephi, statistics, factor-analysis] |
| [[Факторный анализ]] | Факторный Анализ | stable | concept | [math, ml, mephi, statistics, factor-analysis] |
| [[Факторный анализ. Цели и сущность. Постановка задачи. Отличие от анализа главных компонент]] | Факторный Анализ. Цели И Сущность. Постановка Задачи. Отличие От Анализа Главных | seed | concept | [math, mephi, statistics, factor-analysis] |
| [[Фундаментальная теорема факторного анализа]] | Фундаментальная Теорема Факторного Анализа | stable | concept | [math, mephi, statistics, factor-analysis] |
| [[Этапы ФА. Выделение факторов]] | Этапы ФА. Выделение Факторов | seed | concept | [math, mephi, statistics, factor-analysis] |
@@ -535,8 +531,8 @@ total: 505
| Заметка | Aliases | Status | Type | Tags |
|---------|---------|--------|------|------|
| [[DHCP]] | DHCP | stable | concept | [network, networking, protocols, dhcp] |
| [[DHCP-snooping]] | DHCP-snooping | seed | concept | [network, networking, protocols, dhcp] |
| [[DHCP]] | DHCP | stable | concept | [network, networking, protocols, dhcp] |
| [[Dynamic ARP Inspection]] | Dynamic ARP Inspection | seed | concept | [network, networking, protocols, dhcp, arp] |
| [[Механизм работы - DHCP]] | Механизм Работы - DHCP | stable | concept | [network, networking, protocols, dhcp] |
| [[Настройка DHCP - Cisco]] | Настройка DHCP - Cisco | stable | concept | [network, networking, protocols, dhcp] |
@@ -612,8 +608,10 @@ total: 505
| Заметка | Aliases | Status | Type | Tags |
|---------|---------|--------|------|------|
| [[31, 32 - Налоги]] | 31, 32 - Налоги | seed | knowledge | [study, taxes] |
| [[31, 32 - Налоги 1]] | 31, 32 - Налоги | seed | knowledge | [study, taxes] |
| [[31, 32 - Налоги]] | 31, 32 - Налоги | seed | knowledge | [study, taxes] |
| [[CIСD Конвейер для сборки и доставки продукта. Знакомство с GitlabCI и Jenkins]] | — | seed | concept | [] |
| [[gemini-code-1780921978295]] | — | — | — | [] |
| [[Git]] | Git | seed | concept | [] |
| [[Gitlab]] | Gitlab | seed | concept | [] |
| [[HW Eng17.03]] | HW Eng17.03 | seed | concept | [homework] |
@@ -633,11 +631,12 @@ total: 505
| [[В случае ошибок на принтере Kyocera FS-1020MFP]] | В случае ошибок на принтере Kyocera FS-1020MFP | seed | concept | [] |
| [[Введение в сетевую безопасность]] | Введение в сетевую безопасность | processing | concept | [] |
| [[ВДО no кредитам]] | — | seed | concept | [] |
| [[Вопросы по Вебу]] | — | processing | concept | [] |
| [[Знания Ruby]] | Знания Ruby | seed | concept | [] |
| [[Идеи для статьи]] | Идеи Для Статьи | — | — | [] |
| [[Идея]] | — | seed | concept | [] |
| [[Идея сети кохонена]] | Идея сети кохонена | seed | concept | [] |
| [[Идея — упаковка для еды]] | — | seed | concept | [] |
| [[Идея]] | — | seed | concept | [] |
| [[Инструкция по деплою finreport-analyzer]] | — | seed | concept | [] |
| [[Итераторы для обработки массивов Ruby]] | Итераторы для обработки массивов Ruby | seed | concept | [] |
| [[Команды для деплоя с помощью Capistrano]] | — | seed | concept | [] |
@@ -651,6 +650,7 @@ total: 505
| [[Налоги - СР2]] | Налоги - СР2 | seed | knowledge | [study, taxes] |
| [[Нейронная сеть Кохонена]] | Нейронная сеть Кохонена | seed | concept | [] |
| [[Нейронная сеть хемминга]] | Нейронная сеть хемминга | seed | concept | [] |
| [[Обзор аналогов и обоснование инструментария системы учёта посещаемости студентов НИЯУ МИФИ]] | — | — | — | [] |
| [[Обратное распространение ошибки - вывод]] | Обратное распространение ошибки - вывод | seed | concept | [] |
| [[Основные команды git]] | Основные команды git | processing | concept | [] |
| [[Подготовка Speaking]] | Подготовка Speaking | seed | concept | [] |