我目前正在制作CICD脚本,以将复杂的环境部署到另一个环境中。我们涉及多种技术,我目前想优化此脚本,因为它花费太多时间来获取每个环境上的信息。
在OpenShift 3.6部分中,我需要为特定项目的每个应用程序获得最后成功的部署。我试图找到一种快速的方法,但是现在我只找到了这种解决方案:
oc rollout history dc -n <Project_name>
这将为我提供以下输出
deploymentconfigs "<Application_name>"
REVISION STATUS CAUSE
1 Complete config change
2 Complete config change
3 Failed manual change
4 Running config change
deploymentconfigs "<Application_name2>"
REVISION STATUS CAUSE
18 Complete config change
19 Complete config change
20 Complete manual change
21 Failed config change
....
然后,我获得此输出并解析每一行,以了解哪个是状态为“已完成”的最新修订。
在上面的示例中,我将获得以下列表:
<Application_name> : 2
<Application_name2> : 20
然后针对每个应用程序和每个修订版本:
oc rollout history dc/<Application_name> -n <Project_name> --revision=<Latest_Revision>
在上面的示例中,Application_name的Latest_Revision为2,这是未构建且未失败的最新完整修订。 这将为我提供输出,其中包含我需要的信息,即耳朵的版本以及用于成功完成部署的映像创建过程中使用的配置版本。
但是由于我有多个应用程序,因此每个环境最多可能需要2分钟的时间。
有人能更好地获取我需要的信息吗?
除非我弄错了,否则似乎没有“一字不漏”的功能来获取有关当前正在运行且可访问的应用程序的信息。
谢谢
答案 0 :(得分:0)
假设当前活动的部署是最新的成功部署,则可以尝试以下操作:
oc get dc -a --no-headers | awk '{print "oc rollout history dc "$1" --revision="$2}' | . /dev/stdin
它将获得部署列表,并将其提供给awk以提取名称$1
和修订版$2
,然后编译命令以提取详细信息,最后将其发送到标准输入以执行。可能因为不使用xargs之类的东西而感到不适,但是我发现它更易于调试(只需删除最后一部分并查看打印出的命令即可)。
更新: 再三考虑,您实际上可能会更喜欢这一点:
oc get dc -a -o jsonpath='{range .items[*]}{.metadata.name}{"\n\t"}{.spec.template.spec.containers[0].env}{"\n\t"}{.spec.template.spec.containers[0].image}{"\n-------\n"}{end}'
示例输出:
daily-checks
[map[name:SQL_QUERIES_DIR value:daily-checks/]]
docker-registry.default.svc:5000/ptrk-testing/daily-checks@sha256:b299434622b5f9e9958ae753b7211f1928318e57848e992bbf33a6e9ee0f6d94
-------
jboss-webserver31-tomcat
registry.access.redhat.com/jboss-webserver-3/webserver31-tomcat7-openshift@sha256:b5fac47d43939b82ce1e7ef864a7c2ee79db7920df5764b631f2783c4b73f044
-------
jtask
172.30.31.183:5000/ptrk-testing/app-txeq:build
-------
lifebicycle
docker-registry.default.svc:5000/ptrk-testing/lifebicycle@sha256:a93cfaf9efd9b806b0d4d3f0c087b369a9963ea05404c2c7445cc01f07344a35
您了解了,可以使用.spec.template.spec.containers[0].env
这样的表达式来获取特定的变量,标签等。不幸的是jsonpath
的输出不适用于oc rollout history
。
更新2 : 如果可以为挂钩设置侦听器,则还可以使用部署后挂钩来收集数据。希望您所需的信息可以由POD继承。此处更多信息:https://docs.openshift.com/container-platform/3.10/dev_guide/deployments/deployment_strategies.html#lifecycle-hooks