Github Haak na ontvangst in Nodejs

Ik probeer een haak na ontvangst in Nodejs te maken om mijn server bij te werken wanneer mijn Github-repo is bijgewerkt.

Ik heb dit eerder gedaan in php. Ik gebruik nu Nodejs en ben niet zeker hoe het moet worden verkregen.

Ik heb gekeken naar dit blog bericht over het instellen van nodejs op een ec2-exemplaar. Het zegt:

Create a post-recieve hook that will copy over new code after it’s been pushed to the repository

$ cat > hooks/post-receive

#!/bin/sh
GIT_WORK_TREE=/home/ubuntu/www
export GIT_WORK_TREE
git checkout -f

$ chmod +x hooks/post-receive

Ik ben niet zeker wat precies de bovenstaande code doet en hoe het moet worden geïmplementeerd.

Heb je ideeën voor de beste manier om dit te doen?

Ik run een standaard 32-bit Amazon Linux EC2-instance.

1

2 antwoord

Een git bare repository bevat niet de werkboom. Dus om de bestanden te gebruiken moet je ze controleren.

zet het bovenstaande script in (pseudo-pad) ec2: mybaregitrepo/hooks/post-recieve zorgt ervoor dat het elke keer dat je naar ec2 pusht, wordt uitgevoerd.

Wat betekent:

#!/bin/sh
//set git working tree (the files you can use) to the path /home/ubuntu/www
GIT_WORK_TREE=/home/ubuntu/www
export GIT_WORK_TREE
//force git checkout so that your files will be put into the working tree.
git checkout -f

dan:

//make the post-recieve hook executable so that it can run when you push commits to ec2
chmod +x hooks/post-receive

here is a decent runthrough of setting up a remote bare git repo http://toroid.org/ams/git-website-howto

2
toegevoegd

Mijn node ( Express ) app werkt onder forever , dus ik gebruik de volgende handler, die eigenlijk een git pull en doodt zichzelf (dus respawning).

function handleGitHub(req, res, next) {

  setTimeout(function() {
    var shouldRestart = !app.config.webhook || req.body.head_commit.message.indexOf(app.config.webhook) > -1;
    console.log('[GITHUB] WebHook Received for "%s" (WebHook: %s, Restart? %s)', req.body && req.body.head_commit.message, app.config.webhook && app.config.webhook, shouldRestart);
    if (!shouldRestart) {
      console.log('[GITHUB] Not restarting');
      return;
    }
    if (app.server_https && app.server_https.close) {
      console.log('[GITHUB] Closing HTTPS');
      app.server_https.close();
    }
    if (app.server && app.server.close) {
      console.log('[GITHUB] Closing HTTP');
      app.server.close();
    }
    setTimeout(function() {
      var spawn = require('child_process').spawn;

      var shell = process.env.SHELL;
      var args = ['-c', 'git pull'];

      var path = require('path');
      var projectPath = '/path/to/your/project/folder'; //or path.join(__dirname, '....

      var opts = { cwd: projectPath };

      console.log('[GITHUB] Spawning...', opts);

      var spawnProcess = spawn(shell, args, opts);

      spawnProcess.stdout.on('data', function(data) {
       //could log these
      });

      spawnProcess.stderr.on('data', function(data) {
       //could log these
      });

      spawnProcess.on('close', function(exitCode) {
        console.log('[GITHUB] Spawn finished', exitCode);
        console.log('[GITHUB] Exiting...');
        console.log('-------------------------------------------------------');
        process.exit(0);
      });

    }, 1000);

  }, 500);
  res.send(200, 'OK');
}

Gebruik nu gewoon een route die naar deze functie verwijst:

app.post('/some_path_you_setup_in_github_web_hooks', handleGitHub);

You can setup your push hook in https://github.com/your_username/your_project/settings/hooks

0
toegevoegd