Wir sind ein Scala/Java-Shop und wir verwenden Gradle für unser Build und Hudson für CI. Wir haben kürzlich einen node.js-Code mit Tests in Mocha geschrieben. Gibt es überhaupt etwas, das wir in unseren Horizon-Workflow integrieren? Ich schaute auf die gradle-javascript-plugin, aber ich konnte nicht herausfinden, wie man npm Test oder npm installieren durch sie und nicht sicher, wie es durch grdle-build oder grddle-Test-Befehle laufen lassen und lassen Sie es auch Hudson abholen.Wie können NodeJS-Tests in Gradle und Hudson integriert werden?
Antwort
Ich kann Ihnen einen Teil des Weges dorthin bringen, ich bin auch mitten in dieser Aufgabe. Stellen Sie sicher, dass Sie mindestens Gradle 1.2 haben.
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')
}
Referenz: http://gradle.1045684.n5.nabble.com/State-of-javascript-stuff-in-master-td5709818.html
mit einer Art und Weise bereitgestellt mein Coffee kompilieren kann ich jetzt fügen Sie die npm cmd installieren in eine groovige exec Anfrage und BARF in Abhängigkeit von den exec cmd Ergebnis liefert stdout/stderr
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
Ergebnisse 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!')
}
}
Wie Was die Mocha-Tests angeht, habe ich keine Ahnung davon, aber ich vermute, dass Sie ähnlich damit umgehen können.
Wenn Sie Andockfenster könnten Sie diese gradle Plugin mögen: https://github.com/dimafeng/containerized-tasks
Die Hauptidee ist Ihre npm Aufgaben in einem Docker Behälter laufen, die weggeworfen werden direkt nach dem Build (aber node_modules zwischengespeichert wird in Ihr Build-Verzeichnis). Sie müssen also npm nicht auf Ihrem hudson/jenkins/whatever-ci installieren und Versionen davon verwalten.
Hier ist ein einfaches Beispiel, wie es aussehen könnte:
plugins {
id "com.dimafeng.containerizedTask" version "0.4.0"
}
npmContainerizedTask {
sourcesDir = 'test-env/gulp'
outputLevel = 'INFO' // ALL, DEBUG
scriptBody = 'npm install\ngulp'
}
Wo, sourcesDir
ist ein Verzeichnis mit Ihren package.json
, scriptBody
den Befehlen, die im Innern des Behälters ausgeführt werden sollen.
Dann führen Sie einfach ./gradlew npmContainerizedTask