我使用以下代码,它按预期工作,我从cligcloud 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("%#vn", router)
// NAT Gateways are found in router.nats
}
return nil
}); err != nil {
log.Fatal(err)
}
由于您使用的是Jenkins,您可能需要从如何创建服务帐户开始。它指导您创建服务帐户并导出要在另一个CI/CD系统中设置为var的密钥。
然后参考客户端库中的文档,了解如何使用源凭据创建新客户端。
例如
client, err := storage.NewClient(ctx, option.WithCredentialsFile("path/to/keyfile.json"))
如果您没有提供任何源,它将尝试在本地读取凭据,并充当运行该操作的服务帐户(在您的用例中不适用(。
许多CI支持导出特定的env-var。或者您的脚本/conf也可以这样做。
但是,如果您想在CI中运行,为什么需要这样的配置?集成测试?
一些服务可以在本地用于单元/烟雾测试。与pubsub一样,有一种方法可以运行一个假的/本地pubsub来执行一些测试。
或者我可能不理解你的问题,在这种情况下你能提供一个例子吗?