Drone构建Laravel镜像时执行数据库迁移

Drone构建Laravel镜像时执行数据库迁移

       最近在部署一个Laravel项目,采用的时Docker部署,Drone自动化打包镜像,关于数据库管理用的是Laravel的migration来进行管理,所以想要在打包镜像的时候,同时执行数据库迁移,下面跟大家介绍我所使用的方法。

       一、配置Secrets。

       由于线上数据库配置不想在构建文件中暴露,所以我们直接将他配置在Drone项目管理后台的Secrets中,下面贴出我们的配置项

1.png

我们这里配置两个数据库,一个是正式环境的数据库,另一个是测试环境的数据库。

       二、修改Drone构建配置

       我们在构建过程中,直接读取Secrets的数据库配置覆盖项目的.env数据库配置,在后续步骤中执行数据库迁移,配置如下

#填充env配置
- name: fill-env
  pull: if-not-exists
  image: alpine
  environment:
      DB_HOST:
        from_secret: db_host
      DB_MASTERDATABASE:
        from_secret: db_master_database
      DB_TEST_DATABASE:
        from_secret: db_test_database
      DB_USERNAME:
        from_secret: db_username
      DB_PASSWORD:
        from_secret: db_password
  commands:
    - |
      case ${DRONE_BRANCH} in
        master)
          sed -i "s/DB_HOST=.*/DB_HOST=$${DB_HOST}/" .env
          sed -i "s/DB_DATABASE=.*/DB_DATABASE=$${DB_MASTERDATABASE}/" .env
          sed -i "s/DB_USERNAME=.*/DB_USERNAME=$${DB_USERNAME}/" .env
          sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$${DB_PASSWORD}/" .env
          ;;
        test)
          sed -i "s/DB_HOST=.*/DB_HOST=$${DB_HOST}/" .env
          sed -i "s/DB_DATABASE=.*/DB_DATABASE=$${DB_TEST_DATABASE}/" .env
          sed -i "s/DB_USERNAME=.*/DB_USERNAME=$${DB_USERNAME}/" .env
          sed -i "s/DB_PASSWORD=.*/DB_PASSWORD=$${DB_PASSWORD}/" .env
          ;;
      esac

这里我们做了区分,根据不同项目分支,覆盖不同的数据库配置,从而隔离正式跟测试环境。

       三、进行项目构建

       我们在覆盖数据库配置后面步骤执行composer以及数据库迁移,配置如下

#安装composer扩展以及执行数据库迁移
- name: backend
  pull: if-not-exists
  image: hongzhuangxian/php7.3-diy
  commands:
    - composer install --prefer-dist
    - php artisan migrate --force

       我们看看执行效果,上传一个新的迁移文件,构建过程成功执行迁移

2.png

       以上就是在构建过程中,实现自动执行数据库迁移的配置。

0条评论

发表评论