我们是Scala / Java商店,我们使用Gradle进行构建,使用Hudson进行CI。我们最近在mocha中编写了一些带有测试的node.js代码。反正有没有把它包含在我们的哈德森的gradle工作流程和设置中?我查看了gradle-javascript-plugin,但我无法弄清楚如何通过它运行npm test或npm install,并且不确定如何让它通过gradle-build或gradle-test命令运行,并让Hudson选择它。
答案 0 :(得分:3)
我可以让你在那里的一部分,我也在这个任务的中途。确保你至少有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')
}
参考:http://gradle.1045684.n5.nabble.com/State-of-javascript-stuff-in-master-td5709818.html
提供了编译我的coffeescript的方法我现在可以将npm install cmd添加到groovy exec请求和barf中,具体取决于提供stdout / stderr的exec cmd结果
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
结果:
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!')
}
}
就摩卡测试而言,我没有这方面的第一手资料,但我怀疑你可以处理类似的事情。
答案 1 :(得分:0)
如果你喜欢docker,你可能会喜欢这个gradle插件: https://github.com/dimafeng/containerized-tasks
主要思想是在docker容器中运行你的npm任务,这个容器将在构建之后立即被丢弃(但node_modules将被缓存在你的构建目录中)。所以你不需要在你的hudson / jenkins / whatever-ci上安装npm并管理它的版本。
以下是一个简单的示例:
plugins {
id "com.dimafeng.containerizedTask" version "0.4.0"
}
npmContainerizedTask {
sourcesDir = 'test-env/gulp'
outputLevel = 'INFO' // ALL, DEBUG
scriptBody = 'npm install\ngulp'
}
其中,sourcesDir
是一个目录,其中包含package.json
,scriptBody
应在容器内执行的命令。
然后只需运行./gradlew npmContainerizedTask