Siamo un negozio Scala/Java e usiamo Gradle per la nostra build e Hudson per CI. Di recente abbiamo scritto alcuni codici node.js con test in mocha. Esiste comunque la possibilità di includerlo nel nostro flusso di lavoro graduale e impostazione in Hudson? Ho guardato il numero gradle-javascript-plugin ma non sono riuscito a capire come eseguire il test npm o l'installazione di npm attraverso di esso e non sono sicuro di come farlo funzionare attraverso i comandi gradle-build o gradle-test e lasciare che sia Hudson a prenderlo.Come includere i test NodeJS in Gradle e Hudson?
risposta
Posso farvi parte del modo in cui ci sono, sono a metà strada anche su questo compito. Assicurati di avere almeno Gradle 1.2.
import org.gradle.plugins.javascript.coffeescript.CoffeeScriptCompile
apply plugin: 'coffeescript-base'
repositories {
mavenCentral()
maven {
url 'http://repo.gradle.org/gradle/javascript-public'
}
}
task compileCoffee(type: CoffeeScriptCompile){
source fileTree('src')
destinationDir file('lib')
}
Riferimento: http://gradle.1045684.n5.nabble.com/State-of-javascript-stuff-in-master-td5709818.html
Fornito con un modo per compilare il mio CoffeeScript ora posso aggiungere il NPM installazione cmd in una richiesta exec groove e barf seconda delle cmd exec di risultati che fornisce output/error
npm install
echo $?
0
npm install
npm ERR! install Couldn't read dependencies
npm ERR! Failed to parse json
npm ERR! Unexpected token }
npm ERR! File: /<>/package.json
npm ERR! Failed to parse package.json data.
npm ERR! package.json must be actual JSON, not just JavaScript.
npm ERR!
npm ERR! This is not a bug in npm.
npm ERR! Tell the package author to fix their package.json file. JSON.parse
npm ERR! System Darwin 11.4.2
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! cwd /<>/
npm ERR! node -v v0.8.14
npm ERR! npm -v 1.1.65
npm ERR! file /<>/package.json
npm ERR! code EJSONPARSE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /<>/npm-debug.log
npm ERR! not ok code 0
echo $?
1
Risultati in:
task npmDependencies {
def proc = 'npm install'.execute()
proc.in.eachLine { line -> println line}
proc.err.eachLine { line -> println 'ERROR: '+line }
proc.waitFor()
if (proc.exitValue()!=0){
throw new RuntimeException('NPM dependency installation failed!')
}
}
Come Per quanto riguarda i test della moka, non ne ho una conoscenza di prima mano, tuttavia sospetto che tu possa gestire allo stesso modo.
Se vi piace Docker ti avrebbe fatto piacere questo plugin Gradle: https://github.com/dimafeng/containerized-tasks
L'idea principale è quella di eseguire le attività NPM all'interno di un contenitore di finestra mobile che verrà gettato via subito dopo la costruzione (ma node_modules verranno memorizzate nella cache in la tua directory di costruzione). Quindi non è necessario installare npm sul tuo hudson/jenkins/whatever-ci e gestirne le versioni.
Ecco un semplice esempio di come può sembrare:
plugins {
id "com.dimafeng.containerizedTask" version "0.4.0"
}
npmContainerizedTask {
sourcesDir = 'test-env/gulp'
outputLevel = 'INFO' // ALL, DEBUG
scriptBody = 'npm install\ngulp'
}
Dove, sourcesDir
è una directory con i tuoi package.json
, scriptBody
i comandi che devono essere eseguiti all'interno del contenitore.
Quindi eseguire solo ./gradlew npmContainerizedTask