Optimization 如何获取OpenShift 3.6中最新成功pod部署的信息

Optimization 如何获取OpenShift 3.6中最新成功pod部署的信息,optimization,openshift,continuous-delivery,openshift-3,Optimization,Openshift,Continuous Delivery,Openshift 3,我目前正在制作一个CICD脚本,以便将一个复杂的环境部署到另一个环境中。我们涉及多种技术,我目前希望优化此脚本,因为获取每个环境的信息需要花费太多时间 在OpenShift 3.6部分中,我需要为特定项目的每个应用程序获得最后一次成功部署。我试图找到一种快速的方法,但目前我只找到了以下解决方案: oc rollout history dc -n <Project_name> oc卷展栏历史记录dc-n 这将给我以下输出 deploymentconfigs "<Applica

我目前正在制作一个CICD脚本,以便将一个复杂的环境部署到另一个环境中。我们涉及多种技术,我目前希望优化此脚本,因为获取每个环境的信息需要花费太多时间

在OpenShift 3.6部分中,我需要为特定项目的每个应用程序获得最后一次成功部署。我试图找到一种快速的方法,但目前我只找到了以下解决方案:

oc rollout history dc -n <Project_name>
oc卷展栏历史记录dc-n
这将给我以下输出

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
....
deploymentconfigs“”
修订状态原因
1完成配置更改
2完成配置更改
3手动更改失败
4运行配置更改
部署配置“”
修订状态原因
18完成配置更改
19完成配置更改
20完全手动更改
21配置更改失败
....
然后,我获取这个输出并解析每一行,以了解哪一行是状态为“Complete”的最新版本

在上面的示例中,我将得到以下列表:

<Application_name> : 2
<Application_name2> : 20
:2
: 20
然后,对于每个应用程序和每个版本,我会:

oc rollout history dc/<Application_name> -n <Project_name> --revision=<Latest_Revision>
oc卷展栏历史记录dc/-n--修订版=
在上述示例中,应用程序名称的最新版本为2,这是未生成且未失败的最新完整版本。 这将为我提供所需信息的输出,这些信息是ear的版本以及创建映像时使用的配置版本,用于此成功部署

但由于我有多个应用程序,因此每个环境的此过程最多需要2分钟

有谁能有更好的方法获取我需要的信息吗

除非我弄错了,否则看起来没有“一行程序”可以获取当前正在运行且可访问的应用程序的信息


谢谢

假设当前活动的部署是最新的成功部署,您可以尝试以下操作:

 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卷展历史一起使用

更新2
如果可以为钩子设置侦听器,还可以使用部署后钩子收集数据。希望你需要的信息能被PODs继承。此处的更多信息:

是否要忽略正在运行的应用程序,以及除了配置版本之外,您还需要什么信息?我需要的信息在一些环境信息中,也在容器中。例如,我们需要图像,CONFIGMAP_LONGVERSION&PROJECT_LONGVERSION
oc get dc-a
没有返回正确的信息,例如我有应用程序名称,它告诉我版本24。但第24版实际上是一个失败的版本,它给出了一个错误。当前版本是修订版23。