gpt4 book ai didi

optimization - 如何在 OpenShift 3.6 中获取有关最新成功部署 pod 的信息

转载 作者:行者123 更新时间:2023-12-03 17:38:25 26 4
gpt4 key购买 nike

我目前正在制作一个 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,这是最新的完整修订版,未构建且未失败。这将为我提供包含我需要的信息的输出,即 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 rollout history

更新 2:如果可以为 Hook 设置监听器,您还可以使用部署后 Hook 来收集数据。希望 POD 继承了您需要的信息。更多信息在这里:https://docs.openshift.com/container-platform/3.10/dev_guide/deployments/deployment_strategies.html#lifecycle-hooks

关于optimization - 如何在 OpenShift 3.6 中获取有关最新成功部署 pod 的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51561805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com