Category Archives: Scripting/coding

HowTo и примеры использования bash, C, Python, Ruby и т.д.

Jenkins: Scripted Pipeline – подтверждение выполнения для Production окружения

16 August 2018
 

 Есть несколько задач, которые выполняются в Scripted Pipeline. В задачах выполняется провижен CloudFormation и запуск Ansible плейбука на Dev и Production. Что бы исключить случайный запуск Production задачи – хочется добавить шаг подтверждения действия. Используем pipeline-input-step и класс BooleanParameterDefinition. Добавляем функцию verify(): def verify() { stage(‘Verify’) { def userInput = input( id: ‘userInput’, message: ‘This… Read More »

Jenkins: Credentials Binding Plugin и использование нескольких Secret file в Jenkins pipeline

3 July 2018
 

 Задача – запустить ansible-playbook, которому необходимо передать RSA ключ для EC2 и файл с паролем для ansible-vault, т.к. в задачах плейбука используются зашифрованные переменные. Для этого используем Jenkins credentials, где сохраним два файла, а потом через Credentials Binding Plugin – передадим их в контейнер с задачей. Secret file в Credentials Сначала добавляем файлы в Jenkins. Переходим… Read More »

Prometheus: мониторинг PHP-FPM + Ansible роль

8 June 2018
 

 Задача – собирать метрики с PHP-FPM /status. Используем lusotycoon/phpfpm-exporter. Кроме этого экспортёра есть bakins/php-fpm-exporter – но контейнер из его Docker образа постоянно возвращает “Empty reply from server“. Есть peakgames/php-fpm-prometheus – но для него нет Docker образа, а собирать свой не хочется. Имеется также hipages/php-fpm_exporter – но с ним возникли ошибки вида “Error scraping PHP-FPM: invalid character ‘A’ looking for beginning… Read More »

RabbitMQ: запуск, описание, примеры

6 June 2018
 

 RabbitMQ – менеджер сообщений (message broker), написан на Erlang, ближайший аналог в AWS – SQS. Предназначен для передачи данных (сообщений) между несколькими сервисами : один сервис добавляет в очередь сообщение, другой – получает это сообщение. Ниже – пример установки, запуска и использования RabbitMQ. Установка На Arch Linux: Debian/Ubuntu: Либо можно запустить из Docker-образа: rabbitmq-plugins RabbitMQ поддерживает… Read More »

PHP-FPM: Process Manager – dynamic vs ondemand vs static

5 June 2018
 

 Беглый обзор и примеры для настройки PHP-FPM Process Manager – dynamic, ondemand и static. Я не выполнял нагрузочного тестирования при использовании различных конфигураций, так что все выводы о применимости того или иного подхода чисто умозрительные. Тем не менее – тестирование проводиться, думаю, будет, по возможности – добавлю результаты отдельным постом. pm = dynamic Большинство HowTo… Read More »

Memcached: установка, примеры

30 May 2018
 

 Memcached – ещё одна key:value система кеширования, аналогичная Redis. Основное ограничение и отличие – memcached не хранит данные постоянно, т.е. при рестарте сервера данные из памяти будут утеряны. Кратко её установка и примеры использования. Установка pacman На Arch Linux можно установить из репозитория с помощью pacman: Debian/Ubuntu – с помощью apt, заодно PHP и NGINX… Read More »

AWS: SES – Simple Email Service и WorkMail: настройка аккаунта и отправка почты

18 May 2018
 

 AWS SES позволяет выполнять отправку и приём почты без необходимости настраивать свой полноценный почтовый сервис в виде Exim/Dovecot etc. Документация – тут>>>, а в этом посте рассмотрим настройку и использование сервиса на примере. Ограничения SES sandbox Как и все сервисы AWS – SES имеет свои ограничения, а для SES ещё и применяются особые правила: при… Read More »

AWS: создание стека в AWS – bash-скрипт и CloudFormation шаблон

10 May 2018
 

 Задача – развернуть мониторинг Prometehus + Grafana в AWS (в противоположность Azure на предыдущем проекте…). Весь стек будет состоять из одного EC2, на котором будет NGINX + Prometheus + Grafana. Из экспортёров на хосте мониторинга будут node_exporter и blackbox_exporter, скорее всего ещё mysql_exporter – собирать метрики с MariaDB бекенда нашего приложения, и какие-то ещё. Но это… Read More »

Jenkins: получить пароль из Credentials Binding Plugin

25 April 2018
 

 Задача – добавить и запушить тег после билда, используя логин:пароль репозитория, которые добавлены в Credentials Binding Plugin. Само решение достаточно костыльное, но рабочее. Главная проблема в том, что Jenkins маскирует пароль ****. Т.е. при вызове: … withCredentials([usernamePassword(credentialsId: ‘git’, usernameVariable: ‘USERNAME’, passwordVariable: ‘PASSWORD’)]) { sh “echo pass $PASSWORD” sh “echo user $USERNAME” } … В результате получим… Read More »

Docker: PHP Composer и multi-stage билды Docker образов

2 April 2018
 

 Задача – подготовить Docker образ с PHP Composer. Ниже рассмотрим сначала сам Composer (от PHP далёк, и с Composer дела раньше не имел, хотя сам PHP потрогать довелось), потом – пример сборки Docker контейнера и его использование под разными пользователями. Результат можно посмотреть в Github. PHP Composer Composer предназначен для установки общих библиотек при создании… Read More »