如何获取有关OpenShift 3.6中最新成功的Pod部署的信息

时间:2018-07-27 16:12:29

标签: optimization openshift continuous-delivery openshift-3

我目前正在制作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分钟的时间。

有人能更好地获取我需要的信息吗?

除非我弄错了,否则似乎没有“一字不漏”的功能来获取有关当前正在运行且可访问的应用程序的信息。

谢谢

1 个答案:

答案 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