Bonjour, je viens vers vous car je n'arrive pas à faire fonctionner Travis Continuous Integration avec une application CakePHP.
Voici le projet sur lequel je travaille : https://github.com/Okimi/okimi-webapp/
Voici mon fichier .travis.yml
language: php
php:
- 5.3
- 5.4
before_script :
- sh -c "mysql -e 'CREATE DATABASE cakephp_test;'"
- chmod -R 777 ./app/webroot
- mkdir ./app/tmp
- chmod -R 777 ./app/tmp
- echo "<?php
class DATABASE_CONFIG {
public \$test = array(
'datasource' => 'Database/Mysql',
'database' => 'cakephp_test',
'host' => '127.0.0.1',
'login' => 'travis',
'persistent' => false
);
}" > app/Config/database.php
script:
- ./lib/Cake/Console/cake test app AllTests --stderr
Avec cette configuration, j'ai l'erreur suivante :
Error: The datasource configuration "default" was not found in database.php
Si je rajoute une configuration $default, j'obtiens l'erreur suivante :
Error: Database connection "Mysql" is missing, or could not be created.
Avez vous une idée d'où pourrait provenir le problème ?
Merci d'avance.
Ok après plusieurs heures sur le problème j'ai enfin trouvé. Je vous donne la solution, au cas où qulqu'un souhaite réaliser la même chose.
La problématique
Faire fonctionner Travis avec un projet CakePHP
Le repository
Il ne faut mettre que le contenu du dossier app dans votre repository GitHub, il vaut mieux ne pas intégrer les librairies de CakePHP. Pourquoi ? Cela permettra de faire une mise à jour plus facilement, et de permettre à plusieurs développeurs de travailler avec des versions de CakePHP différentes.
Pourquoi le .travis.yml des plugins de Grafikart ne fonctionnent pas ?
La raison est que nous ne déplaçons pas un plugin mais carrément le dossier app. Cela va influer sur certains points assez importants, notamment la gestion de la base de données.
Le code
language: php
php:
- 5.3
before_script:
- sh -c "cd .. ; git clone --depth 1 git://github.com/cakephp/cakephp -b master"
- sh -c "cd ..; rm -r cakephp/app"
- sh -c "cd ..; mv okimi-webapp cakephp/app"
- sh -c "chmod -R 777 tmp"
- sh -c "chmod -R 777 webroot"
- sh -c "mysql -e 'CREATE DATABASE okimi; USE okimi; CREATE TABLE pages (id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(40) NOT NULL, PRIMARY KEY (id));'"
- sh -c "mysql -e 'CREATE DATABASE okimi_test;'"
- echo "<?php
class DATABASE_CONFIG {
public \$default = array(
'datasource' => 'Database/Mysql',
'database' => 'okimi',
'host' => '127.0.0.1',
'login' => 'travis',
'persistent' => false,
);
public \$test = array(
'datasource' => 'Database/Mysql',
'database' => 'okimi_test',
'host' => '127.0.0.1',
'login' => 'travis',
'persistent' => false,
);
}" > Config/database.php
script:
- Console/cake test app AllTests --stderr
Explications
Je vais expliquer les différentes lignes du before_script.
Ce qui me gêne
J'ai un soucis avec la ligne 12 car elle ne rend pas le code modulable, il me faudrait créer chaque table dès que je rajoute un Model, ce n'est pas viable à mon sens. Je vois donc 2 solutions :
En espérant que cela permette d'aider quelqu'un et de lui éviter les prises de têtes.
Oui, j'ai oublié de préciser, que tout fonctionne en local, que ce soit depuis l'interface web ou depuis la ligne de commande.
Petit up, je bloque vraiment dessus.
Après plusieurs tests, il s'avère que les erreurs citées dans le premier post viennent du fait que j'avais intégré le framework dans mon application. Maintenant je le charge via github. J'obtiens l'erreur suivante :
Cannot open file "/home/travis/build/Okimi/cakephp/app/Test/Case/AllTestsTest.php".
Je n'arrive pas à comprendre d'où vient mon erreur.