DevOps | Вопросы собесов
5.28K subscribers
28 photos
903 links
Download Telegram
🤔 Как разделять элементы CI и CD в jenkins?

В Jenkins CI (Continuous Integration) и CD (Continuous Delivery/Deployment) можно разделять на разные стадии (stages) или отдельные пайплайны. Это повышает гибкость, упрощает отладку и делает процесс масштабируемым.

🚩Разделение CI и CD внутри одного `Jenkinsfile`

Можно использовать разные стадии (stages) в Jenkinsfile:
Пример:
pipeline {
agent any

stages {
stage('CI: Build & Test') {
steps {
echo "📦 Сборка и тестирование кода"
sh 'mvn clean package' // Сборка
sh 'mvn test' // Юнит-тесты
}
}

stage('CI: Code Analysis') {
steps {
echo "🧐 Анализ кода (SonarQube)"
sh 'sonar-scanner'
}
}

stage('CD: Staging Deployment') {
steps {
echo "🚀 Деплой на стейджинг"
sh 'kubectl apply -f k8s/staging.yaml'
}
}

stage('CD: Production Deployment') {
when {
branch 'main' // Только для main-ветки
}
steps {
echo "🔥 Деплой в прод"
sh 'kubectl apply -f k8s/production.yaml'
}
}
}
}


🚩Отдельные пайплайны для CI и CD

Можно разделить CI и CD на разные пайплайны, используя Jenkins Multibranch Pipeline.
CI-пайплайн (Jenkinsfile.ci)
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
}
post {
success {
archiveArtifacts artifacts: '**/target/*.jar'
build job: 'CD-Pipeline', wait: false // Запуск CD после успешного CI
}
}
}


CD-пайплайн (Jenkinsfile.cd)
pipeline {
agent any
stages {
stage('Deploy to Staging') {
steps {
sh 'kubectl apply -f k8s/staging.yaml'
}
}
stage('Manual Approval') {
steps {
input message: "Deploy to Production?"
}
}
stage('Deploy to Production') {
steps {
sh 'kubectl apply -f k8s/production.yaml'
}
}
}
}


🚩Использование `Jenkins Shared Library` для разделения логики

Если много пайплайнов, лучше вынести CI/CD-логику в общую библиотеку (vars/ci.groovy, vars/cd.groovy).
Пример CI (vars/ci.groovy)
def call() {
pipeline {
agent any
stages {
stage('Build & Test') {
steps {
sh 'mvn clean package && mvn test'
}
}
}
}
}


Пример CD (vars/cd.groovy)
def call() {
pipeline {
agent any
stages {
stage('Deploy') {
steps {
sh 'kubectl apply -f k8s/production.yaml'
}
}
}
}
}


Jenkinsfile с использованием библиотек
@Library('my-shared-library') _

ci() // Запуск CI
cd() // Запуск CD


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
🤔 Как получить body запрос?

Если используется Flask, тело запроса можно получить с помощью request.get_json() — если это JSON-запрос,
request.data — если нужны байты тела, или request.form — если данные отправлены в формате формы. Всё зависит от Content-Type запроса. Для чтения обычного тела можно также использовать request.get_data().

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊9
🤔 Где хранить приватный PGP ключ?

Приватный PGP-ключ – это чувствительные данные, которые нельзя хранить в незащищенных местах. Потеря или компрометация ключа может привести к утечке зашифрованных данных.

🚩Лучшие способы хранения приватного PGP-ключа

🟠На аппаратном токене (YubiKey, Nitrokey, SmartCard)
- Ключ никогда не покидает устройство.
- Физическая защита от копирования.
- Можно использовать для SSH, GPG, подписи кода.

🟠В защищенном хранилище (Bitwarden, 1Password, KeePassXC)
- Хранилище зашифровано и требует пароль или биометрию.
- Можно синхронизировать между устройствами без потери безопасности.
- Экспортировать ключ в зашифрованный файл:
  gpg --export-secret-keys --armor > private-key.asc


🟠В зашифрованном виде на диске (LUKS, VeraCrypt, EncFS)
- Физическая защита – даже если диск украдут, без пароля его не открыть.
- Работает на Linux, Windows, MacOS.
1⃣Создать зашифрованный контейнер с LUKS (Linux):
   cryptsetup luksFormat /dev/sdX
