Bitbucket Pipelines: продолжение

Недавно я писал про то, как подключить тестирование вашего кода прямо в репозитории в bitbucket. Но сервис не стоит на месте, и с тех пор в нем появились новые фичи. В этой статье я хочу вам про них рассказать.

Автор . Дата: 27.06.2017

Недавно я писал про то, как подключить тестирование вашего кода прямо в репозитории в bitbucket. Но сервис не стоит на месте, и с тех пор в нем появились новые фичи. В этой статье я хочу вам про них рассказать.

Во первых, из печального: в Bitbucket Pipelines появились ограничения на билды. Теперь на бесплатном аккаунте можно использовать не более 50 минут времени билда в месяц. Точно не знаю когда это появилось, но изначально вроде такой проблемы не было. Поэтому лучше всего как можно больше статичных действий перенести в docker контейнер. Например раньше я использовал чистый php7 контейнер, в который каждый раз устанавливал необходимые расширения. Это все отнимало несколько ценных минут на каждый билд. Поэтому я собрал готовый Docker контейнер основанный на php7 и разместил его на Docker Hub. В нем уже происходит установка всех необходимых расширений а так же установка composer'а.

FROM php:7.0

# Install modules
RUN apt-get update && apt-get install -y zlib1g-dev libicu-dev \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libmagickwand-dev \
        libmagickcore-dev \
        libpng12-dev \
        libxslt1-dev \
        zip unzip \
        --no-install-recommends
		
RUN apt-get update && apt-get install -y \
    git libmagick++-dev \
    --no-install-recommends && rm -r /var/lib/apt/lists/* && \
    git clone https://github.com/mkoppanen/imagick.git && \
    cd imagick && git checkout phpseven && phpize && ./configure && \
    make && make install && \
    docker-php-ext-enable imagick && \
    cd ../ && rm -rf imagick

RUN pecl channel-update pecl.php.net \
    && docker-php-ext-install intl pdo_mysql bcmath xsl zip mysqli \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install gd \
    && pear install PHP_CodeSniffer

RUN curl -sS https://getcomposer.org/installer | php -- --filename=composer --install-dir=/usr/bin

Во вторых: теперь можно запускать одновременно несколько контейнеров. Теперь нет нужды тулить mysql и php в один контейнер. Пример bitbucket-pipelines.yml:

pipelines:
  default:
    - step:
        image: lan143/php7
        script:
          - composer install
          - php yii migrate --interactive=0
          - vendor/bin/codecept run
        services:
          - database
definitions:
  services:
    database:
      image: percona:5.7
      environment:
        MYSQL_ROOT_PASSWORD: lan143
        MYSQL_DATABASE: lan143
        MYSQL_USER: lan143
        MYSQL_PASSWORD: lan143

Здесь мы объявляем service с названием database, описываем docker образ который будет использоваться, а так же задаем переменные окружения в блоке enviroments. С помощью этих переменных мы можем настроить образ так как нам нужно и описано в наших тестовых конфигах. При его запуске будет пользовать с логином и паролем lan143 а так же созданной базой с именем lan143.

А в блоке default (наш основной контейнер) в блоке services мы указываем название связанного сервиса. С таким конфигом из нашего приложения мы сможем подключиться к СУБД запущенной в отдельном контейнере. Только не используйте при подключении localhost, используйте 127.0.0.1 иначе ваше приложение не сможет подключиться к СУБД.

Так же в Pipelines появились переменные окружения. Если взглянуть на пример из прошлой статьи, там есть строка с текстом:

- composer config -g github-oauth.github.com XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Где вместо XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX подразумевается вставить Auth Token из github. Указывать такие вещи в репозиториях не самый лучший путь. Во первых, это не очень безопасно. Во вторых, это не очень удобно. Если вдруг вы измените токен, вам придется делать коммит изменяющий токен в файле. Здесь вам помогут переменные окружения.

Их настроить можно в настройках репозитория, раздел Pipelines, страница Environment variables. Там вы увидите следующее окно:

Здесь вы можете добавлять и редактировать переменные окружения. Их названия должны полностью состоять из больших латинских букв. Установив галочку Secured вы сможете скрыть значение этой переменной. После того, как переменная была добавлена, вы можете использовать её в bitbucket-pipelines.yml добавив в начало её названия символ $. Пример:

- composer config -g github-oauth.github.com $GITHUB_TOKEN

Теперь вам не придется каждый раз делать новые коммиты, чтобы изменить какие-то настройки в сборке, а ваши токены и пароли будут в большей безопасности.


comments powered by HyperComments