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.
 
 
 
 
 

214 lignes
7.9 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-landing.zip';
  43. const localTmpDir = 'C:/Users/Benny/Desktop/_SYSTEM/temp';
  44. const localPrjDir = 'C:/Users/Benny/PhpstormProjects/probuddy/src/client/www';
  45. const serverDestDir = '/www/htdocs/v034011/projects/probuddy/client/www';
  46. const serverTmpDir = '/www/htdocs/v034011/_temp';
  47. function deploy()
  48. {
  49. var localCommands = [
  50. 'rd /S /Q ' + localTmpDir + '/probuddy-client-www',
  51. 'mkdir ' + localTmpDir + '/probuddy-client-www',
  52. 'xcopy /e ' + localPrjDir + ' ' + localTmpDir + '/probuddy-client-www'
  53. ];
  54. fsExtra.removeSync( localTmpDir + '/probuddy-client-www' );
  55. fsExtra.mkdirpSync( localTmpDir + '/probuddy-client-www' );
  56. fsExtra.copySync( localPrjDir, localTmpDir + '/probuddy-client-www' );
  57. zipFolder(
  58. localTmpDir + '/probuddy-client-www',
  59. localTmpDir + '/probuddy-client-www.zip',
  60. function(err)
  61. {
  62. if( err )
  63. {
  64. console.log('zipFolder failed with: ', err);
  65. }
  66. else
  67. {
  68. // Upload and decompress and remove zip
  69. var conn = new Client();
  70. conn.on('ready', function()
  71. {
  72. conn.sftp ( function( err, sftp )
  73. {
  74. if ( err ) throw err;
  75. // UPLOAD ZIP FILE
  76. var readStream = fs.createReadStream( localTmpDir + '/probuddy-client-www.zip' );
  77. var writeStream = sftp.createWriteStream( serverTmpDir + '/probuddy-client-www.zip', { mode: 0o755 } );
  78. writeStream.on('close',function ()
  79. {
  80. console.log( "- file transferred succesfully" );
  81. // DELETE OLD DIRECTORY
  82. conn.exec( 'rm -rf ' + serverDestDir + '/;md ' + serverDestDir, function( err, stream )
  83. //conn.exec( 'cd ' + serverDestDir + '/;ls -la', function( err, stream )
  84. {
  85. if ( err ) throw err;
  86. stream.on('data', function(data)
  87. {
  88. console.log('STDOUT: ' + data);
  89. });
  90. stream.stderr.on('data', function(data)
  91. {
  92. console.log('STDERR: ' + data);
  93. });
  94. stream.on('close', function(code, signal)
  95. {
  96. console.log('Process closed with code ' + code);
  97. // UNZIP NEW VERSION TO DESTINATION DIRECTORY
  98. conn.exec( 'cd ' + serverTmpDir + '/;unzip -o probuddy-client-www.zip -d ' + serverDestDir + '/;chmod -R 755 ' + serverDestDir + '/', function( err, stream )
  99. {
  100. if ( err ) throw err;
  101. stream.on('data', function(data)
  102. {
  103. console.log('STDOUT: ' + data);
  104. });
  105. stream.stderr.on('data', function(data)
  106. {
  107. console.log('STDERR: ' + data);
  108. });
  109. stream.on('close', function(code, signal)
  110. {
  111. console.log('Process closed with code ' + code);
  112. conn.sftp(function(err, sftp)
  113. {
  114. if (err) throw err;
  115. // REMOVE ZIP FILE
  116. sftp.unlink( serverTmpDir + '/probuddy-client-www.zip', function(err)
  117. {
  118. if ( err )
  119. {
  120. console.log( "Error, problem starting SFTP: %s", err );
  121. }
  122. else
  123. {
  124. console.log( "file unlinked" );
  125. process.exit( -1 );
  126. }
  127. //conn.close();
  128. });
  129. });
  130. });
  131. });
  132. });
  133. });
  134. });
  135. writeStream.on('end', function ()
  136. {
  137. console.log( "sftp connection closed" );
  138. conn.close();
  139. });
  140. // initiate transfer of file
  141. readStream.pipe( writeStream );
  142. });
  143. /*
  144. conn.exec( 'ls -lah', function( err, stream )
  145. {
  146. if ( err ) throw err;
  147. stream.on('data', function(data) {
  148. console.log('STDOUT: ' + data);
  149. });
  150. stream.stderr.on('data', function(data) {
  151. console.log('STDERR: ' + data);
  152. });
  153. stream.on('close', function(code, signal) {
  154. console.log('Process closed with code ' + code);
  155. });
  156. });
  157. */
  158. /*
  159. conn.sftp(function(err, sftp) {
  160. if (err) throw err;
  161. sftp.readdir('/www/htdocs/v034011/_temp', function(err, list) {
  162. if (err) throw err;
  163. console.dir(list);
  164. conn.end();
  165. });
  166. });
  167. */
  168. }).connect(
  169. {
  170. host: 'v034011.kasserver.com',
  171. port: 22,
  172. username: 'ssh-v034011',
  173. password: 'XXXXXXXXXXXX'
  174. });
  175. }
  176. });
  177. }
  178. //deploy();