1

我正在尝试为涉及 git 和 Drupal 的本地 wamp 和服务器灯之间的迁移控制找到一个很好的解决方案。

由于Migration类,我已经找到了一个很好的使用 CodeIgniter 进行迁移控制的解决方案。然后我可以利用该post-receive钩子并运行php path/to/codeigniter/index.php migrate/index它,它会简单地更新数据库设计以及文件。

然而,从我迄今为止看到的 Drupal 来看,这有点棘手。我目前正在考虑以某种方式存储 Drush 命令以启用新模块等。然后的想法是拥有一个类似于Migration的系统,我只是使用它来运行,并通过将whos 命令保存在某处post-receive启用新模块。drush en -y new_module

此处说明的理想流程:

理想流量

我想我需要完成这个流程是让 bash 脚本执行,获取一些名为的文件,post-receive例如001.txt在一个名为高于保存的值,然后将该值设置为已执行文件中的最大数字。drush_commands.gitignore

问题

但是,我不确定如何以及是否可以理想地使用 bash 脚本来做到这一点。这种方法是一种理想的方法吗? bash 脚本将如何工作,或者你知道有什么更好的方法可以在我的本地 wamp 和服务器上启用相同的模块(和其他 drush 东西)push吗?

额外问题:我可以使用这种方法来处理对字段数据、内容类型等的更改吗?我很难准确掌握如何在本地版本和实时版本之间同步整体结构。

4

1 回答 1

1

这在理论上和实践上都是绝对可行的,尽管我不会尝试完全使用接收后挂钩来完成它。

理想的解决方案是让一个 CI 服务器,例如 Jenkins ( http://jenkins-ci.org/ ) 监听配置为处理迁移的作业,并使用 post-receive 钩子通过 CLI 界面触发此作业或 cURL 请求。这将构建的责任从 Git(它不属于的地方)转移到 CI(它存在的地方)。

有许多不错的 CI 解决方案,包括免费的和专有的,它们将通过一些基本配置为您处理所有这些。

配置的作业在触发时会将您的存储库(基于您指定的分支)检出到其自己的工作区目录中,然后可以调用脚本将其构建为应用程序。

# post-receive hook
curl http://my.ci-server.local/job/drush_command/buildWithParameters?&GITBRANCH=$GIT_BRANCH&delay=0
  • my.ci-server.local您本地安装的 CI 服务器安装
  • drush_command将是你的工作名称
  • GIT_BRANCH是要构建的分支的名称(默认开发???)

在 CI 作业中,您将拥有一个执行类似于以下步骤的脚本:

# GitIgnore file
savedValue:0001

# bash script
savedValue=$(cat $WORKSPACE/.gitignore | grep 'savedValue' | cut -d: -f2);
newValue=$(savedValue);
for file in $(ls $WORKSPACE/drush_commands); do

    currentValue=$(echo $file | cut -d. -f1);
    if [ $currentValue -gt $savedValue ] ; then

        drush en -y "${currentValue}.txt}";
        if [ $currentValue > $newValue ] ; then
            newValue=$currentValue;
        fi
    fi
done

sed -i '' "s/savedValue.*/savedValue:$newValue/" $WORKSPACE/.gitignore;

您可以通过在循环之后调用一个单独的脚本来进一步扩展它以处理对数据的更改,该脚本会查找要执行的其他脚本,然后从单独的目录中获取要执行的更改?

几点:

  • 我不会将保存的值添加到 .gitignore 文件中——这不是真正适合它的地方。conf/last_enabled为此类信息使用单独的配置文件(例如)。
  • 如果目录中有未命名为“001.txt 002.txt”等的文件,则循环不会很好地工作drush_commands。您必须过滤这些文件以确保获得最新的。

希望这可以帮助。

于 2013-07-02T12:08:51.097 回答