【Go】GAEにデプロイする時の依存エラーについて

概要

GithubActionsからGoのアプリケーションをGAEにデプロイしようとした時に、
依存関係でハマったことについて。

コードをそのままGAEにデプロイしただけでは依存エラーになる。

go get . ...を実行すると必要なライブラリを全部取ってきてくれることは知っていたので、GAEにデプロイしたら勝手に上のコマンドを実行するものだと思っていた。

でもそうではないようだ。。。

エラー内容

cannot find package普通に依存エラーですね

2020/03/29 12:38:43 Failed to build app: Your app is not on your GOPATH, please move it there and try again.
building app with command [go build -o /tmp/staging/usr/local/bin/start ./...], env [PATH=/go/bin:/usr/local/go/bin:/builder/google-cloud-sdk/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=581cc460cea4 HOME=/builder/home BUILDER_OUTPUT=/builder/outputs DEBIAN_FRONTEND=noninteractive GOROOT=/usr/local/go/ GOPATH=/go GOPATH=/tmp/staging/srv/gopath]: err=exit status 1, out=srv/command/SignUpRequestCommand.go:4:2: cannot find package "github.com/BambooTuna/quest-market/model/account" in any of:
    /usr/local/go/src/github.com/BambooTuna/quest-market/model/account (from $GOROOT)
    /tmp/staging/srv/gopath/src/github.com/BambooTuna/quest-market/model/account (from $GOPATH)
##[error]srv/model/account/AccountCredentials.go:4:2: cannot find package "github.com/BambooTuna/quest-market/settings" in any of:
    /usr/local/go/src/github.com/BambooTuna/quest-market/settings (from $GOROOT)
    /tmp/staging/srv/gopath/src/github.com/BambooTuna/quest-market/settings (from $GOPATH)
...

解決策

go.modapp.ymlと同じところに作って置けばいいようだ

  • ファイル構成

    GoApp /
        - main.go (アプリ本体のコード群)
        - app.yml (GAE用の設定ファイル)
        - go.mod <- これが必要
  • go.modの作成方法

    $ go mod init example.com/m/v2
    $ go get -v -t -d ./...

自分が使っているGithubActionsの設定

変更のたびにローカルでgo.modを作成・更新するのは面倒なので、デプロイ時に作ってしまおう。

以下コードに出てくる環境変数(GCLOUD_SERVICE_KEY)については
こちらを参考にしてください。

name: Go

on:
  push:
    branches: [ master ]

jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:

    - name: Set up Go 1.13
      uses: actions/setup-go@v1
      with:
        go-version: 1.13
      id: go

    - name: Check out code into the Go module directory
      uses: actions/checkout@v2
    - name: Get dependencies
      run: |
        go mod init example.com/m/v2
        go get -v -t -d ./...
        if [ -f Gopkg.toml ]; then
            curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
            dep ensure
        fi
    - name: GAE deploy
      run: |
        sudo apt-get install google-cloud-sdk-app-engine-go
        echo ${GCLOUD_SERVICE_KEY} | base64 -d > ./service_key.json
        echo 'github-actions@${PROJECT_NAME}.iam.gserviceaccount.com' | gcloud auth activate-service-account --key-file ./service_key.json
        gcloud app deploy app.yaml --project ${PROJECT_NAME}
      env:
        CI: true
        PROJECT_NAME: あなたのプロジェクト
        GCLOUD_SERVICE_KEY: ${{ secrets.GcloudServiceKey }}

おまけ(app.yaml)

runtime: go113
service: default

handlers:
- url: /.*
  script: auto

コメント

タイトルとURLをコピーしました