Статьи
Обучающие материалы
Интерактивные руководства
Советы по написанию скриптов для автоматизации задач в Bitbucket Pipelines.
Стен Питтет
Приглашенный автор
С помощью Bitbucket Pipelines можно быстро внедрить для своих репозиториев рабочий процесс непрерывной интеграции или непрерывной поставки. Важная составляющая этой задачи — трансформация ручных процессов в скрипты, которые могут запускаться машиной автоматически, без вмешательства человека. Однако иногда автоматизировать задания бывает непросто из-за трудностей с аутентификацией, отчетами о проблемах или установкой зависимостей. В этом руководстве дается несколько советов по написанию скриптов.
Время
30 минут
Аудитория
Если вы только начинаете работу с непрерывным развертыванием и/или Bitbucket Pipelines
Совет 1. Не записывайте в журналы конфиденциальную информацию!
Прежде чем дальше погружаться в мир автоматизации, просмотрите свои журналы и убедитесь, что в них не фиксируются конфиденциальные данные, например ключи API, данные для доступа или любая другая информация, которая может поставить под угрозу вашу систему. При использовании Bitbucket Pipelines для запуска скриптов журналы сохраняются, и их может прочитать любой пользователь, имеющий доступ к вашему репозиторию.
Совет 2. Используйте для подключения к удаленным серверам SSH-ключи
Часто аутентификация — одна из самых больших проблем автоматизации. SSH-ключи имеют два преимущества: они облегчают управление подключением к удаленным серверам и отличаются очень высоким уровнем безопасности. С Bitbucket Pipelines можно без труда сгенерировать новую пару ключей, которая может использоваться при каждом запуске конвейера для подключения к удаленным серверам.
Нужно будет просто скопировать открытый ключ на удаленный сервер, чтобы иметь возможность подключаться к нему из своего запущенного конвейера. Например, после настройки SSH-ключей для пользователя на сервере с заданным URL или IP-адресом показанный ниже скрипт выведет список файлов в каталоге /var/www без запроса пароля.
bitbucket-pipelines.yml
image: node:4.6.0
pipelines:
default:
- step:
script:
- ssh <user>@<server> ls -l /var/www
Не забудьте зарегистрировать все серверы, к которым необходимо подключаться, в разделе Known hosts (Известные хосты), иначе при попытке подключения к удаленному серверу конвейер остановится в ожидании подтверждения.
Совет 3. Используйте защищенные переменные среды для ключей API и данных доступа к ним
При использовании в скриптах удаленных API возможна ситуация, когда поставщик этого API позволяет использовать защищенные ресурсы при наличии ключа API. В Bitbucket Pipelines можно безопасно добавить данные для доступа, используя защищенные переменные среды. После их сохранения к ним можно будет обращаться в скриптах, при этом они будут замаскированы в ответах журналов.
Совет 4. Выполняйте команды в неинтерактивном режиме
Если в ходе выполнения скрипта нужно устанавливать зависимости, убедитесь, что при этом не будет выводиться запрос подтверждения или ввода. Изучите документацию по используемым командам и выясните, существует ли флаг, который позволяет выполнять их в неинтерактивном режиме.
Например, флаг -y в приведенной ниже команде устанавливает PostgreSQL на сервере Debian.
apt-get install -y postgresql
А флаг -q позволяет выполнять команды Google Cloud SDK в неинтерактивном режиме.
gcloud -q app deploy app.yaml
Совет 5. Создавайте собственные образы Docker, готовые к использованию
Установка зависимостей, необходимых для работы конвейера, может выполняться долго. Создав собственный образ Docker с основными инструментами и пакетами, необходимыми для сборки и тестирования приложения, можно сэкономить немало времени.
Например, в следующей конфигурации Pipelines мы в самом начале устанавливаем интерфейс командной строки AWS, чтобы позже использовать его для развертывания приложения в AWS Elastic Beanstalk.
bitbucket-pipelines.yml
image: node:7.5.0
pipelines:
default:
- step:
script: # Modify the commands below to build your repository.
- apt-get update && apt-get install -y python-dev
- curl -O https://bootstrap.pypa.io/get-pip.py
- python get-pip.py
- pip install awsebcli --upgrade
- npm install
- npm test
- eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
- eb deploy hw-eb-tutorial
Суть в том, что интерфейс командной строки AWS не меняется с каждым коммитом, а это означает, что мы теряем какое-то время на установку зависимости, которую можно было бы включить в пакет по умолчанию.
Следующий файл Docker можно использовать для создания специального образа Docker, готового к развертыванию с использованием Elastic Beanstalk.
Dockerfile
FROM node:7.5.0
RUN apt-get update \ && apt-get install -y python-dev \ && cd /tmp \ && curl -O https://bootstrap.pypa.io/get-pip.py \ && python get-pip.py \ && pip install awsebcli --upgrade \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
Если отправить его в виде ссылки spittet/my-custom-image, можно затем упростить конфигурацию Bitbucket Pipelines, чтобы в нее входили только команды, необходимые для сборки, тестирования и развертывания приложения.
bitbucket-pipelines.yml
image: spittet/my-custom-image
pipelines:
default:
- step:
script: # Modify the commands below to build your repository.
- npm install
- npm test
- eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
- eb deploy hw-eb-tutorial
И последнее. Скрипты — это тоже код
Эти советы должны помочь вам превратить ручные задачи в автоматизированные процессы, которые могут надежно и многократно выполняться с помощью такого сервиса, как Bitbucket Pipelines. В конечном итоге эти процессы будут стоять на страже ваших релизов и станут мощными инструментами, способными инициировать развертывание всех рабочих сред на различных серверах и платформах.
Вот почему к скриптам автоматизации необходимо относиться так же, как к коду, и подвергать их такому же процессу анализа и контроля качества, какой используется для основного кода. К счастью, это можно без труда делать с помощью Bitbucket, так как ваши настройки конвейера будут проверяться вместе с вашим кодом, что позволит создавать запросы pull в нужном контексте.
И, наконец, не забудьте запустить скрипты в среде тестирования, прежде чем применять их в рабочей среде: потратив эти лишние минуты, можно уберечь себя от случайного удаления рабочих данных.
Поделитесь этой статьей
Следующая тема
Рекомендуемые статьи
Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.