Gitlab php tikrinimo botas

Iš Žinynas.
13:37, 28 vasario 2017 versija, sukurta \dev\null (Aptarimas | indėlis)
(skirt) ← Ankstesnė versija | Dabartinė versija (skirt) | Vėlesnė versija → (skirt)
Jump to navigation Jump to search

Praeitame straipsnyje rašiau kaip automatizuoti C# projektų kompiliavimus. Šiame, aprašysiu kaip patikrinti PHP kodą su skirtingomis PHP versijomis. Naudosime standartinį PHP v5.6 ir naujajį PHP 7.

Nutolusios sistemos paruošimas[keisti]

Nutolusioje Linux sistemoje kurioje norime paleisti PHP unit testavimą, reikės pasiruošti gitlab-multi-runner, php naudosime dockeriuose (kuriuose bus skirtingos php versijos). Pirmiausia reiktų susidiegti multi-runner:

# Debian/Ubuntu
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.deb.sh | sudo bash
# CentOS 
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
# Debian/Ubuntu
sudo apt-get install gitlab-ci-multi-runner
# CentOS
sudo yum install gitlab-ci-multi-runner

Registruojame runnerį savame gitlab'e[keisti]

sudo gitlab-ci-multi-runner register
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci )
https://gitlab.lt/ci
Please enter the gitlab-ci token for this runner
xxx
Please enter the gitlab-ci description for this runner
PHP Testavimas
INFO[0034] fcf5c619 Registering runner... succeeded
Please enter the executor: shell, docker, docker-ssh, ssh?
docker
Please enter the Docker image (eg. ruby:2.1):
php:5.6
INFO[0037] Runner registered successfully. Feel free to start it, but if it's
running already the config should be automatically reloaded!

PHP Unit testavimas[keisti]

Projekto pasiruošimas[keisti]

Šioje skiltyje aprašytas pačio projekto (kuris bus testuojamas) paruošimas, taisyklių aprašymas ir t.t. Pagal ką vyks testasvimas. Pirmiausia mums reikia atsidaryti terminalą arba tiesiog to projekto katalogą.

Padarome scriptą kuris paruoš docker konteinerį nutolusiame serveryje[keisti]

Sukuriame katalogą ci ir jame įrašome failą docker_install.sh su šiais viduriais:

#!/bin/bash

# Diegiame tiktai priklausomybes reikalingas mūsų dockeriui
[[ ! -e /.dockerenv ]] && [[ ! -e /.dockerinit ]] && exit 0

set -xe

# Įdiegiame git (php dockerio atvaizdas jo neturi)
apt-get update -yqq
apt-get install git -yqq

# Įdiegiame phpunit, įrankį kurį naudosime php testavimui
curl --location --output /usr/local/bin/phpunit https://phar.phpunit.de/phpunit.phar
chmod +x /usr/local/bin/phpunit

# Sudiegiame mysql draiverį ir kitus reikalingus php modulius
docker-php-ext-install pdo_mysql mysqli

Kaip jau supratote pabaigoje scripto yra nurodoma kuriuos PHP modulius turi įdiegti scriptas (kurių reikalauja jūsų projektas).

Gitlab roboto taisyklių failas[keisti]

Čia aprašysime taisykles kaip turėtų būti testuojamas PHP kodas. Failą išsaugome kaip .gitlab-ci.yml

before_script:
 - bash ci/docker_install.sh > /dev/null
test:5.6:
  image: php:5.6
  script:
  - phpunit --configuration phpunit.xml
test:7.0:
  image: php:7.0
  script:
  - phpunit --configuration phpunit.xml

Trumpas aprašymas: Šios taisyklės aprašo kaip turėtų elgtis robotas inicijuojantis PHP kodo testavimą, kaip paruošti sistemą, kokias komandas vykdyti ir t.t.

PHP Tikrinimo failo taisyklių aprašymas[keisti]

Čia aprašysime kaip konkrečiai turetų būti testuojamas PHP kodas, su juo susiję moduliai bei struktūra. phpunit.xml:

