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

Undefined method uploading apk with Fastlane

我在 gitlab ci 服务器 deploying/uploading 上收到一个错误,一个 apk 到 Fabric with Fastlane。奇怪的是,如果我 运行 来自本地的任务,它就会工作。 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] 但我不知道问题出在哪里...知道吗?

我认为错误消息告诉您 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。

错误是 last_git_commit 得到一个空结果(正如@janpio 所说 ),因为由于某种原因 git 在 Docker 图像中丢失.