使用Fastlane的未定义方法上传APK

时间:2019-05-29 16:22:17

标签: android gitlab-ci google-fabric fastlane

我在gitlab ci服务器上使用avlanlan将apk部署/上载到Fabric时出错。奇怪的是,如果我从本地运行任务,它会起作用。在两种情况下,Fastlane的版本均为2.123.0。

失败的任务的方法是:

31 desc "Generate QA release notes"
32 private_lane :qa_release_notes do 
33 commit = last_git_commit 
34 short_hash = commit[:abbreviated_commit_hash] 
35 author = commit[:author] 
36 message = commit[:message] 
37 "Release notes of commit " + short_hash + " by " + author +":\n " + message 
38 end

ci日志中显示的错误是:

[15:43:34]: Error in your Fastfile at line 34
[15:43:34]: 32:  private_lane :qa_release_notes do
[15:43:34]: 33:  commit = last_git_commit
[15:43:34]: => 34:   short_hash = commit[:abbreviated_commit_hash]
[15:43:34]: 35:  author = commit[:author]
[15:43:34]: 36:  message = commit[:message]

(...)

Fastfile:34:in block (2 levels) in parsing_binding': [!] undefined method []' for nil:NilClass (NoMethodError)
    from /var/lib/gems/2.3.0/gems/fastlane-2.123.0/fastlane/lib/fastlane/lane.rb:33:in `call'

似乎问题出在方法commit[:abbreviated_commit_hash]上 但是我不知道问题出在哪里...知道吗?

2 个答案:

答案 0 :(得分:1)

我认为错误消息告诉您commit = last_git_commit实际上没有将commit设置为任何值,因此在其上使用[...]会引发[!] undefined method []' for nil:NilClass (NoMethodError)

您可以尝试通过在第33行和第34行:commit之间输出puts(commit)来进行调试。使用--verbose来运行车道可能还会提供一些希望对您有帮助的输出,以了解发生了什么情况。

在后台执行的代码实际上是https://github.com/fastlane/fastlane/blob/4c468b9873f9a2bd68e8ef21b2502d32f2024d32/fastlane/lib/fastlane/helper/git_helper.rb#L53-L74,但是我看不出为什么在gitlab CI上失败的明显方法。

答案 1 :(得分:0)

错误是last_git_commit得到空结果(如@janpio所说的here),原因是由于某种原因,Docker映像中缺少git