gitlab 的 CI runner 可以自行查找官方文档配置。配置完成之后在 proto 文件仓库中添加 `.gitlab-ci.yaml` 文件,大概内容如下:
整个 ci 过程就是使用 proto 文件生成各种语言的代码文件,然后打 tag 并 push 到仓库中。我使用了下面的代码来生成版本号,保证十年内不会重复:
year=$(date +"%y" --date="+1 year" | sed "s/2//1") v="v1./${year}./$CI/_JOB/_ID” git tag $v git push release $v
其中 `/$D_PRIVATE_KEY` 、`$D_PUB_KEY` 是生成的 rsa key pair ,专门用来构建。在这里配置:
同时我们需要调用 gitlab 的 api 发布 release。其中 release 的 API 可以参见官网,为了方便调用我用 Go 写了一个 cmd 编译好二进制文件,然后直接调用。代码在: https://github.com/airylinus/releaser 。生成 release 的目地是为了保证 repeatable build, git tag 是可以删除的但是 release 不可以。 最终效果如下
因为 Go 的 1.13 以后版本支持了私有仓库配置,切 gitlab 支持 go get。所以我们只要 release 了,就可以保证这个版本的代码是一直可用的。唯一需要配置的就是 build 的时候需要 gitlab 访问权限。这里使用了粗暴的方式配置。
需要一些 maven 的配置文件,可以事先做好模板放到仓库中
mv ./protoc-gen-grpc-java-1.22.3-linux-x86_64.exe ./grpc-java.bin chmod +x ./protoc ./protoc-gen-go ./grpc-java.bin protoc -I protos/ -I ./ --go_out=plugins=grpc:../protos/*.proto echo -n "Build for Java" rm -rf ./${project} mkdir -p ./${project}/src/main/java protoc -I protos/ --plugin=protoc-gen-grpc-java=./grpc-java.bin --grpc-java_out=./${project}/src/main/java --java_out=./${project}/src/main/java protos/*.proto sed "s/__VERSION__/${v}/g" ./tools/template-pom.xml | sed "s/__PROJECT__/${project}/g" > ./${project}/pom.xml mkdir ~/.m2/ rm -rf /usr/local/maven3/conf/settings.xml cp ./tools/settings.xml /usr/local/maven3/conf/ cd ./${project} mvn compile package deploy -e
至此所有链路都配置好了,后面按照规范使用即可。