- 投稿日:2019-10-24T12:24:30+09:00
CircleCIでGAE/Go 1.12 へデプロイする
やりたいこと
- GitHubにPushしたタイミングでGAEにデプロイする
- CircleCIを使って実現する
circleci/gcp-cli @1.8.2 を使ってGAEへデプロイする
- Orbクイックスタートガイドの通りやる
CircleCI側の設定
BUILD SETTINGS >> Environment Variables に環境変数を設定する必要がある
- GOOGLE_PROJECT_ID
- GOOGLE_COMPUTE_ZONE
- GCLOUD_SERVICE_KEY
ServiceKeyはJsonをそのままValueにコピーする
{ "type": "service_account", "project_id": "[PROJECT-ID]", "private_key_id": "[KEY-ID]", "private_key": "-----BEGIN PRIVATE KEY-----\n[PRIVATE-KEY]\n-----END PRIVATE KEY-----\n", "client_email": "[SERVICE-ACCOUNT-EMAIL]", "client_id": "[CLIENT-ID]", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/[SERVICE-ACCOUNT-EMAIL]" }config.yaml
config.yamlversion: 2.1 orbs: gcp-cli: circleci/gcp-cli@1.8.2 jobs: test: working_directory: ~/workspace docker: - image: circleci/golang:1.12 environment: GO111MODULE: "on" steps: - checkout - run: go test -v ./... - persist_to_workspace: root: . paths: - . build: working_directory: ~/workspace docker: - image: circleci/golang:1.12 steps: - attach_workspace: at: . - restore_cache: name: Restore go modules cache keys: - v1-dependencies-{{ checksum "go.mod" }} - run: go build ./api/main.go - save_cache: name: Save go modules cache key: v1-dependencies-{{ checksum "go.mod" }} paths: - /go/pkg/mod/cache - persist_to_workspace: root: . paths: - . deploy-develop: working_directory: ~/workspace docker: - image: google/cloud-sdk:latest steps: - attach_workspace: at: . - gcp-cli/initialize - run: name: Deploy to Google App Engine command: | gcloud --quiet app deploy ./api/app-develop.yaml --project=$GOOGLE_PROJECT_ID --version=$CIRCLE_BRANCH workflows: version: 2 build: jobs: - test - build: requires: - test - deploy-develop: requires: - buildGitHub
- 投稿日:2019-10-24T07:17:55+09:00
GoでMap(map[string]interface{})を結合する
Goで
map[string]interface{}
を結合したいとき、mergo
ライブラリを使うとシンプルに結合できる。https://github.com/imdario/mergo
map[string]interface{} を使う場合
m1 := map[string]interface{}{ "a": 0, "b": 1, } m2 := map[string]interface{}{ "a": 2, "c": 3, } mergo.Merge(&m1, m2)// Will print //map[string]interface {}{"a": 0, "b": 1, "c": 3}
mergo.Merge
の他に、mergo.MergeWithOverwrite
などもあるが略。struct を使う場合
デフォルトの方法
type Foo struct { A string B int64 } func main() { src := Foo{ A: "one", B: 2, } dest := Foo{ A: "two", } mergo.Merge(&dest, src)// Will print Foo{ A: "two", B: 2, }