cryptsetup luksOpen /dev/sdX secure_disk
mkfs.ext4 /dev/mapper/secure_disk


2⃣Хранить ключ внутри /mnt/secure_disk/private-key.asc.

🟠4. В HSM или облачном KMS (AWS KMS, HashiCorp Vault, Azure Key Vault)
- Подходит для энтерпрайз-решений.
- Аппаратное шифрование (HSM) делает взлом практически невозможным.
- AWS KMS или Vault можно использовать для PGP.
vault kv put secret/pgp_key key="$(cat private-key.asc)"


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как делали права доступа в GitHub для агента, который скачивал/разворачивал ECS?

Используются:
- GitHub Actions OIDC → IAM Role in AWS;
- IAM Role for Service Account (IRSA);
- IAM policies + ограниченные assume-role.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Когда вы создаёте файл какие права создаются по умолчанию?

Права доступа по умолчанию зависят от базовых прав доступа и значения umask. Базовые права доступа — это значения, которые система использует для определения разрешений перед применением маски umask.

🟠Файлы: 666 (rw-rw-rw-)
Это означает, что по умолчанию все пользователи могут читать и записывать в файл.

🟠Каталоги: 777 (rwxrwxrwx)
Это означает, что по умолчанию все пользователи могут читать, записывать и выполнять (заходить) в каталог.

🚩Значение umask: 022

Это маска, которая определяет, какие права будут отключены при создании нового файла или каталога. Значение umask указывается в восьмеричной системе счисления.

🟠Создание файла
Базовые права доступа: 666
Значение umask: 022
Окончательные права доступа: 666 - 022 = 644 (rw-r--r--)

🟠Создание каталога
Базовые права доступа: 777
Значение umask: 022
Окончательные права доступа: 777 - 022 = 755 (rwxr-xr-x)

🚩Создание файла с umask 0022

1⃣Установка umask
umask 0022   


2⃣Создание файла
touch myfile   


3⃣Проверка прав доступа
ls -l myfile   


Вывод
Права доступа: 644 (rw-r--r--)
-rw-r--r-- 1 user user 0 Jul 26 12:00 myfile    


🚩Создание каталога с umask 0027

1⃣Установка umask
umask 0027   


2⃣Создание каталога
mkdir mydir   


3⃣Проверка прав доступа
ls -ld mydir   


Вывод
Права доступа: 750 (rwxr-x---)
drwxr-x--- 2 user user 4096 Jul 26 12:00 mydir     


🚩Дополнительные замечания

🟠umask в скриптах
Вы можете установить umask в скрипте для задания прав доступа по умолчанию для всех создаваемых файлов и каталогов.
#!/bin/bash
umask 027
touch file1
mkdir dir1


🟠Проверка прав доступа в разных ситуациях
Для файлов: По умолчанию права доступа 666 минус umask.
Для каталогов: По умолчанию права доступа 777 минус umask.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Что такое контейнер в Docker?

Контейнер — это изолированная среда, основанная на образе, которая содержит всё необходимое для запуска приложения: код, зависимости, системные библиотеки и конфигурации. Он использует ядро хост-системы, но обеспечивает файловую, сетевую и процессную изоляцию.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍1
🤔 Что такое нормализация баз данных?

Нормализация баз данных - это процесс организации данных в базе данных для минимизации избыточности данных и обеспечения их целостности. Цель нормализации - структурировать таблицы таким образом, чтобы устранить аномалии обновления, вставки и удаления данных. Нормализация достигается путем разбиения больших таблиц на более мелкие, связанных между собой отношениями, что упрощает управление данными и делает их более логически связанными.

🚩Зачем нужна нормализация

🟠Устранение избыточности данных
Нормализация позволяет минимизировать дублирование данных, что экономит пространство и упрощает управление базой данных.
🟠Обеспечение целостности данных
Нормализация помогает поддерживать целостность данных, обеспечивая правильное и единообразное хранение данных.
🟠Упрощение структуры базы данных
Разделение данных на логические таблицы делает структуру базы данных более понятной и удобной для использования.
🟠Избежание аномалий данных
Нормализация предотвращает возникновение аномалий при обновлении, вставке и удалении данных.

