grunt-msdeploy 用于将 AngularJS 应用程序部署到多个服务器

grunt-msdeploy for deploying AngularJS app to multiple servers

我正在使用 grunt-msdeploy 将 angularJs 代码部署到其中一台服务器,这工作得很好。我想将相同的代码部署到多个服务器。我如何实现它?请帮忙!

Gruntfile.js msdeploy 代码:

    var path = require('path');
    //add the config file name
    var configFile = path.resolve('./deployconfig.json');
    var config = require(configFile);
msdeploy: {
            push: {
                options: {
                    verb: 'sync',
                    allowUntrusted: 'true',
                    source: {
                        'contentPath': path.resolve('./dist')
                    },
                    dest: {
                        contentPath: config.contentPath,
                        wmsvc: config.serverAddress,
                        userName: config.userName,
                        password: config.password
                    }
                }
            }
        }


grunt.loadNpmTasks('grunt-msdeploy');
 //add task for deployment - copying the dist from local server to remote server
 grunt.registerTask('deploy', ['msdeploy:push']);

deployconfig.json:

{
    "contentPath": "c:/inetpub/wwwroot/dist",
    "serverAddress": "ec2-xx-xx-xx-x.ap-northeast-1.compute.amazonaws.com",
    "userName": "xxxxxxxxx",
    "password": "xxxxxxxxx"
}

我尝试在 msdeploy 中使用多个目标,并在 json 文件中使用多个服务器信息,但这没有用。有没有办法做到这一点?

我认为你配置的任务有误,这就是为什么它在你的情况下不起作用,它应该被定义为 g运行t 的 taks,这是伪代码:

grunt.initConfig({
  msdeploy: {
    options: {
      // Task-specific options go here.
    },
    your_target: {
      // Target-specific file lists and/or options go here.
    },
  },
});

更多信息和选项in the official manual

对于多个目的地只需创建几个target描述,

grunt.initConfig({
  msdeploy: {
    options: {
      // Task-specific options go here.
    },
    your_target_1: {
      // Target-specific file lists and/or options go here.
    },
    your_target_2: {
      // Target-specific file lists and/or options go here.
    },
    ...
  },
});

您可以创建 options,对所有这些 targets 通用,以及每个 target.

的特定 options

当你运行任务时,只要不指定你需要运行哪个目标,它就会一个一个执行:

// will be executed for all the targets from task `msdeploy` definition
grunt.registerTask('deploy', ['msdeploy']);

// or alternatively you may explicitly define the order of tasks:
grunt.registerTask('deploy', ['msdeploy:your_target_1', 'msdeploy:your_target_2']);

这是可行的解决方案:

 msdeploy: {
            target1: {
                options: {
                    verb: 'sync',
                    allowUntrusted: 'true',
                    source: {
                        'contentPath': path.resolve('./dist')
                    },
                    dest: {
                        contentPath: "target1path",
                        wmsvc: "target1serverAddress",
                        userName:"target1userName",
                        password:"target1password"
                    }
                }
            },
            target2: {
                options: {
                    verb: 'sync',
                    allowUntrusted: 'true',
                    source: {
                        'contentPath': path.resolve('./dist')
                    },
                    dest: {
                        contentPath: "target2path",
                        wmsvc: "target2serverAddress",
                        userName:"target2userName",
                        password:"target2password"
                    }
                }
            }
        }

grunt.registerTask('deploy', ['msdeploy:target1', 'msdeploy:target2']);

万一有人想用配置文件来做,添加多个条目到 json 配置文件,像这样:

[ 
  {
    "contentPath": "c:/inetpub/wwwroot/dist",
    "serverAddress": "ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com",
    "userName": "xxxxxxxxxx",
    "password": "xxxxxxxxx"
  },
  {
    "contentPath": "c:/inetpub/wwwroot/dist",
    "serverAddress": "ec2-xx-xxx-xx-xxx.ap-northeast-1.compute.amazonaws.com",
    "userName": "xxxxxxxxxx",
    "password": "xxxxxxxxx"
  }
]

值可以表示为:

var path = require('path');
var configFile = path.resolve('./deployconfig.json');
var config = require(configFile);

contentPath: config[0].contentPath,
wmsvc: config[0].serverAddress,
userName: config[0].userName,
password: config[0].password