在CircleCI上使用gRPC进行通信确认
我想要验证已构建的服务器是否通过了健康检查,可以利用grpc-health-probe轻松实现。
实施健康检查
为实现符合 gRPC Health Checking Protocol v1 的健康检查,建议使用 google.golang.org/grpc/health 等现有工具,更简便且方便。
package main
import (
"google.golang.org/grpc"
"google.golang.org/grpc/health"
"google.golang.org/grpc/health/grpc_health_v1"
"log"
"net"
)
func example() {
lis, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
grpcServer := grpc.NewServer()
grpc_health_v1.RegisterHealthServer(grpcServer, health.NewServer())
grpcServer.Serve(lis)
}
建立并检查健康检查是否通过。
FROM golang:1.13 as builder
ENV CGO_ENABLED=0
ENV GOOS=linux
ENV GOARCH=amd64
WORKDIR /app
COPY . .
RUN go build -a -installsuffix cgo -ldflags '-w -s' -o server
FROM alpine
RUN apk add --no-cache ca-certificates
COPY --from=builder /app/server /server
EXPOSE 8080
CMD ["/server"]
此设置的配置
version: 2.1
jobs:
build:
docker:
- image: circleci/golang:1.13
steps:
- checkout
- setup_remote_docker
- run:
name: Build image
command: docker build -t server .
- run:
name: Test image
command: |
docker run -d -p 8080:8080 --name built-image server
docker run --network container:built-image amothic/grpc-health-probe -addr=localhost:8080
amothic/grpc-health-probe是基于scratch构建的镜像,仅包含grpc-health-prove。详见https://github.com/amothic/docker-grpc-health-probe。