LoginSignup
1
2

More than 1 year has passed since last update.

複数環境に向けて、GCP Cloudbuildスクリプトの構成

Last updated at Posted at 2019-12-17

開発・ステージング・本番などの複数環境に向けてGCP Cloudbuildの構成を紹介したいと思います。
シンプルのウェブアプリケーションを使ってビルドを行います。

フォルダ構成

cloudbuild_multi_env
├── README.md
├── build
│   ├── cloudbuild
│   │   ├── _base
│   │   │   └── cloudbuild.simplewebapp.yaml
│   │   ├── dev
│   │   │   └── cloudbuild.simplewebapp.yaml
│   │   ├── prod
│   │   │   └── cloudbuild.simplewebapp.yaml
│   │   └── staging
│   │       └── cloudbuild.simplewebapp.yaml
│   └── dockerfile
│       └── simplewebapp.Dockerfile
└── webapp
    ├── handler
    │   └── simplewebapp_handler.go
    └── simplewebapp.go

1. サンプルウェブアプリケーション準備

過去の記事用のウェブアップリケーションを再利用します。
GKE上にwebアプリケーションを構築する方法

simplewebapp.go
package main

import (
    "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"

    "github.com/itdevsamurai/gke/simplewebapp/webapp/handler"
)

// Default Server Port
const DEFAULT_SERVER_PORT = ":80"

func main() {
    // Echo instance
    e := echo.New()

    // Middleware
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())
    e.Use(middleware.CORS())

    // Route => handler
    e.GET("/", handler.SimpleWebHandler{}.Index)

    e.GET("/ping", handler.SimpleWebHandler{}.Ping)

    // Start server
    e.Logger.Fatal(e.Start(DEFAULT_SERVER_PORT))
}
simplewebapp_handler.go
package handler

import (
    "net/http"

    "github.com/labstack/echo/v4"
)

type SimpleWebHandler struct {
}

func (sh SimpleWebHandler) Index(c echo.Context) error {
    return c.String(http.StatusOK, "Hello, World!\n")
}

func (sh SimpleWebHandler) Ping(c echo.Context) error {
    return c.String(http.StatusOK, "Pong!\n")
}

2. Dockerfileの準備

simplewebapp.Dockerfile
FROM alpine:latest
WORKDIR /app
COPY ./simplewebapp /app

EXPOSE 80
ENTRYPOINT ["./simplewebapp"]

3. Cloudbuildスクリプトの準備

各種環境の共有スクリプト

_base/cloudbuild.simplewebapp.yaml
options:
  env:
  - GO111MODULE=on
  volumes:
  - name: go-modules
    path: /go

steps:
# go test
- name: golang:1.12
  dir: .
  args: ['go', 'test', './...']

# go build
- name: golang:1.12
  dir: .
  args: ['go', 'build', '-o', 'simplewebapp', 'webapp/simplewebapp.go']
  env: ["CGO_ENABLED=0"]

# docker build
- name: 'gcr.io/cloud-builders/docker'
  dir: .
  args: [
         'build',
         '-t', '${_GCR_REGION}/${_GCR_PROJECT}/${_GCR_IMAGE_NAME}:${_GCR_TAG}',
         '-f', 'simplewebapp.Dockerfile',
         '--cache-from', '${_GCR_REGION}/${_GCR_PROJECT}/${_GCR_IMAGE_NAME}:${_GCR_TAG}',
         '.'
        ]

# push image to Container Registry
- name: 'gcr.io/cloud-builders/docker'
  args: ["push", '${_GCR_REGION}/${_GCR_PROJECT}/${_GCR_IMAGE_NAME}']

substitutions:
  # # GCR region name to push image
  _GCR_REGION: asia.gcr.io
  # # Image name
  _GCR_IMAGE_NAME: ds-cloudbuild-test
  # # Image tag
  _GCR_TAG: latest

各種環境別スクリプト

こつは「--substitutions」を使って環境別の設定を指定します。今回はプロジェクトIDだけとなりますが、他の設定があったらコンマで区切って追加ください。
例:

'--substitutions=_GCR_PROJECT=ds-abc123-dev,_ENV=dev'

開発環境

dev/cloudbuild.simplewebapp.yaml
steps:
- name: 'gcr.io/cloud-builders/gcloud'
  args: [
      'builds', 
      'submit',
      '--config=build/cloudbuild/_base/cloudbuild.simplewebapp.yaml',
      '--substitutions=_GCR_PROJECT=ds-abc123-dev',
      '.'
  ]

ステージング環境

staging/cloudbuild.simplewebapp.yaml
steps:
- name: 'gcr.io/cloud-builders/gcloud'
  args: [
      'builds', 
      'submit',
      '--config=build/cloudbuild/_base/cloudbuild.simplewebapp.yaml',
      '--substitutions=_GCR_PROJECT=ds-abc123-staging',
      '.'
  ]

本番環境

prod/cloudbuild.simplewebapp.yaml
steps:
- name: 'gcr.io/cloud-builders/gcloud'
  args: [
      'builds', 
      'submit',
      '--config=build/cloudbuild/_base/cloudbuild.simplewebapp.yaml',
      '--substitutions=_GCR_PROJECT=ds-abc123-prod',
      '.'
  ]

4. Cloudbuild実施

サンプルウェブアプリケーションのイメージビルドを行います。

開発環境
cd cloudbuild-multi-env-folder

# build image for dev env
gcloud builds submit --config build/cloudbuild/dev/cloudbuild.simplewebapp.yaml
ステージング環境
cd cloudbuild-multi-env-folder

# build image for staging env
gcloud builds submit --config build/cloudbuild/staging/cloudbuild.simplewebapp.yaml
本番環境
cd cloudbuild-multi-env-folder

# build image for prod env
gcloud builds submit --config build/cloudbuild/prod/cloudbuild.simplewebapp.yaml




本記事で利用したソースコードはこちら
https://github.com/dssolutioninc/dss_gke/tree/master/cloudbuild_multi_env



最後まで読んで頂き、どうも有難う御座います!
DSS 橋本

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2