|
@@ -1,2 +1,58 @@
|
|
|
# dockerize-project
|
|
|
|
|
|
+## Hook
|
|
|
+Per ogni servizio docker, vengono eseguiti i seguenti Hook:
|
|
|
+
|
|
|
+- **prepare**: *eseguito prima della build e/o run dei container docker*
|
|
|
+ - prepare.before
|
|
|
+ - prepare.before.`<env>`
|
|
|
+ - prepare
|
|
|
+ - prepare.`<env>`
|
|
|
+ - prepare.after
|
|
|
+ - prepare.after.`<env>`
|
|
|
+- **start**: *eseguito dopo il run dei container docker*
|
|
|
+ - start.before
|
|
|
+ - start.before.`<env>`
|
|
|
+ - start
|
|
|
+ - start.`<env>`
|
|
|
+ - start.after
|
|
|
+ - start.after.`<env>`
|
|
|
+
|
|
|
+Ogni singolo hook prevede l'esistenza di un file `<hook>.js` all'interno della folder del servizio docker.
|
|
|
+
|
|
|
+Alcuni esempi di modulo:
|
|
|
+```js
|
|
|
+// servizio/prepare.before.dev.js
|
|
|
+module.exports = ({ log, service, shell }) => {
|
|
|
+ log("Questo è un esempio di prepare");
|
|
|
+ try {
|
|
|
+ shell("mkdir dir");
|
|
|
+ } catch (code) {
|
|
|
+ throw "Impossibile creare la directory";
|
|
|
+ }
|
|
|
+};
|
|
|
+```
|
|
|
+
|
|
|
+```js
|
|
|
+// servizio/start.after.dev.js
|
|
|
+module.exports = ({ log, service, shell, exec }) => {
|
|
|
+ log("Questo è un esempio di start");
|
|
|
+ return Promise.resolve()
|
|
|
+ .then(() => {
|
|
|
+ return exec("npm i");
|
|
|
+ });
|
|
|
+ .then(() => {
|
|
|
+ return exec("npm update");
|
|
|
+ });
|
|
|
+ .then(() => {
|
|
|
+ return exec("composer install");
|
|
|
+ });
|
|
|
+};
|
|
|
+```
|
|
|
+La funzione `exec` è disponibile solo per l'hook `start` e consente di eseguire codice shell dentro il container già in esecuzione.
|
|
|
+
|
|
|
+La funzione `shell` consente di eseguire codice shell sulla macchina host. In caso di ritorno del programma shell diverso da 0, la funzione lancia un'eccezione.
|
|
|
+
|
|
|
+**NB**: è responsabilità del programmatore gestire eventuali errori derivanti dai comandi eseguiti nei propri script.
|
|
|
+
|
|
|
+Per impedire la prosecuzione del processo di avvio dei container docker, da dentro agli script di hook di tipo `prepare` è sufficiente lanciare una eccezione (`throw "Messaggio di errore"`) oppure restituire una rejected Promise (`return Promise.reject("Messaggio di errore")`)
|