# 20230119: Smee Client
# Smee
smee.io (opens new window) es un proyecto que permite comunicar github con jenkis cruzando el firewall
- En smee, se crea un canal
- En la configuración webhooks de github, se indica el canal smee
- En la máquina donde corre jenkins, se instala un cliente
- El cliente nota cuando el canal smee ha sido invocado
- El cliente toma los datos que recibió el canal y se los pasa a jenkins
my-smee-client
- package.json
{ "name": "my-smee-client", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "start": "node index.js", "smee": "smee --url <https://smee.io/my_chanel_id> --target <http://127.0.0.1:9090/jenkins/github-webhook/>" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "smee-client": "^1.2.3" } }
- index.js
const SmeeClient = require('smee-client'); const smee = new SmeeClient({ source: 'https://smee.io/my_chanel_id', target: 'http://127.0.0.1:9090/jenkins/github-webhook/', logger: console }); const events = smee.start(); // Stop forwarding events //events.close()
# Smee Client: ECONNREFUSED
- Usando smee-client, obtengo ECONNREFUSED
- Sin embargo, el servicio está corriendo y puedo probarlo, con curl, por ejemplo.
- Lo soluciono reemplazando localhost por 127.0.0.1
- Al parecer, node no siempre resuelve bien localhost
# Referencia
# Windows: Smee client como service
node-windows (opens new window) facilita correr una app como servicio en windows.
service-install.js
var Service = require('node-windows').Service;
// Create a new service object
var svc = new Service({
name:'My Smee Client',
description: 'Smee client para Jenkins',
script: 'C:\\tools\\my-smee-client\\index.js',
nodeOptions: [
'--harmony',
'--max_old_space_size=4096'
]
//, workingDirectory: '...'
//, allowServiceLogon: true
});
// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
svc.start();
});
svc.install();
- service-uninstall.js
var Service = require('node-windows').Service;
// Create a new service object
var svc = new Service({
name:'My Smee Client',
script: 'C:\\tools\\ca-smee-client\\index.js',
});
// Listen for the "uninstall" event
svc.on('uninstall',function(){
console.log('Uninstall complete.');
console.log('The service exists: ', svc.exists);
});
svc.uninstall();
# npm ci
npm ci
es como unnpm i
pero especializado para deploy- no modifica package*.json
- es más rápido
- Difference between npm i and npm ci in Node.js (opens new window)