Советы по написанию скриптов для автоматизации задач в Bitbucket Pipelines.

Пять советов по автоматизации ручных операций в Bitbucket Pipelines. 

Sten Pittet Sten Pittet

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

Требования

Время:

30 минут

Аудитория:

Если вы только начинаете работу с непрерывным развертыванием и/или Bitbucket Pipelines

Обязательное условие:

Попробовать бесплатно

1. Не записывайте в журналы конфиденциальную информацию!

Прежде чем дальше погружаться в мир автоматизации, необходимо просмотреть свои журналы и убедиться, что вы не выводите в них конфиденциальные данные, например ключи API, данные для доступа или любую информацию, которая может поставить под угрозу вашу систему. Как только вы начнете использовать Bitbucket Pipelines для запуска скриптов, журналы начнут сохраняться, и их сможет прочитать любой пользователь, имеющий доступ к вашему репозиторию.

№2. Используйте для подключения к удаленным серверам SSH-ключи

Аутентификация часто является одной из самых больших проблем автоматизации. SSH‑ключи имеют два преимущества: они облегчают управление подключением к удаленным серверам и отличаются очень высоким уровнем безопасности. С Bitbucket Pipelines можно без труда сгенерировать новую пару ключей, которая может использоваться при каждом запуске конвейера для подключения к удаленным серверам.

Генерируйте 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 можно безопасно добавить данные для доступа, используя защищенные переменные среды. После их сохранения к ним можно будет обращаться в скриптах, при этом они будут замаскированы в ответах журналов.

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/*

Если я осуществляю push с параметром 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

Если я осуществляю push с параметром spittet/my-custom-image, я затем могу упростить конфигурацию Bitbucket Pipelines, чтобы в него входили только команды, необходимые для сборки, тестирования и развертывания приложения.

И последнее. Скрипты — это тоже код

Эти советы должны помочь вам превратить ручные задачи в автоматизированные процессы, которые могут надежно и многократно выполняться с помощью такого сервиса, как Bitbucket Pipelines. В конечном итоге эти процессы будут стоять на страже ваших релизов и станут мощными инструментами, способными инициировать развертывание всех рабочих сред на различных серверах и платформах.

Вот почему к скриптам автоматизации необходимо относиться так же, как к коду, и подвергать их такому же процессу анализа и контроля качества, какой используется для основного кода. К счастью, это можно без труда делать с помощью Bitbucket, так как ваши настройки конвейера будут проверяться вместе с вашим кодом, что позволит создавать запросы pull в нужном контексте.

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