在目前的项目中,我们采用的微服务架构,后端服务主要使用gradle进行依赖管理。我们希望在线上环境出现问题的时候,能够快速的定位是哪一个版本出现了问题。目前没有做应用监控,应用是部署到了Kubernetes集群中的, 因此我们希望通过一条比较简单的命令获取到应用名称、应用版本、应用使用的版本。
获取Gradle Project Version
第一种方案:
1 | version="$(./gradlew properties | grep '^version:' | awk '{printf $2}')" |
这种方案还是被放弃了。因为需要下载gradlew
,而在我们的高环境上,并不能访问外网。
第二种方案:
1 | version="$(cat "./build.gradle" | sed "s/=//g" | grep '^version' | awk '{printf $2}' | sed "s/'//g")" |
这种方案中,最开始的版本中没有sed "s/=//g"
,为什么加上这个语句?因为在build.gradle
中,可以通过version = 1.0.0
或者 version 1.0.0
这两种方式设置版本。
获取Kubernetes Deployment的name、version、image
1 | kubectl get deploy -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,"VERSION":".metadata.labels.app\.kubernetes\.io/version","IMAGE":".spec.template.spec.containers[0].image" --selector=app.kubernetes.io/managed-by=Helm -A |