为什么fastlane扫描测试会在Jenkins管道中继续重建和运行?

问题描述:

我有一个运行在运行iOS单元测试的Jenkins上的管道作业。为什么fastlane扫描测试会在Jenkins管道中继续重建和运行?

当我们的测试失败时,我看到了一些非常奇怪的行为,fastlane在它的摘要中显示失败,但随后开始重建代码并重新测试。

这种情况持续发生,我无法弄清楚它是否是我缺少的fastlane/scan设置,或者是在Jenkins管道中运行它。

bundle exec fastlane test本地运行就好了,只对我的扫描文件中定义的每个设备执行一次。

我的控制台输出看起来像这样:

[11:26:36]: fastlane finished with errors 
[!] Test execution failed. Exit status: 65 
####################################################################### 
# fastlane 2.19.3 is available. You are on 2.17.0. 
# It is recommended to use the latest version. 
# Please update using `bundle update fastlane`. 
####################################################################### 
2.19.3 sigh Hotfix 
* fix sigh undefined variable regression (#8457) 
2.19.2 Snapshot improvements and more 
* Add tests for ReportsGenerator available_devices 
* Fix HTML report generation for snapshot 
* Prioritize options passed to supply 
* Collect logs for iOS 10+ devices 
* Add row for Fabric.app-installed fastlane to env command 
* Sigh reports better errors for team members 
* Expand the notes_path parameter 
* Update xcov intialization 
2.19.1 Hot fix for provisioning profile creation/deletion 
- Re-implement csrf token retreval for provisioning profiles (#8410) 
- dont attempt to create apps on the dev center and itc if mac app (#8404) 
To see all new releases, open https://github.com/fastlane/fastlane/releases 
Please update using `bundle update fastlane` 
/Users/hudson/build/workspace/[email protected]/durable-ba2bbebe/script.sh: line 2: shell_session_update: command not found 
Sending interrupt signal to process 
▸ Cleaning Pods/CocoaLumberjack-iOS [Debug] 
▸ Check Dependencies 
▸ Cleaning Pods/Bento-iOS-Lib-iOS-BentoResources [Debug] 
▸ Check Dependencies 
▸ Cleaning Pods/AFNetworking-iOS [Debug] 
▸ Check Dependencies 
▸ Cleaning Pods/JSONModel-iOS [Debug] 

你可以看到FASTLANE完成后,它只是在它的快乐的方式,并开始重建,并重新测试,而不是退出工作。

基于这个输出,我想认为这是Fastlane中的某些事情导致它重新执行的原因,因为Jenkins没有输出表明舞台正在被再次调用。 这么说,我什么也看不到在FASTLANE问题在Github上关于这一点,除了有重试选项(这我不使用快照)

的完整性快照,这是我ScanfileJenkinsfile,并Fastfile

和从相关jenkins配置屏幕配置:Jenkins Screenshot

有人可以帮忙吗?我已经尝试了最新的fastlane,老式的fastlanes,并且仍然看到了行为。

我的DevOps和SA越来越有我们,因为我们的工作永远不会结束我感到非常沮丧,并挂我们的詹金斯节点:)(中止/终止他们的确是有问题)

+0

我的直觉说詹金斯的东西被配置为重新运行这个。对于我们的设置,我们有一个'Execute Shell'构建步骤,它简单地调用'bundle exec fastlane test'并且它工作正常。您的Scanfile和Fastfile看起来很好。你可以分享Jenkins作业的配置屏幕吗? –

+0

@LyndseyFerguson除了参数定义和告诉管道从SCM拉取Jenkinsfile外,没有什么真正的内容,但是这里有相关设置(添加到原始文章) – KaosDG

+0

您是否在shell脚本中调用bundle exec fastlane测试?它不在循环中?或者在一个循环中,如果扫描中出现“错误”则重新运行?如果有任何失败的测试,扫描将返回一个非零的错误代码,Jenkins可能会认为失败 –

所以,最后我想我已经得到了这里的问题的底部。

如果我将我的Test阶段封装在try/catch块中,那么我会从作业中获得适当的行为。

stage 'Tests' 
      try { 
        env.FASTLANE_EXPLICIT_OPEN_SIMULATOR = 1 
        bash 'bundle exec fastlane test' 
       } catch (e) { 
        currentBuild.result = 'FAILURE' 
        throw e 
       } 

这并没有真正意义,因为我的整个部分被包裹在一个try/catch - 所以,如果有人有洞察力至于为什么这个作品,我洗耳恭听。 但至少我现在能够解决这个问题。

+0

我知道当我在Fastfile中运行'scan'时,它会抛出一个Ruby异常。在我的插件中,通过了另一次失败测试扫描的测试,如果失败次数少于3次,我会捕获并重试。请参阅https://github.com/lyndsey-ferguson/fastlane_plugins/blob/master/fastlane-plugin-setup_fragile_tests_for_rescan/fastlane/Fastfile#L14 –