Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

215 lignes
8.0 KiB

  1. /**
  2. * (c) by aheadware.com
  3. */
  4. /**
  5. * Prequisties:
  6. *
  7. * - destDir must exist
  8. * - tmpDir must exist
  9. * - remoteTmpDir must exist
  10. *
  11. * - node modules (global)
  12. * -- npm install async -g
  13. * https://caolan.github.io/async/index.html
  14. * -- npm install fs-extra -g
  15. * https://github.com/jprichardson/node-fs-extra
  16. * -- npm install ssh2 -g
  17. * https://www.npmjs.com/package/ssh2
  18. * -- npm install zip-folder -g
  19. * https://www.npmjs.com/package/zip-folder
  20. *
  21. *
  22. * General:
  23. *
  24. * zipName = 'probuddy_landing.zip';
  25. *
  26. *
  27. * Local:
  28. *
  29. * localTmpDir = 'C:/Users/Benny/Desktop/_SYSTEM/temp';
  30. *
  31. *
  32. * Server
  33. *
  34. * serverDestDir = '/www/htdocs/v034011/projects/probuddy/client/www';
  35. * serverTmpDir = '/www/htdocs/v034011/_temp';
  36. */
  37. const Client = require('ssh2').Client;
  38. const zipFolder = require('zip-folder');
  39. const fs = require ( 'fs' );
  40. const fsExtra = require( 'fs-extra' );
  41. // globals
  42. const zipName = 'probuddy-app-server.zip';
  43. const localTmpDir = 'C:/Users/aheadware-benny/_SYSTEM/temp';
  44. const localPrjDir = 'C:/Users/aheadware-benny/VC/tbuddy-probuddy/src/server';
  45. const serverDestDir = '/www/htdocs/v034011/projects/probuddy/server';
  46. const serverTmpDir = '/www/htdocs/v034011/_temp';
  47. function deploy()
  48. {
  49. var localCommands = [
  50. 'rd /S /Q ' + localTmpDir + '/probuddy-server-app',
  51. 'mkdir ' + localTmpDir + '/probuddy-server-app',
  52. 'xcopy /e ' + localPrjDir + ' ' + localTmpDir + '/probuddy-server-app'
  53. ];
  54. fsExtra.removeSync( localTmpDir + '/probuddy-server-app' );
  55. fsExtra.mkdirpSync( localTmpDir + '/probuddy-server-app' );
  56. fsExtra.copySync( localPrjDir, localTmpDir + '/probuddy-server-app' );
  57. fsExtra.copySync( localTmpDir + '/probuddy-server-app/server/config/locals/probuddy-live.php', localTmpDir + '/probuddy-server-app/server/config/boot_local.php' );
  58. zipFolder(
  59. localTmpDir + '/probuddy-server-app',
  60. localTmpDir + '/probuddy-server-app.zip',
  61. function(err)
  62. {
  63. if( err )
  64. {
  65. console.log('zipFolder failed with: ', err);
  66. }
  67. else
  68. {
  69. // Upload and decompress and remove zip
  70. var conn = new Client();
  71. conn.on('ready', function()
  72. {
  73. conn.sftp ( function( err, sftp )
  74. {
  75. if ( err ) throw err;
  76. // UPLOAD ZIP FILE
  77. var readStream = fs.createReadStream( localTmpDir + '/probuddy-server-app.zip' );
  78. var writeStream = sftp.createWriteStream( serverTmpDir + '/probuddy-server-app.zip', { mode: 0o755 } );
  79. writeStream.on('close',function ()
  80. {
  81. console.log( "- file transferred succesfully" );
  82. // DELETE OLD DIRECTORY
  83. conn.exec( 'rm -rf ' + serverDestDir + '/;md ' + serverDestDir, function( err, stream )
  84. //conn.exec( 'cd ' + serverDestDir + '/;ls -la', function( err, stream )
  85. {
  86. if ( err ) throw err;
  87. stream.on('data', function(data)
  88. {
  89. console.log('STDOUT: ' + data);
  90. });
  91. stream.stderr.on('data', function(data)
  92. {
  93. console.log('STDERR: ' + data);
  94. });
  95. stream.on('close', function(code, signal)
  96. {
  97. console.log('Process closed with code ' + code);
  98. // UNZIP NEW VERSION TO DESTINATION DIRECTORY
  99. conn.exec( 'cd ' + serverTmpDir + '/;unzip -o probuddy-server-app.zip -d ' + serverDestDir + '/;chmod -R 755 ' + serverDestDir + '/', function( err, stream )
  100. {
  101. if ( err ) throw err;
  102. stream.on('data', function(data)
  103. {
  104. console.log('STDOUT: ' + data);
  105. });
  106. stream.stderr.on('data', function(data)
  107. {
  108. console.log('STDERR: ' + data);
  109. });
  110. stream.on('close', function(code, signal)
  111. {
  112. console.log('Process closed with code ' + code);
  113. conn.sftp(function(err, sftp)
  114. {
  115. if (err) throw err;
  116. // REMOVE ZIP FILE
  117. sftp.unlink( serverTmpDir + '/probuddy-server-app.zip', function(err)
  118. {
  119. if ( err )
  120. {
  121. console.log( "Error, problem starting SFTP: %s", err );
  122. }
  123. else
  124. {
  125. console.log( "file unlinked" );
  126. process.exit( -1 );
  127. }
  128. //conn.close();
  129. });
  130. });
  131. });
  132. });
  133. });
  134. });
  135. });
  136. writeStream.on('end', function ()
  137. {
  138. console.log( "sftp connection closed" );
  139. conn.close();
  140. });
  141. // initiate transfer of file
  142. readStream.pipe( writeStream );
  143. });
  144. /*
  145. conn.exec( 'ls -lah', function( err, stream )
  146. {
  147. if ( err ) throw err;
  148. stream.on('data', function(data) {
  149. console.log('STDOUT: ' + data);
  150. });
  151. stream.stderr.on('data', function(data) {
  152. console.log('STDERR: ' + data);
  153. });
  154. stream.on('close', function(code, signal) {
  155. console.log('Process closed with code ' + code);
  156. });
  157. });
  158. */
  159. /*
  160. conn.sftp(function(err, sftp) {
  161. if (err) throw err;
  162. sftp.readdir('/www/htdocs/v034011/_temp', function(err, list) {
  163. if (err) throw err;
  164. console.dir(list);
  165. conn.end();
  166. });
  167. });
  168. */
  169. }).connect(
  170. {
  171. host: 'v034011.kasserver.com',
  172. port: 22,
  173. username: 'ssh-v034011',
  174. password: 'XXXXXXXXXXXX'
  175. });
  176. }
  177. });
  178. }
  179. deploy();