与詹金斯一起使用gcloud

pre*_*ame 8 jenkins gcloud

我一直在尝试编写一个定期轮询Google云端存储的脚本.这在我正常运行时工作正常,但如果我将其作为Jenkins中的构建步骤包含在内,则会403 Forbidden出错.这是因为gcloud auth loginJenkins用户没有完成任何过程,这需要复制验证码.我是如何使用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)

Jef*_*han 8

您最好的选择可能是使用"服务帐户"来使用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)