Gitlab php tikrinimo botas
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.