Gulp任务到SSH然后mysqldump

时间:2015-11-08 14:07:49

标签: ssh gulp devops

所以我有这个场景,我有单独的Web服务器和MySQL服务器,我只能从Web服务器连接到MySQL服务器。

所以基本上每次我都要这样:

  • 第1步:' ssh -i~ / somecert.pem ubuntu@1.2.3.4'
  • 第2步:' mysqldump -u root -p'密码' -h 6.7.8.9 database_name> output.sql'

我是gulp的新手,我的目标是创建一个可以自动执行所有操作的任务,因此运行一个gulp任务会自动向我提供SQL文件。

这将使开发人员的生活变得更加容易,因为它只需要一个命令来下载最新的数据库转储。

这是我到目前为止所处的位置(gulpfile.js):

////////////////////////////////////////////////////////////////////
// Run: 'gulp download-db' to get latest SQL dump from production //
// File will be put under the 'dumps' folder                      //
////////////////////////////////////////////////////////////////////

// Load stuff
'use strict'
var gulp = require('gulp')
var GulpSSH = require('gulp-ssh')
var fs = require('fs');
// Function to get home path
function getUserHome() {
  return process.env.HOME || process.env.USERPROFILE;
}
var homepath = getUserHome();

///////////////////////////////////////
// SETTINGS (change if needed)       //
///////////////////////////////////////


var config = {

  // SSH connection
  host: '1.2.3.4',
  port: 22,
  username: 'ubuntu',
  //password: '1337p4ssw0rd', // Uncomment if needed
  privateKey: fs.readFileSync( homepath + '/certs/somecert.pem'), // Uncomment if needed

  // MySQL connection
  db_host: 'localhost',
  db_name: 'clients_db',
  db_username: 'root',
  db_password: 'dbp4ssw0rd',

}

////////////////////////////////////////////////
// Core script, don't need to touch from here //
////////////////////////////////////////////////


// Set up SSH connector
var gulpSSH = new GulpSSH({
  ignoreErrors: true,
  sshConfig: config
})

// Run the mysqldump
gulp.task('download-db', function(){
  return gulpSSH
    // runs the mysql dump
    .exec(['mysqldump -u '+config.db_username+' -p\''+config.db_password+'\' -h '+config.db_host+' '+config.db_name+''], {filePath: 'dump.sql'})
    // pipes output into local folder
    .pipe(gulp.dest('dumps'))
})

// Run search/replace "optional"

SSH进入Web服务器运行正常,但我在尝试获取mysqldump时遇到问题,我收到此消息:

events.js:85
  throw er; // Unhandled 'error' event
        ^
Error: Warning: 

如果我从服务器SSH手动尝试相同的mysqldump命令,我得到:

Warning: mysqldump: unknown variable 'loose-local-infile=1'

后跟正确的mylsql转储信息。

所以我认为这个警告信息搞砸了我的剧本,我想在这种情况下忽略警告,但不知道该怎么做或者是否可能。

另外我读到在命令行中直接使用密码并不是一个好习惯。

理想情况下,我希望从另一个文件加载所有配置变量,但这是我的第一个gulp任务,并不熟悉我将如何做到这一点。

在Gulp有经验的人可以指导我完成这项工作的好方法吗?或者你认为我根本不应该使用Gulp吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

正如我所怀疑的,该警告信息阻止了gulp任务的最终确定,我通过评论loose-local-infile=1来自/etc/mysql/my.cnf

来摆脱它