🚩Основные формы нормализации

🟠Первая нормальная форма (1NF)
Удаление повторяющихся групп в таблице. Каждый столбец должен содержать только атомарные (неделимые) значения. Все записи в таблице должны быть уникальными.

🟠Вторая нормальная форма (2NF)
Таблица должна быть в 1NF. Удаление частичной функциональной зависимости: каждый неключевой атрибут должен быть полностью зависим от первичного ключа.

🟠Третья нормальная форма (3NF)
Таблица должна быть в 2NF. Удаление транзитивной зависимости: все неключевые атрибуты должны быть напрямую зависимы от первичного ключа, а не от других неключевых атрибутов.

🟠Бойс-Кодд нормальная форма (BCNF)
Усиление 3NF: каждая детерминанта должна быть кандидатом на ключ, что означает, что в любой нетривиальной функциональной зависимости X -> Y, X должно быть суперключом.

🟠Четвертая нормальная форма (4NF)
Таблица должна быть в BCNF. Устранение многозначных зависимостей: таблица не должна содержать многозначных зависимостей, когда один атрибут зависит от нескольких значений другого атрибута.

🟠Пятая нормальная форма (5NF)
Таблица должна быть в 4NF. Устранение соединительных зависимостей: данные должны быть разбиты так, чтобы каждая зависимость сохранялась.

🚩Примеры применения нормализации

🟠Первая нормальная форма
Если у вас есть таблица с повторяющимися группами, такими как несколько телефонных номеров для одного клиента, вы создаете отдельную таблицу для телефонов и связываете ее с таблицей клиентов.

🟠Вторая нормальная форма
Если у вас есть таблица заказов с колонками "номер заказа", "название товара" и "цена товара", вы можете создать отдельные таблицы для заказов и товаров, чтобы цена товара зависела только от товара, а не от комбинации заказа и товара.

🟠Третья нормальная форма
Если у вас есть таблица сотрудников с колонками "идентификатор сотрудника", "название отдела" и "имя начальника отдела", вы можете создать отдельные таблицы для сотрудников и отделов, чтобы имя начальника отдела зависело только от отдела, а не от сотрудника.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Может ли быть оверкоммит при виртуализации и при контейнеризации?

Это выделение больше ресурсов, чем физически доступно.
- При виртуализации – возможен в KVM, VMware, Hyper-V через memory ballooning, swap или динамическое выделение CPU. Это может привести к Out-Of-Memory (OOM) при нехватке физической памяти.
- При контейнеризации – возможен, если cgroups и limits настроены неправильно. Например, если память не ограничена, контейнеры могут использовать больше RAM, чем доступно системе.
Решение – настройка overcommit_memory=2, swapiness и OOM-killer для защиты системы.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как посмотреть размер папки на диске?

Для того чтобы узнать размер папки на диске, можно воспользоваться различными методами в зависимости от операционной системы. Вот несколько способов для наиболее распространённых ОС:

🚩Windows

🟠Использование проводника (Explorer)
Откройте Проводник Windows.
Наведите на папку, размер которой вы хотите узнать.
Кликните правой кнопкой мыши и выберите "Свойства".
В открывшемся окне "Свойства" вы увидите размер папки в разделе "Размер".

🟠Использование командной строки
Откройте командную строку (Cmd) или PowerShell.
Введите следующую команду, заменив ПутьКПапке на путь к интересующей вас папке:
du -sh ПутьКПапке   


Для PowerShell можно использовать
      Get-ChildItem ПутьКПапке -Recurse | Measure-Object -Property Length -Sum


🚩macOS и Linux

Использование терминала
Откройте терминал.
Введите команду du, чтобы узнать размер папки. Вот пример команды, которая показывает размер папки в читаемом виде (суммарный размер всех файлов)
du -sh /путь/к/папке


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Расскажи про идею фреймворка Hibernate

Hibernate — это ORM-фреймворк, задача которого:
- Преобразовывать объекты Java в строки таблиц БД и обратно.
- Скрывать SQL и управлять данными через сущности.
- Управлять сессиями, кэшами, транзакциями, ленивой/жадной загрузкой.
Позволяет сосредоточиться на бизнес-логике, а не на SQL.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM