在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。

广告
将在 10 秒后关闭
bannerAds