Я пытаюсь адаптировать пример Go из этого учебника к чему-то, что использует зависимости в частном репозитории. Вот пример кода облачной функции:
package helloworld
import (
"context"
"log"
"github.com/kurtpeek/my-private-repo/mypackage"
)
// PubSubMessage is the payload of a Pub/Sub event.
type PubSubMessage struct {
Data []byte `json:"data"`
}
// HelloPubSub2 consumes a Pub/Sub message.
func HelloPubSub2(ctx context.Context, m PubSubMessage) error {
name := string(m.Data)
if name == "" {
name = "World"
}
log.Printf("Hello, %s!", name)
log.Println(mypackage.SayHello())
return nil
}
, где SayHello()
определен в частном репо github.com/kurtpeek/my-private-repo
как
package mypackage
// SayHello says hello
func SayHello() string {
return "Hello, world!"
}
Без вызова mypackage.SayHello()
облако Функция развертывается и работает должным образом. Я также могу запустить HelloPubSub2
в main.go
после запуска
git config url."git@github.com".insteadOf "https://github.com"
и добавления моего ключа S SH в репо (см. Эту Средняя статья ) .
Однако, если я попробую его с mypackage.SayHello()
, я получаю следующую ошибку:
не удалось прочитать имя пользователя для 'https://github.com'
Вот полный вывод терминала:
>
gcloud functions deploy HelloPubSub2 --runtime go113 --trigger-topic mytopic
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
WARNING: Function created with limited-access IAM policy. To enable unauthorized access consider "gcloud alpha functions add-iam-policy-binding HelloPubSub2 --member=allUsers --role=roles/cloudfunctions.invoker"
Deploying function (may take a while - up to 2 minutes)...failed.
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: {"error":{"buildpackId":"google.go.functions-framework","buildpackVersion":"0.9.0","errorType":13,"canonicalCode":13,"errorId":"03a1e2f7","errorMessage":"go: github.com/kurtpeek/my-private-repo@v0.0.0-20200508055124-8eb94cb388b2: invalid version: git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /layers/google.go.functions-framework/functions-framework/pkg/mod/cache/vcs/93c0b37d34e5cf0f9b9778b99e5968bf272c89cabd21f8c0d683212c8dd2ef89: exit status 128:\n\tfatal: could not read Username for 'https://github.com': terminal prompts disabled"},"stats":null}
Как лучше всего развернуть эту облачную функцию? Следует ли мне запустить go mod vendor
, а затем изменить зависимости, чтобы они ссылались на каталог vendor/
? (Хотя каждый раз это кажется хлопотным).
Обновление
Эта документация, https://cloud.google.com/functions/docs/writing/specifying-dependencies-go#using_private_dependencies, касается именно этого варианта использования. Однако я еще не смог заставить его работать. Я добавил
go.mod
go.sum
в свой .gcloudignore
и запустил go mod vendor
, тем самым создав каталог vendor/
, но если я попытаюсь развернуть его снова, теперь я получаю
не может найти пакет \ "github.com/kurtpeek/my-private-repo/mypackage \" ни в одном из: \ n \ t / usr / local / go / src / github.com / kurtpeek / my-private- repo / mypackage (из $ GOROOT) \ n \ t / workspace / src / github.com / kurtpeek / my-private-repo / mypackage (из $ GOPATH) "
~/g/s/g/k/m/helloworld>
gcloud functions deploy HelloPubSub2 --runtime go113 --trigger-topic mytopic
Deploying function (may take a while - up to 2 minutes)...failed.
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: {"error":{"buildpackId":"google.go.build","buildpackVersion":"0.9.0","errorType":2,"canonicalCode":2,"errorId":"6191efcd","errorMessage":"src/helloworld/helloworld.go:7:2: cannot find package \"github.com/kurtpeek/my-private-repo/mypackage\" in any of:\n\t/usr/local/go/src/github.com/kurtpeek/my-private-repo/mypackage (from $GOROOT)\n\t/workspace/src/github.com/kurtpeek/my-private-repo/mypackage (from $GOPATH)"},"stats":null}
Я запускаю это внутри своего GOPATH
:
kurt@Kurts-MacBook-Pro-13 ~/g/s/g/k/my-cloud-function> go env GOPATH
/Users/kurt/go
kurt@Kurts-MacBook-Pro-13 ~/g/s/g/k/my-cloud-function> pwd
/Users/kurt/go/src/github.com/kurtpeek/my-cloud-function
Есть идеи, как это исправить?