iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 19
0
DevOps

遠離 DevOops系列 第 19

[Day 19] Oops!gRPC - Protoc 容器化實作

Oops 安裝 gRPC Protoc好麻煩!

相信每個人在裝gRPC Protoc,可能都要花一些時間,還可能要處理一些環境問題,那就讓我們就把他封裝成容易讓大家用docker run起來build就好了!

目的

Builder: 做一個image可以直接透過docker啟動container去幫你build proto檔案,使用者就不用再安裝proto+gprc了,只需要有裝docker就可以build proto檔案。

Dockerfile

先查看gRPC官網安裝說明
https://grpc.io/docs/protoc-installation/

建立 proto-builder.dockerfile
gRPC Builder Dockerfile

FROM golang:1.14

RUN apt-get update && apt-get install unzip -y
RUN wget -q -O protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v3.12.0/protoc-3.12.0-linux-x86_64.zip && unzip protoc.zip
RUN mv /go/bin/protoc /usr/local/bin/protoc && rm protoc.zip

ENV GO111MODULE=on
RUN go get github.com/golang/protobuf/protoc-gen-go
ENV PATH="$PATH:$(go env GOPATH)/bin"

WORKDIR /go/src/app

docker build

docker build --no-cache --pull --force-rm -t rain/proto-builder:g1.14-p3.12.0 -f proto-builder.dockerfile .

之後看讀者們決定要把該image是要推到你們的私倉還是公倉?

建立一個.proto檔案

gRPC proto file
example: ithome.proto

syntax = "proto3";

package ithome;
option go_package = "./;ithome";

service HelloService {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string greeting = 1;
  double mail_count_default = 2;
}

message HelloResponse {
  string reply = 1;
}

在proto檔案目錄下執行builder

docker run -v $(pwd):/go/src/app -w /go/src/app rain123473/proto-builder:g1.14-p3.12.0 sh -c 'protoc *.proto --go_out=plugins=grpc:.;'

https://ithelp.ithome.com.tw/upload/images/20200927/20115289EvzvG38ahL.png

就可以看到.pb.go檔案被build出來囉!

這樣可以讓大家的builder版本一致以及不用再花費時間在安裝protoc的流程上 /images/emoticon/emoticon07.gif

明天會教大家利用該方式將builder導入自動化流程內。敬請期待唷!


上一篇
[Day 18] Oops!gRPC - 問題整理分享
下一篇
[Day 20] Oops!gRPC - Auto Protoc Builder with Git Hooks
系列文
遠離 DevOops30

尚未有邦友留言

立即登入留言