GO GCP SDK 授权码连接gcp项目
GO GCP SDK auth code to connect gcp project
我使用以下代码,它按预期工作,我从 cli gcloud auth application-default login
使用并输入我的凭据,我能够从我的 macbook 运行 成功地使用代码。
现在我需要 运行 我的 CI 中的这段代码,我们需要使用不同的方法,获取 client_secret 的方法应该是什么
和 client_id 或服务帐户/一些 ENV 变量,通过 GO 代码执行此操作的方法是什么?
import "google.golang.org/api/compute/v1"
project := "my-project"
region := "my-region"
ctx := context.Background()
c, err := google.DefaultClient(ctx, compute.CloudPlatformScope)
if err != nil {
log.Fatal(err)
}
computeService, err := compute.New(c)
if err != nil {
log.Fatal(err)
}
req := computeService.Routers.List(project, region)
if err := req.Pages(ctx, func(page *compute.RouterList) error {
for _, router := range page.Items {
// process each `router` resource:
fmt.Printf("%#v\n", router)
// NAT Gateways are found in router.nats
}
return nil
}); err != nil {
log.Fatal(err)
}
许多 CI 支持特定环境变量的导出。或者你的脚本/conf 也可以做到。
但是如果你想运行在一个CI为什么你需要这样的配置?集成测试?
某些服务可以在本地用于 unit/smoke 测试。与 pubsub 一样,有一种方法可以 运行 一个 fake/local pubsub 来执行一些测试。
或者我没看懂你的问题,这种情况可以举个例子吗?
由于您使用的是 Jenkins,因此您可能希望从 how to create a service account 开始。它会指导您创建服务帐户并导出要在另一个 CI/CD 系统中设置为 var 的密钥。
然后参考docs from the client library如何使用源凭证创建新客户端。
例如
client, err := storage.NewClient(ctx, option.WithCredentialsFile("path/to/keyfile.json"))
如果您未提供任何来源,它将尝试在本地读取凭据并充当服务帐户 运行 操作(不适用于您的用例)。
我使用以下代码,它按预期工作,我从 cli gcloud auth application-default login
使用并输入我的凭据,我能够从我的 macbook 运行 成功地使用代码。
现在我需要 运行 我的 CI 中的这段代码,我们需要使用不同的方法,获取 client_secret 的方法应该是什么 和 client_id 或服务帐户/一些 ENV 变量,通过 GO 代码执行此操作的方法是什么?
import "google.golang.org/api/compute/v1"
project := "my-project"
region := "my-region"
ctx := context.Background()
c, err := google.DefaultClient(ctx, compute.CloudPlatformScope)
if err != nil {
log.Fatal(err)
}
computeService, err := compute.New(c)
if err != nil {
log.Fatal(err)
}
req := computeService.Routers.List(project, region)
if err := req.Pages(ctx, func(page *compute.RouterList) error {
for _, router := range page.Items {
// process each `router` resource:
fmt.Printf("%#v\n", router)
// NAT Gateways are found in router.nats
}
return nil
}); err != nil {
log.Fatal(err)
}
许多 CI 支持特定环境变量的导出。或者你的脚本/conf 也可以做到。
但是如果你想运行在一个CI为什么你需要这样的配置?集成测试?
某些服务可以在本地用于 unit/smoke 测试。与 pubsub 一样,有一种方法可以 运行 一个 fake/local pubsub 来执行一些测试。
或者我没看懂你的问题,这种情况可以举个例子吗?
由于您使用的是 Jenkins,因此您可能希望从 how to create a service account 开始。它会指导您创建服务帐户并导出要在另一个 CI/CD 系统中设置为 var 的密钥。
然后参考docs from the client library如何使用源凭证创建新客户端。
例如
client, err := storage.NewClient(ctx, option.WithCredentialsFile("path/to/keyfile.json"))
如果您未提供任何来源,它将尝试在本地读取凭据并充当服务帐户 运行 操作(不适用于您的用例)。