Do uruchomienia CI wymagany jest runner który administrator musi dodać do projektu, może to zrobić w gitlab pod adresem www
W przypadku budowania projektu runner używa konta ssh ci_shh
na ultra3, co wymaga aby ten użytkownik mógł pobierać repozytoria wymagane przez projekt. Ma on dodany deploy key
gitlab runner ci_ssh
który należy włączyć w przypadku wymaganych repozytoriów.
Aby gitlab zaczął przetwarzać nasz kod (CI), musi istnieć plik .gitlab-ci.yml
Poniższa zawartość tego pliku to totalne minimum co musi posiadać projekt, ponieważ sprawdzana jest tu składnia php. W przykładzie wersja php7.2
może zostać zmieniona na php5.6
lub php7.0
, bo takie są dostępne na ultra3
code_standards:
stage: test
script:
- find . -type f -name '*.php' -exec php7.2 -l {} \; |(! grep -v "No syntax errors detected")
Ustawione CI wymaga pliku konfiguracyjnego w projekcie .gitlab-ci.yml
w głównym katalogu aplikacji, plik może mieć przykładową zawartość
code_standards:
stage: test
before_script:
- curl -sS https://getcomposer.org/installer | php
script:
- php7.2 composer.phar install
- php7.2 bin/ecs check src
- php7.2 bin/phpstan.phar analyse src -l 7
- php7.2 bin/phpunit --configuration phpunit.xml.dist
Gdzie src
w powyższych przykładach to scieżka która będzie sprawdzana.
Ta konfiguracja odpala 3 mechanizmy do których dążymy.
bin/ecs
- odpowiednik code sniffera, pozwala na łatwiejszą konfiguracjebin/phpstan
- statyczna analiza kodubin/phpunit
- testy jednostkowePowyższa konfiguracja wymaga w pliku composer.json
"require-dev": {
"symplify/easy-coding-standard": "^2.5",
"phpunit/phpunit": "^6",
"phpstan/phpstan-shim": "^0.9.2"
},
...
"config": {
"bin-dir": "bin"
},
Inny przykład (z navicula)
code_standards:
stage: test
script:
- php7.2 composer.phar install --no-scripts
- php7.2 ~/.composer/vendor/bin/ecs check modules/onepercent/ --level psr2 --clear-cache
- php7.2 ~/.composer/vendor/bin/ecs check modules/onepercent/ --level clean-code --clear-cache
- php7.0 phpstan.phar analyse -c phpstan.neon modules/onepercent/ -l 1
Taki plik uruchamia 4 polecenia np
php7.2
uruchamia plik composer.phar
z parametrami install --no-scripts
Powyższa konfiguraca wymaga aby w projekcie były pliki composer.phar
, phpstan.phar
i phpstan.neon
Różnica podejść wynika z tego czy w projekcie do composera możemy dodać takie paczki jak ecs lub phpstan. W Przypadku navicula jest to niemożliwe dlatego phpstan
odpalany jest bezpośrednio z projektu a ecs
(wersja 4.0.0) zainstalowany jest na koncie ci_ssh
.
Dodatkowo phpstan
odpalany jest przez php wersji 7.0, ponieważ naicula ma starą wersję yii, która powoduje błedy w php7.2 ze względu na używanie nazwy klasy Object
Przykładowy output :
Są błedy których:
kuw_ostendi git:(master) ✗ php7.0 phpstan.phar analyse controllers/TISReportController.php
1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
------ ---------------------------------------------------------
Line TISReportController.php
------ ---------------------------------------------------------
75 Access to static property $app on an unknown class Yii.
77 Access to static property $app on an unknown class Yii.
87 Access to static property $app on an unknown class Yii.
89 Access to static property $app on an unknown class Yii.
Powyższy przykład zawiera błąd na który się godzimy, czyli statyczne odwołanie do $app \Yii:$app
, aby móc dalej pracować (pipeline były zielone) należy dodać konfiguracje, do pliku phpstan.neon (plik konfigurujący) dodajemy treść błędu, który chcemy zignorować.
phpstan.neon:
parameters:
ignoreErrors: - '#Access to static property \$app on an unknown class Yii.#'
** składnia ignorowania '#REGEXP#'
gitlab-ci.yml:
#przed - php7.2 bin/phpstan.phar analyse src -l 7 #po - php7.2 bin/phpstan.phar -c phpstan.neon analyse src -l 7```
i już