How to authenticate a private Go Module using go 1.11 and Google App Engine Standard

后端 未结 3 637
轻奢々
轻奢々 2021-01-03 03:17

I\'ve been updating my entire go gae standard project to use go 1.11\'s modules.

Main directory structure

app.yaml
app.go
go.mod
go         


        
相关标签:
3条回答
  • 2021-01-03 03:40

    UPDATE: Google has some better documentation now that go 1.14 is out: https://cloud.google.com/appengine/docs/standard/go/specifying-dependencies

    My solution:

    Instead of dealing with credentials, I'm using go's module replace functionality to point GAE to use my local code. This is working well.

    Directory structure:

    myService/
        src/
            service.go  // has a run() function to set up routers etc.
            go.mod      // depends on my private module in bitbucket and other things
            …           // other source files
        build/
            gae/
                src/        // simlink to ../../src
                modules/    // git ignored, I clone or copy my modules in build scripts.
                app.go  // see below…
                go.mod  // has main() which calls service.run() and appEngine.Main()
                app.yaml
    

    Method

    I use git module replace so that GAE uses my local code. Before building I parse myService/src/go.mod to find the correct version of my private module, then I clone it into the modules folder. I also made an option to copy wip module source code for debugging locally without committing to my module repositories.

    go.mod from gae directory:

    module myServiceGAE
    
    require (
        bitbucket.org/me/myService v0.0.0
        google.golang.org/appengine v1.4.0
    )
    
    replace bitbucket.org/me/myService => ./src
    
    replace bitbucket.org/me/myModule => ./modules/utils
    

    Pros

    The package under myService has no references or knowledge of GAE, so I can easily build it into a docker etc. I think parsing the service go.mod files would be like creating my own dependency manager, defeating the benefits of go modules.

    Cons

    If I had a private module which depended on another private module, I think things would get too complicated.

    0 讨论(0)
  • 2021-01-03 03:45

    Another alternative is to also use Google Cloud Secret Manager

    https://cloud.google.com/cloud-build/docs/access-private-github-repos

    Google Cloud will have an SSH key to access and pull your private repository.

    0 讨论(0)
  • 2021-01-03 03:51

    Set git credentials before deploying:

    git config credential.helper '!f() { sleep 1; echo "username=${GIT_USER}\npassword=${GIT_PASSWORD}"; }; f'
    
    export GIT_USER=put_git_user_here
    export GIT_PASSWORD=put_git_password_here
    
    gcloud app deploy
    
    0 讨论(0)
提交回复
热议问题