0

我正在寻找一个可以从终端运行的部署脚本,它会自动从存储库中部署我的站点。我确定的步骤是:

  • 通过 SSH 连接到远程服务器
  • 从远程存储库获取最新版本的站点
  • 运行任何 SQL 补丁
  • 清理并退出

我已经将 SSH 连接和git pull命令放在我的 shell 文件中,但我坚持的是 MySQL,它本身就是一个(交互式?)shell。所以在我的文件中,我有:

#!/bin/bash

# connect to remote server via SSH
ssh $SSH_USER@$SSH_HOST

# update code via Git
git pull origin $GIT_BRANCH

# connect to the database
mysql --user $MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DBNAME

# run any database patches
# disconnect from the database
# TODO
exit 0

如您所见,我正在连接到数据库,但不确定如何执行任何 MySQL 语句。

目前,我有一个目录,其中包含按数字顺序排列的 SQL 补丁。所以1.sql2.sql等等。然后在我的数据库中,我有一个表,它只记录要运行的最后一个补丁。所以我需要做一个SELECT声明,阅读要运行的最后一个补丁,然后运行任何必要的补丁。

  1. 如何在我的 shell 脚本中SELECT向提示符发出语句?mysql
  2. 那么正常的流量是多少呢?关闭连接并重新打开它,将补丁文件作为输入传递?或者在一个连接中运行所有必需的补丁?
  3. 我假设我将检查最后一个补丁文件,并do为中间的任何补丁做一个循环?

在这里的帮助将不胜感激。

4

3 回答 3

1

假设您想在远程端完成所有业务:

ssh $SSH_USER@$SSH_HOST << END_SSH
git pull origin $GIT_BRANCH
mysql --user $MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DBNAME << END_SQL
<sql statements go here>
END_SQL
END_SSH
于 2013-01-08T15:22:27.733 回答
0

您可以使用 Perl 或类似工具从 mysql 获取输出。这可以用来做你的控制流。

将您的 mysql 命令放入一个文件中,就像您输入它们一样。

然后运行为:mysql -u <user> -p -h <host> < file.sqlcommands.

您还可以使用“-e”在 mysql 命令行上进行查询。把你的'select max(patch) from .' 并阅读脚本中的输出。

于 2013-01-08T14:01:09.323 回答
0
cat *.sql | mysql --user $MYSQL_USER --password=$MYSQL_PASSWORD --database=$MYSQL_DBNAME
于 2013-01-08T14:12:34.877 回答