我正在使用Jenkins,Maven 3.1和Java 1.6.我在Jenkins设置了以下Maven工作,具有以下目标和选项......
clean install -U -P cloudbees -P qa
Run Code Online (Sandbox Code Playgroud)
下面是我的pom.xml surefire配置...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<reuseForks>true</reuseForks>
<argLine>-Xmx2048m -XX:MaxPermSize=512M </argLine>
<skipTests>false</skipTests>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但是,当我的单元测试失败时,Jenkins控制台输出仍然显示"BUILD SUCCESS"并且构建被标记为"不稳定"而不是完全失败.我如何配置Jenkins(或Maven,如果它是什么原样)的东西,以便我的构建失败(不会变得不稳定或通过),如果任何单元测试失败?
以下是控制台输出的内容
17:08:04 MyProjectOrganizationControllerTest.testRecoverFromError » IllegalState Failed to...
17:08:04 MyProjectOrganizationControllerTest.testVerifyDistrictListPopulated » IllegalState
17:08:04 MyProjectOrganizationControllerTest.testUpdateSchool » IllegalState Failed to loa...
17:08:04 MyProjectOrganizationControllerTest.testDeleteSchool » IllegalState Failed to loa...
17:08:04 MyProjectOrganizationControllerTest.testVerifyOrgListPopulatedPrivateSchoolOrgType » IllegalState
17:08:04 MyProjectOrganizationControllerTest.testSubmitMultipleParams » IllegalState Faile...
17:08:04
17:08:04 Tests run: 155, Failures: 0, Errors: 154, Skipped: 1
17:08:04
17:08:04 [ERROR] There are test failures.
17:08:04
17:08:04 …Run Code Online (Sandbox Code Playgroud) 当我在Jenkins工作流(Jenkins 1.609.1,工作流1.8)上运行以下代码时,我收到'NotSerializableException'错误(也在下面).但是,如果我将"构建作业"移到"for"范围之外,它可以正常工作(作业已激活).有什么想法为什么会这样?
node('master') {
ws('/opt/test) {
def file = "/ot.property"
def line = readFile (file)
def resultList = line.tokenize()
for(item in resultList )
{
build job: 'testjob_1'
}
}
}
Run Code Online (Sandbox Code Playgroud)
得到错误:
Running: End of Workflow
java.io.NotSerializableException: java.util.ArrayList$Itr
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:860)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:988)
at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:854)
at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1032)
.....
Run Code Online (Sandbox Code Playgroud) 我注意到Jenkins有(至少)两个编排选项
我首先找到了Build Flow并实现了一个编排工作,它似乎可以满足我们的需求.切换到Pipeline有什么好处吗?我对切换到Pipeline的想法是
我正在使用Jenkins Build Flow插件来实现并行化.Groovy DSL执行某些文件操作.即使该选项Restrict where this project can be run设置为在特定从站上运行作业,DSL也在主站上运行.这不是预期的.
有人能告诉我如何限制DSL在指定的奴隶上运行吗?即使有一种方法我们可以通过DSL访问从属文件系统,这应该工作.
一般来说,我们如何使用Groovy从Jenkins master访问节点slave上的文件?
def fp = new hudson.FilePath(build.workspace.channel, "/srv/jenkins/workspace/myworkspace_on_slave_node")
assert fp.exists() // returns true :)
def ant = new AntBuilder()
if (fp != null) {
def scanner = ant.fileScanner { // fails here :(, says /srv/jenkins/workspace/myworkspace_on_slave_node not found
// grab ALL files requested to be run
fileset(dir: "$fp", includes: "**/*.java")
}
// now lets iterate over - print - and count test files
int numFiles = 0
for …Run Code Online (Sandbox Code Playgroud) 我有一个构建流程,该流程按顺序构建4个作业
例如;
build(Job 1)
build(Job 2)
build(Job 3)
build(Job 4)
Run Code Online (Sandbox Code Playgroud)
我也想运行作业4,即使先前的任何作业也失败了。如何在构建流程中做到这一点?
我正在使用构建流程插件在Jenkins中并行运行任务.最初这是有效的:
parallel (
{ build("jobX", param: params["inputVal1"])
},
{build("jobX", param: params["inputVal2"])
}
)
Run Code Online (Sandbox Code Playgroud)
但是,我现在需要我在某种循环中写这个,因为作业的数量是动态的.我想做这样的事情(概念上):
parallel
(
for(int i=1; i<=numOfJobs; i++)
{
build("jobX", param: params["inputVal" + i])
}
)
Run Code Online (Sandbox Code Playgroud)
Jenkins Buildflow插件提供了一个答案:如何并行创建可变数量的作业?,但它并不完全符合我的需要.
我正在使用构建流程插件构建jenkins流程,该插件将获取所有作业,将名称与正则表达式进行比较,如果匹配则会触发作业的构建.
我有这个完美的工作:
import jenkins.model.Jenkins
import java.util.regex.*
Pattern myRegex = ~/release_status.*/
for (item in jenkins.model.Jenkins.instance.items)
{
if (item.name ==~ myRegex) {
build( "$item.name" )
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这需要很长时间来构建所有匹配的工作(现在有20个,但可能还有更多).
我试图让这个并行运行每个作业,但我无法弄清楚groovy语法.
我尝试了3种不同的方式:
import jenkins.model.Jenkins
import java.util.regex.*
Pattern myRegex = ~/release_status.*/
parallel (
{
for (item in jenkins.model.Jenkins.instance.items)
{
if (item.name ==~ myRegex) {
build( "$item.name" )
}
}
}
)
Run Code Online (Sandbox Code Playgroud)
^^这仍然有效,但它的工作方式与以前相同.它一次完成一项工作,并且在上一次完成之前不构建下一项工作.
import jenkins.model.Jenkins
import java.util.regex.*
Pattern myRegex = ~/release_status.*/
parallel (
{
for (item in jenkins.model.Jenkins.instance.items)
{
if (item.name ==~ myRegex) {
{ build( …Run Code Online (Sandbox Code Playgroud)