我有一个要求,让我解释一下场景,
- 它们是COMPUTER-A(Jenkins Server(,我们通过它触发了管道构建
- 第一步,它将在vlab机器中创建VM(COMPUTER-B(并获取IP
-
第二步,它将通过ssh在COMPUTER-B中执行testsuites.sh,下面是伪代码
steps { script { sh """ ssh -i id_rsa -o StrictHostKeyChecking=no ${USER}@${env.IP} "nohup /home/testsuites.sh > foo.out 2> foo.err < /dev/null & " """ } }
该脚本在后台"mvn-clean-test"中运行,它将运行所有测试用例,并在构建结束时生成cucumber报告。
直到这一切顺利。
由于它在后台运行,詹金斯的工作将不会等待&将进入下一阶段
-
第三步詹金斯服务器计算机-A将发送成功邮件
现在的要求是,一旦构建成功,我需要通过另一封邮件发送黄瓜测试报告。如何通知COMPUTER-A中的jenkins作业(由于它已经完成(发送带有黄瓜报告文件的邮件,而黄瓜报告文件是他们在远程服务器COMPUTER-B中的。
我可以运行corn作业来检查构建是否成功,但如何通知jenkins发送带有黄瓜测试报告的电子邮件。
您需要的是静默期
node {
build job: 'FetchCucumberReport',
quietPeriod: 60,// in secs -->1min
wait: false
}
所以上面的代码会在1分钟后触发FetchCucumberReport
作业。如果您大致知道测试用例完成所有任务需要多长时间(比如说4小时(,那么设置quietPeriod:14400
(秒(,它将在4小时后触发构建。
更新
您必须查看API调用https://wiki.jenkins.io/display/JENKINS/Remote+访问+API
例如
curl -X POST -u user:password http://localhost:8080/job/FetchCucumberReport/build
希望有帮助:(
您可以在长期运行的作业完成后立即触发构建,它只会通过电子邮件发送结果:
curl -X POST http://user:password@<jenkins-url>:8080/job/test/build
如果作业可以在同一台机器上运行,那么收集结果应该很容易,如果不能,则可以通过scp复制工件。
但我认为另一种方法可能更适合你的问题。只要让工作持续多久,然后你就可以更容易地发送电子邮件。如果你想在之前触发另一个作业,你可以触发在同一台机器上运行的另一个工作。
也许创建一个临时的詹金斯奴隶可能是最好的主意。您也可以通过REST API来实现这一点:创建带有REST-API 的节点