【问题标题】:Continuous Integration and Development with Laravel使用 Laravel 进行持续集成和开发
【发布时间】:2017-07-15 00:52:46
【问题描述】:

我是 Laravel 的新手,目前正在做我的第一个项目。我以前使用过 CI,但从未使用过 Laravel。所以,这是我的开发服务器的部署脚本。不确定这是否是最好的方法。无论如何,迁移部分给了我一个错误。在我让它工作之后,我会尝试一些 php 插件来分析代码质量、重复、单元测试等。

请看下面

脚本:

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:

我应该在迁移之前删除所有表吗?如果是这样,我看不出将它们用于自动部署的有用部分是什么。此外,我们的表格中填充了用于测试的数据(手动填充,因为我们不想自动播种)。

【问题讨论】:

  • 您通常只会在迁移失败并尝试重新迁移数据库时收到此消息。
  • @RossWilson,你似乎是对的。那么,当一些迁移失败时,为了避免这种情况,应该如何进行呢?
  • 您通常会在本地/开发环境中遇到这些错误,并在问题投入生产之前解决问题。当它发生在您的开发环境中时,您可以手动删除所有表,或者只检查迁移表中不存在的表,然后简单地删除该表,然后回滚并迁移。

标签: php laravel jenkins continuous-integration laravel-5.4


【解决方案1】:

在运行迁移之前,您不应删除所有表。

此错误来自您的migrations 表和您在database\migrations 文件夹中的migrations 存在冲突。

您应该在返回继续配置 Jenkins 之前解决此冲突。

我的建议:

您应该使用Rocketeer 来控制项目的发布版本。

您可以通过shared 文件夹共享您的.env 文件。

Rocketeer默认配置可以运行composer installnpm install

这是我安装和配置 Rocketeer 的步骤:

安装 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

设置远程服务器信息

$ cd /var/lib/jenkins/drone-deploy/drone-deploy/server-dev
$ rocketeer ignite
No connections have been set, please create one: (production)develop
No host is set for [develop], please provide one:35.166.x.x
No username is set for [develop], please provide one:ec2-user
No password or SSH key is set for [develop], which would you use? (key) [key/password]key
Please enter the full path to your key (/var/lib/jenkins/.ssh/id_rs/var/lib/jenkins/.ssh/xxx.pem
If a keyphrase is required, provide it
No repository is set for [repository], please provide one:git@bitbucket.org:xx/xxxxxx.git
No username is set for [repository], please provide one:xxx
No password is set for [repository], please provide one:
develop/0 | Ignite (Creates Rocketeer's configuration)
What is your application's name ? (drone-php)drone_deploy
The Rocketeer configuration was created at server-dev/.rocketeer

配置

$ 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 2016-08-28
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多