🚀 DevOps: Скрипт "CI/CD-раннер за 60 секунд" (Docker)
Боль: Ваш docker build в общем CI/CD GitLab/GitHub "висит" в очереди 20 минут. Вы не можете работать, потому что все "раннеры" заняты.
Реакция админа: "Пойду попью кофе, подожду".
Реакция архитектора: "Я запущу свой runner на своей Home Lab (или VDS) за 60 секунд".
Эти "однострочники" — это не просто docker run, это мгновенное масштабирование вашего CI/CD.
Скрипт для GitLab Runner:
Скрипт для GitHub Actions Runner: (Процесс похож, но требует docker-compose для авто-регистрации)
Взгляд архитектора: Это "Infrastructure on-demand" (Инфраструктура по требованию). Вы не ждете ресурсы, вы создаете их. Вы строите распределенную CI/CD-систему, используя Docker как "строительный блок".
#devops #docker #cicd #gitlab #github #automation #скрипты #гайд
Боль: Ваш docker build в общем CI/CD GitLab/GitHub "висит" в очереди 20 минут. Вы не можете работать, потому что все "раннеры" заняты.
Реакция админа: "Пойду попью кофе, подожду".
Реакция архитектора: "Я запущу свой runner на своей Home Lab (или VDS) за 60 секунд".
Эти "однострочники" — это не просто docker run, это мгновенное масштабирование вашего CI/CD.
Скрипт для GitLab Runner:
# 1. Получите ваш Registration Token из GitLab (Settings -> CI/CD -> Runners)
GITLAB_TOKEN="ВАШ_ТОКЕН"
# 2. Запускаем "вечный" раннер в Docker
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
# 3. Регистрируем раннер
docker exec -it gitlab-runner \
gitlab-runner register \
--non-interactive \
--url "https://gitlab.com/" \
--registration-token "$GITLAB_TOKEN" \
--executor "docker" \
--docker-image "docker:20.10" \
--description "My-Docker-Runner"
Скрипт для GitHub Actions Runner: (Процесс похож, но требует docker-compose для авто-регистрации)
Взгляд архитектора: Это "Infrastructure on-demand" (Инфраструктура по требованию). Вы не ждете ресурсы, вы создаете их. Вы строите распределенную CI/CD-систему, используя Docker как "строительный блок".
#devops #docker #cicd #gitlab #github #automation #скрипты #гайд
⚙️ DevOps (Automation): "Grep по YAML". Встречаем yq
Боль: Вам нужно в CI/CD-скрипте "вытащить" версию image: из docker-compose.yml или kubernetes-deployment.yml.
Реакция админа: cat docker-compose.yml | grep "image:" | awk -F': ' '{print $2}' (Это "хрупкий" скрипт. Он сломается от одного лишнего пробела или комментария).
Реакция архитектора: yq '.services.my-app.image' docker-compose.yml
yq — это jq (для JSON), но для YAML. Это "швейцарский нож" для парсинга *.yml файлов в bash.
Почему это киллер-фича:
* Надежность: Он понимает структуру YAML. Ему плевать на пробелы и комментарии.
* Чтение: yq '.spec.replicas' deployment.yml
* Запись: yq -i '.spec.replicas = 3' deployment.yml (Изменить файл "на лету"!)
* Merge: yq eval-all '. as $item ireduce ({}; . * $item)' file1.yml file2.yml (Склеить два YAML-файла).
Взгляд архитектора: Это надежная автоматизация (Reliable Automation). Ваши bash-скрипты в CI/CD (GitLab, Jenkins) становятся предсказуемыми. Вы можете безопасно читать и модифицировать ваши IaC-конфиги "на лету".
#devops #linux #yaml #yq #automation #cicd #скрипты #гайд
Боль: Вам нужно в CI/CD-скрипте "вытащить" версию image: из docker-compose.yml или kubernetes-deployment.yml.
Реакция админа: cat docker-compose.yml | grep "image:" | awk -F': ' '{print $2}' (Это "хрупкий" скрипт. Он сломается от одного лишнего пробела или комментария).
Реакция архитектора: yq '.services.my-app.image' docker-compose.yml
yq — это jq (для JSON), но для YAML. Это "швейцарский нож" для парсинга *.yml файлов в bash.
Почему это киллер-фича:
* Надежность: Он понимает структуру YAML. Ему плевать на пробелы и комментарии.
* Чтение: yq '.spec.replicas' deployment.yml
* Запись: yq -i '.spec.replicas = 3' deployment.yml (Изменить файл "на лету"!)
* Merge: yq eval-all '. as $item ireduce ({}; . * $item)' file1.yml file2.yml (Склеить два YAML-файла).
Взгляд архитектора: Это надежная автоматизация (Reliable Automation). Ваши bash-скрипты в CI/CD (GitLab, Jenkins) становятся предсказуемыми. Вы можете безопасно читать и модифицировать ваши IaC-конфиги "на лету".
#devops #linux #yaml #yq #automation #cicd #скрипты #гайд
❤2🔥2
🛡 ЧЕКЛИСТ ПО ЗАЩИТЕ CI/CD И КЛАСТЕРА
Защита веток (Branch Protection): жесткий запрет прямых пушей в
Контроль CI-манифестов: любые правки в
Отказ от статичных токенов: миграция на динамическую федерацию удостоверений через OpenID Connect (OIDC) с выдачей короткоживущих токенов. Никаких постоянных
Принцип наименьших привилегий в K8s: гранулярные роли RBAC на каждый отдельный namespace. Запретить CI/CD-пайплайнам использовать глобальный
Харденинг сборочных хостов: категорический запрет на запуск контейнеров с флагом
Алертинг на аномалии IAM: настройка триггеров на сброс паролей привилегированных пользователей, добавление новых устройств MFA и нетипичные изменения геопозиции входа.
#devops #cicd #kubernetes #gitlab #security #sysadmin #admin_future
Защита веток (Branch Protection): жесткий запрет прямых пушей в
main / master / release. Слияние — строго через Pull Request / Merge Request минимум с одним аппрувом.Контроль CI-манифестов: любые правки в
.gitlab-ci.yml, azure-pipelines.yml, Jenkinsfile требуют обязательного согласования (Code Owners) со стороны DevSecOps / инфраструктурной команды.Отказ от статичных токенов: миграция на динамическую федерацию удостоверений через OpenID Connect (OIDC) с выдачей короткоживущих токенов. Никаких постоянных
kubeconfig на файловой системе!Принцип наименьших привилегий в K8s: гранулярные роли RBAC на каждый отдельный namespace. Запретить CI/CD-пайплайнам использовать глобальный
cluster-admin.Харденинг сборочных хостов: категорический запрет на запуск контейнеров с флагом
--privileged и проброс /var/run/docker.sock. Ограничение исходящего трафика (Egress Firewall) только доверенными реестрами и репозиториями.Алертинг на аномалии IAM: настройка триггеров на сброс паролей привилегированных пользователей, добавление новых устройств MFA и нетипичные изменения геопозиции входа.
#devops #cicd #kubernetes #gitlab #security #sysadmin #admin_future