在Gitlab.com的共享运行程序上运行测试时,所有涉及ROTP的测试都会失败,并出现ArgumentError,该密钥必须为32个字节。还有其他一些测试也失败了,但它们与ROTP失败无关。我已经研究了ROTP的源代码并确定了我正在使用的ROTP版本(2.1.2),它应该使用32字节密钥,并且我尝试手动告诉devise-two-factor使用32字节密钥(而不是24)以防万一。
在本地运行rspec时,这些测试也会通过。
我已尽力调试Gitlab.com的跑步者。我还检查了ROTP的版本,它在gitlab-runner以及Gitlab.com的运行程序中为2.1.2,所以它不是版本不匹配。我正在本地运行gitlab-runner 11.9.2。
我注意到devise-two-factor指定了一个24字节的密钥(这只会在Gitlab.com的运行程序上引起问题-它仍然可以在生产,开发,本地rspec和本地gitlab-runner中工作,而不会覆盖它),所以我已经尝试指定32字节的设备二因素TOTP密钥长度,应该将其转发给ROTP,但似乎即使按预期方式传递,也无法在Gitlab.com的运行程序中正确处理。>
我在本地运行gitlab-runner的命令(因为我可能输入了错误的命令):
gitlab-runner exec docker rspec-integration
ROTP错误:
1) Totp2faAccounts User can enable TOTP
Failure/Error: user.otp_secret = User.generate_otp_secret(32)
ArgumentError:
key must be 32 bytes
# /usr/local/bundle/gems/encryptor-3.0.0/lib/encryptor.rb:72:in `key='
# /usr/local/bundle/gems/encryptor-3.0.0/lib/encryptor.rb:72:in `crypt'
# /usr/local/bundle/gems/encryptor-3.0.0/lib/encryptor.rb:36:in `encrypt'
预期的结果:1-2次失败取决于测试的时间,但与ROTP无关,无论何时进行都应该通过。
实际结果:在本地rspec,本地gitlab-runner上传递,在Gitlab.com的共享运行器上失败。