使用 gitlab 實現 proto 文件的 semantic version 管理(2) - 配置篇

最終目標:

  1. 全部 proto 文件的改動都體如今版本號中;
  2. 開發者不須要手動編譯 proto 文件;
  3. 同一個版本號在各個語言中是通用的;

配置方案:

  1. 配置 gitlab CI,實現 merge request 經過以後自動打包並生成版本號;
  2. 每一個版本號生成以後自動生成對應語言的接口定義和 message 文件;
  3. 配置 Dockerfile, 在生產環境構建時使用對應版本號的包;

操做步驟:

1. 配置 gitlab CI runner

         gitlab 的 CI  runner 能夠自行查找官方文檔配置。配置完成以後在 proto 文件倉庫中添加 `.gitlab-ci.yaml` 文件,大概內容以下:java

image.png

整個 ci 過程就是使用 proto 文件生成各類語言的代碼文件,而後打 tag 並 push 到倉庫中。我使用了下面的代碼來生成版本號,保證十年內不會重複:linux

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 ,專門用來構建。在這裏配置:git

image.png

同時咱們須要調用 gitlab 的 api 發佈 release。其中 release 的 API 能夠參見官網,爲了方便調用我用 Go 寫了一個 cmd 編譯好二進制文件,而後直接調用。代碼在: https://github.com/airylinus/releaser 。生成 release 的目地是爲了保證 repeatable build, git tag 是能夠刪除的可是 release 不能夠。 最終效果以下github

image.png

image.png

2. 配置 Go 應用的 Dockerfile,使用生成的包

由於 Go 的 1.13 之後版本支持了私有倉庫配置,切 gitlab 支持 go get。因此咱們只要 release 了,就能夠保證這個版本的代碼是一直可用的。惟一須要配置的就是 build 的時候須要 gitlab 訪問權限。這裏使用了粗暴的方式配置。api

image.png

3. 配置和 deploy maven 包

須要一些 maven 的配置文件,能夠事先作好模板放到倉庫中bash

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

至此全部鏈路都配置好了,後面按照規範使用便可。maven

相關文章
相關標籤/搜索