我一直在尝试编写一个定期轮询Google云端存储的脚本.这在我正常运行时工作正常,但如果我将其作为Jenkins中的构建步骤包含在内,则会403 Forbidden
出错.这是因为gcloud auth login
Jenkins用户没有完成任何过程,这需要复制验证码.我是如何使用Jenkins做的?
编辑:
我尝试了以下步骤:https: //cloud.google.com/storage/docs/authentication#service_accounts并下载了一个类似于以下内容的JSON密钥:
{"web":{"auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://accounts.google.com/o/oauth2/token","client_email":"....@project.googleusercontent.com","client_x509_cert_url":"https://www.googleapis.com/robot/v1/metadata/x509/....@project.googleusercontent.com","client_id":"....project.googleusercontent.com","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs"}}
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为所有的链接都指向像bad request, invalid request
......我一定做错了.我跑的命令是:
gcloud auth activate-service-account ...@project.googleusercontent.com --key-file /var/lib/jenkins/....project.googleusercontent.com.json
Run Code Online (Sandbox Code Playgroud)
您最好的选择可能是使用"服务帐户"来使用GCS服务对gcloud/gsutil进行身份验证.主要步骤是按照此处的说明使用生成JSON格式的私钥:
https://cloud.google.com/storage/docs/authentication#service_accounts
Run Code Online (Sandbox Code Playgroud)
将该密钥复制到Jenkins用户可以读取的位置,并运行Jenkins用户
gcloud auth activate-service-account ...
Run Code Online (Sandbox Code Playgroud)
(请参阅https://cloud.google.com/storage/docs/authentication#service_accounts).请注意,对JSON密钥文件的支持非常新,您需要一个最新的gcloud版本.
从那里你的Jenkins进程应该像往常一样访问GCS.
密钥文件应具有以下格式:
{
"private_key_id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
"private_key": "-----BEGIN PRIVATE KEY-----\n ... \n-----END PRIVATE KEY-----\n",
"client_email": "...@developer.gserviceaccount.com",
"client_id": "..."
"type": "service_account"
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6181 次 |
最近记录: |