Usando o Grunt para implantar em seu AppFog App

Dependências:

  • grunhido
  • grunhido-cli
  • grunhido
  • AppFog gem (gem install af)

  • Se você estiver escrevendo este Grunfile do zero (ou seja, não gerado do Yeoman, etc), lembre-se de seguir as instruções de cada módulo para carregar suas próprias tarefas, etc. *

The Config

grunt.initConfig({
shell
: {
afDeploy
: {
// Your command may vary in terms of what directory
// you run this in. For example,
// my build script builds everything into /dist
command
: 'cd dist; af login --email <%= af.username %> --passwd <%= af.password %>; af update <%= af.appName %>;',
options
: {
stdout
: true // Outputs grunt-shell commands to the terminal
}
}
}
});

A tarefa

grunt.registerTask('afDeploy', function(appName, username, password) {
// You can go as elaborate as you want on
// the argument fallbacks,
// for the sake of this ProTip, I'm just using 'arguments'

if(arguments.length === 0) {
// Log an error
grunt
.log.error("afDeploy: No arguments provided. Please provide the App Name, Username and Password.");
// Return false to short circuit the task.
return false;
}

// Set args as config items, 'af' here is arbitrary, it can be anything
// as long as you reference it by this name in your Grunt config.
// As this is how we're able to have <%= af.appName %> mean something
grunt
.config.set('af.appName', appName);
grunt
.config.set('af.username', username);
grunt
.config.set('af.password', password);

var tasks = [
// Whatever your build tasks are, i.e compass:dist, etc.
'shell:afDeploy' // It depends on your build but most likely you'll want to do this as the very last step.
];

// Run tasks
grunt
.task.run(tasks);
});

A concha

Para executar seu script de compilação:

grunt afDeploy:myAppName:myAfLoginName:myAfLoginPasswd

Conclusão

Esperançosamente, isso deu a você um pequeno vislumbre de como Grunt é incrível. Tarefas como essas podem ser estendidas e escritas de muitas maneiras, tornando o fluxo de trabalho de desenvolvimento muito mais eficiente.

Desafio

Pense em como você poderia incorporar uma implantação baseada em ambiente!