Instalacja i konfiguracja gitlab-ci

Instalacja / dodanie projektu

Do uruchomienia CI wymagany jest runner który administrator musi dodać do projektu, może to zrobić w gitlab pod adresem www

Ważne

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.

Podstawowa konfiguracja - gitlab-ci

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")

Konfiguracja projektu - gitlab-ci

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ą konfiguracje
  • bin/phpstan - statyczna analiza kodu
  • bin/phpunit - testy jednostkowe

Powyż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 :

FAQ

Jak mogę dodać błedy phpstan do ignorowanych

Są błedy których:

  • poprawa może być zbyt droga
  • nie możemy poprawić (błędy są w vendorze i nasz np Kontroler który dziedziczy po czymś z vendora zawiera błąd,... tak w moebiusie są takie rzeczy)
  • używamy swiadomie (godzimy się na nie ! )
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ż
Edit on GitLab