CHANGELOG 0.3

Changelog

名称 说明
Added 添加新功能
Changed 功能的变更
Deprecated 未来会删除
Removed 之前为Deprecated状态,此版本被移除
Fixed 功能的修复
Security 有关安全问题的修复

[Unreleased]

[0.3.2] - 2023-05-28

Added

更改 gitlab runner 为有向无环图 (DAG) 流水线

  1. 每个 job 均使用独立的容器来运行,避免无意义拆分多个 job;
  2. 在根目录默认生成 Dockerfile 文件;
  3. 确定默认镜像相关使用的变量名;

为方便 nginx 配置路由转发,更改 swagger 使用相对地址

  1. 由原先 “/openapi-spec/microservice.swagger.json” 更改为 “./microservice.swagger.json”

    <body>
      <redoc spec-url='./microservice.swagger.json'></redoc>
      <script src="./redoc.standalone.js"> </script>
    </body>
    
  2. 在 nginx 中 location 配置

    location /opsaid/test1/v1/openapi-spec/ {
        proxy_pass http://opsaid-test1:10080/openapi-spec/;
        proxy_set_header  Host $http_host;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header  X-Real-Port $remote_port;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
  3. 实现对接口文档的转发

修复 gitlab 的 check-protoc 阶段检测文件错误

protoc-gen-go-grpc

gitlab runner 更改为 有向无环图 (DAG) 流水线

  1. 每个 job 均使用独立的 容器 来运行,适合用来运行独立的任务,加快速度,避免无意义拆分多个 job;
  2. 让 Dockerfile 默认生成;
  3. 确定默认镜像使用的变量名;
```shell
CI_REGISTRY
CI_REGISTRY_IMAGE
CI_REGISTRY_USER
CI_REGISTRY_PASSWORD
```

进入:https://{gitlab}/-/settings/ci_cd,设置好变量。

新增 jenkins 流水线模版配置

.jenkins/workflows/Jenkinsfile

依赖 k8s 环境,需提前配置好,参考 Jenkins Pipeline

统一规范 CICD 变量名

  1. 新增 scripts/variable.sh 用于动态变量生成;
  2. 区别 scripts/env 用于全局静态变量;
  3. 支持静态配置编译运行时的变量,文件路径 scripts/env-${DEPLOY_ENV}-${BUILD_ENV}

更改本微服务的 proto 为相对路径

github.com/opsaid/test1/api/opsaid/test1/v1/microservice.proto

更改为

api/opsaid/test1/v1/microservice.proto

为解决服务在容器内构建时,如果为绝对路径,则代码目录必须存放至 $GOPATH/src/$REPOSITORY 路径下,否则无法运行。

protoc \
    -I ./ \
    -I /usr/local/include/ \
    -I "${GOPATH}"/src \
    -I "${GOPATH}"/src/github.com/grpc-ecosystem/grpc-gateway/ \
    -I "${GOPATH}"/src/github.com/googleapis/googleapis/ \
    --go_opt paths=source_relative \
    --go_out ./ \
    --go-grpc_opt paths=source_relative \
    --go-grpc_opt require_unimplemented_servers=false \
    --go-grpc_out ./ \
    ./api/opsaid/test5/${API_VERSION}/*.proto

添加 paths=source_relative 这个的意思是在当前目录生成 *.pb.go 文件,而忽略 proto 文件中的 go_package 路径。

统一 Makefile 与 scripts 中镜像相关的变量

  • make manifests 自动生成部署清单:

    1. 文件:Dockerfile
    2. 目录:deploy/*
  • 移除 Makefile 中以下变量

    转移至 scripts/env 中做设定,因不直接在 Makefile 文件中使用,简化结构。

    # 构建Docker容器变量
    BUILD_GOOS      ?= $(shell ${GO} env GOOS)
    IMAGE_FROM      ?= scratch
    IMAGE_HOST      ?= hub.docker.com
    IMAGE_NAME      ?= ${IMAGE_HOST}/${NAMESPACE}/${SHORTNAME}
    IMAGE_VERSION   ?= ${RELEASE_VERSION}
    
    # 部署与运行相关变量
    BUILD_ENV       ?= local
    DEPLOY_ENV      ?= dev
    
  • 更改 NAMESPACE 为部署使用的空间

    区别于 PRODUCT_CODE 表示产品代码或项目代码,而 NAMESPACE 表示租户空间,部署含义。

  • 改进 scripts/manifests.sh 后的变量

    1. 移除 Makefile 中的 NAMESPACE 变量;
    BIZ_GROUP_APPID=hello
    DEPLOY_ENV=dev
    DEPLOY_ENV=local
    

    部署的环境变量,值:dev test prod stress demo staging

  • 生成模版时支持自定义路径

    make manifests TEMPLATES=kubernetes     TEMPLATE_PATH=../gitops/deploy/kubernetes/dev/
    

    添加以下内容:

    1. scripts/kaniko.sh
    2. 移除 scripts/env 镜像变量
    3. 支持设置全局变量以 env-$DEPLOY_ENV-$BUILD_ENV 文件为准;

Fixed

go embed 存在 .svn 异常

  • 问题

    + make lint
    >> precheck environment
    >> generation release version
    >> generation code from proto files
    public/doc/embed.go:9:12: pattern openapi-spec/*: cannot embed directory openapi-spec/.svn: invalid name .svn
    public/doc/embed.go:9:12: pattern openapi-spec/*: cannot embed directory openapi-spec/.svn: invalid name .svn
    make: *** [Makefile:74: lint] Error 1
    
  • 解决

    需更改为更明确的文件路径,避免使用 “*”

    // Code generated by "grpc-kit-cli/0.3.1-beta.1". DO NOT EDIT.
    
    package doc
    
    import (
        "embed"
    )
    
    //go:embed openapi-spec/*.js
    //go:embed openapi-spec/*.json
    //go:embed openapi-spec/*.html
    var Assets embed.FS
    

[0.3.1] - 2023-04-09

Added

  • 使用文档更新

    1. 去除 gogo 模块文档;
    2. 更新 grpc 地址由 https://github.com/golang/protobuf 转变为 https://github.com/protocolbuffers/protobuf-go
  • 多平台镜像构建

    1. 由于阿里云镜像中心不支持存放多架构容器更改为使用腾讯容器镜像服务;
    2. 当前多架构容器仅支持使用 “docker buildx”,暂不支持 “podman”;
  • 添加依赖工具的下载

    make protoc
    make protoc-gen-go
    make protoc-gen-go-grpc
    make protoc-gen-grpc-gateway
    make protoc-gen-openapiv2
    
  • 仅版本号发生变更时才执行 sed

    1. 更改了 scripts/version.sh 中的 update 方法;
    2. 仅当先前与当前版本号不一致才更改 microservice.openapiv2.yaml 文件;
    3. 更改了 /tmp/microservice.openapiv2.yaml 生成临时文件地址;

Fixed

  • 在 “oidc authenticator” 的 logger 存在空指针错误

    异常代码位置

    github.com/grpc-kit/pkg@v0.3.0/cfg/security.go:76
    

    当设置的 “oidc issuer” 可访问,但未正常返回 “/.well-known/openid-configuration” 日志输出触发了空指针。

[0.3.0] - 2023-03-10

Added

  • 新增 “组织代码” 作为所有 proto 包名前缀

    1. 默认 “组织代码” 取值为 “grpc-kit”

    2. 根据规则自动生成内置变量:应用名称、服务包名、服务标题、服务代码

    APPNAME、PROTO_PACKAGE、SERVICE_TITLE、SERVICE_CODE
    
  • 对 microservice.proto 文件中的功能注解分离并声明式

    1. 分离 “google.api.http” 功能到文件 “microservice.gateway.yaml”

      文档地址:https://github.com/googleapis/googleapis/blob/master/google/api/service.proto

    2. 分离 “grpc.gateway.protoc_gen_openapiv2.options” 功能到文件 “microservice.openapiv2.yaml”

      文档地址:https://github.com/grpc-ecosystem/grpc-gateway/internal/descriptor/openapiconfig/openapiconfig.proto

  • 去掉 gogo 模块,升级 grpc-gateway v2 版本

    1. 移除了 https://github.com/gogo/protobuf 的依赖;
    2. 升级了 grpc-gateway 为 v2 版本;
  • 重新规范公知类 proto 的文件存放目录

    1. 更改了 https://github.com/grpc-kit/api 原先 proto 路径规范;
    proto/v1/example.proto
    proto/v1/tracing.proto
    

    更改为以下格式:

    known/status/v1/response.proto
    known/example/v1/example.proto
    known/config/v1/config.proto
    
    1. 更改了 proto 的包名称:
    grpc.kit.api.proto.v1
    

    更改为以下前缀:

    grpc_kit.api.known.
    
  • 更改库 “errors” 为 “errs” 防止对标准库重名

    1. 更改 “github.com/grpc-kit/pkg/errors” 为 “github.com/grpc-kit/pkg/errs”;
    2. 升级 proto 使用 “google.golang.org/protobuf/proto” 版本
    3. 状态使用公知版本 “grpc_kit.api.known.status.Status” 结构体
  • 移除 pkg/api 中使用 gogo 类库

    1. 去除由 “protoc-gen-gogo” 生成的 “pb.go” 文件
    2. 统一使用新规范后的 “grpc-kit/api proto” 生成的 “pb.go” 文件
  • 使用 gitlab-ci runner 为 shell 添加默认变量

    1. 默认模版添加以下变量;
    # 默认全局变量
    variables:
      CGO_ENABLED: "0"
      GIT_SSL_NO_VERIFY: "true"
      #GO111MODULE: "on"
      #GOPROXY: "https://goproxy.cn"
      #GOSUMDB: "sum.golang.google.cn"
      #GOPRIVATE: ""
      #GOPATH: "/home/gitlab-runner/go"
    

Fixed

  • make lint 首次无法正常运行

    1. 首次代码初始化后 “api/” 目录下不存在 “*.pb.go” 代码,导致无法引用;
    2. 通过在执行 make lint 之前,做 “proto” 文件的序列化;