为什么gcloud auth激活服务帐户在Windows上不起作用?

时间:2019-05-15 01:34:09

标签: windows gcloud

我有一个新下载的Google Cloud服务帐户令牌。我想在Windows,Mac和Linux上将其激活为CI管道的一部分。为此,我这样做:

gcloud auth activate-service-account --key-file=./token.json

这在Linux和Mac上效果很好。在Winddows上,出现以下错误:

ERROR: (gcloud.auth.activate-service-account) Could not read json file C:\Users\appveyor\token.json: No JSON object could be decoded

无论我从PowerShell调用gcloud还是从cmd.exe调用gcloud.cmd,都会发生错误。发生了什么事?

1 个答案:

答案 0 :(得分:0)

发现这是一个字符编码问题。我以前是使用

将字符串输入到AppVeyor中的
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($env:GCLOUD_TOKEN)) | Out-File .\token.json

正在将文件写入为UTF-16LE。 gcloud捆绑的Python并不在乎。我的下一个尝试使用了Set-Content -Encoding utf8 .\token.json,但是它写了带有BOM的UTF-8,而gcloud仍然无法处理。终于在以下条件下工作了:

$content = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($env:GCLOUD_TOKEN)) ; $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False ; [System.IO.File]::WriteAllLines('token.json', $content, $Utf8NoBomEncoding)