gitlab 的 CI runner 能夠自行查找官方文檔配置。配置完成以後在 proto 文件倉庫中添加 `.gitlab-ci.yaml` 文件,大概內容以下:java
整個 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
同時咱們須要調用 gitlab 的 api 發佈 release。其中 release 的 API 能夠參見官網,爲了方便調用我用 Go 寫了一個 cmd 編譯好二進制文件,而後直接調用。代碼在: https://github.com/airylinus/releaser 。生成 release 的目地是爲了保證 repeatable build, git tag 是能夠刪除的可是 release 不能夠。 最終效果以下github
由於 Go 的 1.13 之後版本支持了私有倉庫配置,切 gitlab 支持 go get。因此咱們只要 release 了,就能夠保證這個版本的代碼是一直可用的。惟一須要配置的就是 build 的時候須要 gitlab 訪問權限。這裏使用了粗暴的方式配置。api
須要一些 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