<phpunit bootstrap="functions.php">
  <testsuites>
    <testsuite name="project backend test">
      <file>query.php</file>
      <file>ins.php</file>
      <file>auth.php</file>
    </testsuite>
  </testsuites>
</phpunit>

Taisyklės kaip teisingai aprašyti šį failą pakavotos čia. Kitas pavyzdys.:

<?xml version="1.0" encoding="UTF-8"?>

<phpunit bootstrap="Tests/bootstrap.php" colors="true">
    <php>
        <var name="db_dsn" value="mysql:dbname=hello_world_test;host=localhost"/>
        <var name="db_username" value="root"/>
        <var name="db_password" value=""/>
    </php>

    <testsuites>
        <testsuite name="Hello World Test Suite">
            <directory>./Tests/</directory>
        </testsuite>
    </testsuites>

    <filter>
        <whitelist>
            <directory>./</directory>
            <exclude>
                <directory>./Tests</directory>
            </exclude>
        </whitelist>
    </filter>
</phpunit>

Dar kitas pavyzdys:

<?xml version="1.0" encoding="UTF-8"?>

<phpunit bootstrap="Tests/bootstrap.php" colors="true">
    <php>
        <var name="db_dsn" value="pgsql:dbname=hello_world_test;host=localhost"/>
        <var name="db_username" value="postgres"/>
        <var name="db_password" value=""/>
    </php>

    <testsuites>
        <testsuite name="Hello World Test Suite">
            <directory>./Tests/</directory>
        </testsuite>
    </testsuites>

    <filter>
        <whitelist>
            <directory>./</directory>
            <exclude>
                <directory>./Tests</directory>
            </exclude>
        </whitelist>
    </filter>
</phpunit>

PHP Kodo pavyzdžiai sudėti čia.

PHP 7 Compatibility Checker[keisti]

Šio boto pagalba kodas gali būti pratestuotas prieš php7 palaikyma, t.y patikrina kodo suderinamumą su naująja php versija.

Pasiruošimas[keisti]

Šioje skiltyje aprašytas pačio projekto (kuris bus testuojamas) paruošimas, taisyklių aprašymas ir t.t. Pagal ką vyks testasvimas. Pirmiausia mums reikia atsidaryti terminalą arba tiesiog to projekto katalogą.

Padarome scriptą kuris paruoš docker konteinerį nutolusiame serveryje[keisti]

Sukuriame katalogą ci ir jame įrašome failą docker_install.sh su šiais viduriais:

#!/bin/bash

[[ ! -e /.dockerenv ]] && [[ ! -e /.dockerinit ]] && exit 0
set -xe
apt-get update -yqq
apt-get install git curl zip unzip -yqq
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
    && chmod +x /usr/local/bin/composer \
    && echo "date.timezone = Europe/Vilnius" >> /usr/local/etc/php/conf.d/symfony.ini \
    && composer global require sstalle/php7cc
composer global require sstalle/php7cc
echo "php -d memory_limit=2G /root/.composer/vendor/bin/php7cc \"\$@\"" > /usr/local/bin/php7cc
chmod +x /usr/local/bin/php7cc

Gitlab roboto taisyklių failas[keisti]

Čia aprašysime taisykles kuris PHP kodas turėtų būti testuojamas. Failą išsaugome kaip .gitlab-ci.yml projekto kataloge.

before_script:
- bash ci/docker_install.sh > /dev/null
test:5.6:
  image: php:5.6
  script:
  - php7cc system/

Taip pat galime naudoti pranešimo lygmenis pvz.: --level=error, daugiau info čia.

Trumpas aprašymas: Šios taisyklės aprašo kaip turėtų elgtis robotas inicijuojantis PHP kodo testavimą, kaip paruošti sistemą, kokias komandas vykdyti ir t.t. Kadangi php7cc biblioteka nereikalauja php7 versijos įdiegtos sistemoje, naudosime senesnę php5.6.