Php 与Laravel的持续集成和开发
我是拉威尔的新手,目前正在做我的第一个项目。我以前曾与CI合作过,但从未与Laravel合作过。下面是我为我们的开发服务器部署的脚本。不确定这是否是最好的方法。无论如何,迁移部分给了我一个错误。在我完成这项工作后,我将尝试使用一些php插件来分析代码质量、复制、单元测试等 请看下面 脚本:Php 与Laravel的持续集成和开发,php,laravel,jenkins,continuous-integration,laravel-5.4,Php,Laravel,Jenkins,Continuous Integration,Laravel 5.4,我是拉威尔的新手,目前正在做我的第一个项目。我以前曾与CI合作过,但从未与Laravel合作过。下面是我为我们的开发服务器部署的脚本。不确定这是否是最好的方法。无论如何,迁移部分给了我一个错误。在我完成这项工作后,我将尝试使用一些php插件来分析代码质量、复制、单元测试等 请看下面 脚本: rsync -a . /var/www/html/dev/ cd /var/www/html/dev/ # cfg file for dev cp .env.dev .env # run compose
rsync -a . /var/www/html/dev/
cd /var/www/html/dev/
# cfg file for dev
cp .env.dev .env
# run composer
composer clearcache
composer install --optimize-autoloader
# optimize
php artisan cache:clear
php artisan optimize
php artisan route:cache | true
# migrate DB
php artisan migrate
错误:
[Illuminate\Database\QueryException]
SQLSTATE[42S01]: Base table or view already exists:
我应该在迁移之前删除所有表吗?如果是这样,我看不出使用它们进行自动部署有什么好处。此外,我们的表中填充了用于测试的数据(手动填充,因为我们不想自动种子)。在运行迁移之前,您不应该删除所有表 此错误来自您的
migrations
表和位于database\migrations
文件夹的migrations
发生冲突
您应该在返回继续配置Jenkins之前解决此冲突
我的建议是:
您应该为项目的控制发布版本使用
您可以通过shared
文件夹共享.env
文件
默认情况下,您可以运行composer安装
和npm安装
以下是我安装和配置Rocketeer的步骤:
$ wget http://rocketeer.autopergamene.eu/versions/rocketeer.phar
$ chmod +x rocketeer.phar
$ mv rocketeer.phar /usr/local/bin/rocketeer
//TODO Install PHP for Jenkins server
$ sudo apt-get install php
//TODO Check rocketeer
$ rocketeer check
No connections have been set, please create one: (production) <~ Succeed
安装火箭转向器:
$ wget http://rocketeer.autopergamene.eu/versions/rocketeer.phar
$ chmod +x rocketeer.phar
$ mv rocketeer.phar /usr/local/bin/rocketeer
//TODO Install PHP for Jenkins server
$ sudo apt-get install php
//TODO Check rocketeer
$ rocketeer check
No connections have been set, please create one: (production) <~ Succeed
配置
$ cd /var/lib/jenkins/drone-deploy/drone-deploy/drone-php
$ nano .rocketeer/config.php
Replace connections name production --> develop //It's Rocketeer bug
$ nano .rocketeer/remote.php
'root_directory' => '/var/www/html/',
'shared' => [
'storage/logs',
'storage/framework/sessions',
'.env',
],
'permissions' => [
// The folders and files to set as web writable
'files' => [
//'app/database/production.sqlite',
'bootstrap',
'storage',
'public',
],
// Here you can configure what actions will be executed to set
// permissions on the folder above. The Closure can return
// a single command as a string or an array of commands
'callback' => function ($task, $file) {
return [
sprintf('chmod -R 777 %s', $file),
sprintf('chmod -R g+s %s', $file),
sprintf('chown -R ec2-user:ec2-user %s', $file),
];
},
],
$ nano .rocketeer/strategies.php
//'test' => 'Phpunit',
'test' => '',
//return $composer->install([], ['--no-interaction' => null, '--no-dev' => null, '--prefer-dist' => null]);
return $composer->install([]);
运行试验
rocketeer deploy --on="develop" --tests
通常只有在迁移失败后,您才收到此消息,然后尝试重新迁移数据库。@RossWilson,您似乎是对的。那么,当某些迁移失败时,如何继续以避免这种情况呢?您通常会在本地/dev环境中遇到这些错误,并在问题进入生产之前解决问题。当它发生在您的dev env中时,您可以手动删除所有表,或者只检查存在哪些表不在迁移表中,然后简单地删除该表,然后回滚并迁移。