Parece que é um caso surpreendentemente incomum, a julgar pela ausência de qualquer atividade. De qualquer forma, minha solução agora é incluir a instalação do node.js no pipeline no meu Jenkinsfile e executá-lo usando o comando sh
. O script de instalação é assim:
#!/usr/bin/env bash
command_exists () {
command -v $1 >/dev/null 2>&1
}
if command_exists 'node' && command_exists 'npm'; then
echo 'Node installed, exiting'
exit 0
else
if [ -d $HOME/n ]; then
echo 'n-install directory exists, path likely not configured, exiting'
exit 0
fi
echo 'Node not installed, installing'
curl -L https://git.io/n-install | bash -s -- -y
echo 'Reloading bashrc'
. $HOME/.bashrc
if command_exists 'node' && command_exists 'npm'; then
echo 'Node installed successfully. Updating npm'
npm i -g npm
echo 'Node version:'
node -v
echo 'NPM version:'
npm -v
echo 'NPM prefix:'
npm config get prefix
exit 0
else
echo 'Node installation failed!'
exit 1
fi
fi
Obviamente, isso não é o ideal, já que ele não instala o node.js e o torna disponível para todos os usuários, mas tem repositórios privados npm para cada, de forma que eles não precisam do sudo para instalá-los ou lê-los. Portanto, tenho que ter certeza de que o usuário que o serviço systemd usa para executar o aplicativo também tenha o node.js instalado e eu tenha que fazer isso manualmente.
Se alguém tiver uma solução melhor, diga-me. Vou marcar isso como a resposta se nada aparecer melhor.