8

Ho un'applicazione nodo che richiede a grunt di eseguire una "build" prima che l'applicazione possa essere eseguita correttamente. (esegue concat/minification/revving del codice sorgente ecc.). Ho questo in esecuzione su un'istanza EC2 con accesso SSH in quanto posso solo SSH nella directory ed eseguire Grunt come parte del processo di distribuzione. Tuttavia per automatizzare questo sto spostando l'applicazione su ElasticBeanstalk e ho difficoltà a far funzionare correttamente l'applicazione. Il motivo del passaggio a EB è quello di mantenere le chiavi SSH disattivate sui server live, quindi queste istanze EB sono configurate senza accesso ssh.Run Grunt on ElasticBeanstalk

Non sembra esserci alcuna documentazione ufficiale disponibile, qualcuno potrebbe indicarmi una buona direzione per riuscire a ottenere quanto sopra? Ho bisogno di grunt per eseguire prima che l'applicazione sia avviata in modo che l'applicazione abbia i file disponibili (altrimenti ci sarà un 404).

+0

Ecco una domanda in qualche modo correlata che offre un altro modo di farlo rispetto al mio suggerimento: http://stackoverflow.com/questions/23444288/aws-elastic-beanstalk-run-grunt-task?rq=1 –

risposta

12

Il grunt in esecuzione sarebbe molto simile al gulp in esecuzione, quindi includerò la mia configurazione di seguito.

Questo è all'interno di una cartella di.ebextensions alla base del mio progetto, denominato 01run.config. È possibile avere più file di configurazione, che verrà eseguito in ordine alfabetico (da qui il all'inizio.)

Questo fondamentalmente solo istruisce il processo per eseguire questi comandi in ordine, ancora una volta, è fatto in ordine alfabetico, in modo Li ho nominati di conseguenza.

commands: 
    01get_sudo: 
    command: echo Defaults:root \!requiretty >> /etc/sudoers 
    02npm_install: 
    command: sudo yum -y --enablerepo=epel install nodejs npm 
    03npm_install_bower: 
    command: sudo npm install -g bower 
    04npm_install_gulp: 
    command: sudo npm install -g gulp 
    05yum_install_git: 
    command: sudo yum -y --enablerepo=epel install git 
container_commands: 
    01bower_install: 
    command: sudo bower install --allow-root 
    02gulp_sass: 
    command: sudo gulp sass 
  1. accedi sudo
  2. installare node.js e NPM con yum
  3. installare gazebo (il mio processo di gulp pergolato necessario)
  4. installare sorso
  5. installare git (necessaria per pergolato)
  6. Ho quindi eseguito due comandi contenitore, che si verificano dopo l'installazione di npm e prima dell'inizio di npm:
    1. scrigno di installare
    2. sorso sass

Nel tuo caso, devi semplicemente rimuovere gazebo e git installa, installare grugnito-cli, e quindi eseguire grugnito.


Da quando faccio questo, ho rimosso la necessità che il processo di cui sopra per fare tutto in anticipo prima della distribuzione e di commettere i file costruite al repository git. È stata almeno una buona esperienza di apprendimento che mi dà molto più controllo sulle mie istanze ec2 distribuite da beanstalk.

+0

Grazie! Mi mancavano le parti sudo e il commit dei file dist con il repository era qualcosa che volevo evitare. – leaksterrr

+0

Ciao Kevin, sono curioso del tuo ultimo paragrafo. Perché hai sentito che commettere i file di build su git era più appropriato che eseguire gulp? – Rail24

+1

Se eseguo il commit dei file di build, non devo preoccuparmi della rara occorrenza di un errore di compilazione e di ottenere tempi di avvio più rapidi. –

1

Questo non risponde esattamente alla domanda, ma in linea con l'ultima osservazione di Kevin B, eseguo le operazioni, inclusa la costruzione, all'esterno di Elastic Beanstalk, e uso .ebignore per controllare la distribuzione. Quando .ebignore è presente, eb deploy segue invece di .gitignore. Questo mi permette di controllare il processo di compilazione al di fuori di Elastic Beanstalk, mantenendo gli artefatti di build dal mio repository git.

Ad esempio, se gli artefatti di costruzione passano a .build/

.gitignore

node_modules 
.elastic_beanstalk 
... 
.build 

.ebignore

node_modules 
.elastic_beanstalk 
... 
.git 

ricordarsi di aggiungere .git in .ebignore per evitare che i metadati git repository locale da sempre schierato. Inoltre, trovo che eb deploy valuti tutte le sottocartelle all'interno di una cartella esclusa, rallentando inutilmente la distribuzione. Ho dovuto spostare temporaneamente node_modules altrove prima di eseguire eb deploy per accelerarlo.