【问题标题】:How to get information on latest successful pod deployment in OpenShift 3.6如何获取有关 OpenShift 3.6 中最新成功部署 pod 的信息
【发布时间】:2019-01-04 19:20:13
【问题描述】:

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

有人有更好的方法来获取我需要的信息吗?

除非我弄错了,否则似乎没有“一条线”可以获取有关当前正在运行和可访问的应用程序的信息。

谢谢

【问题讨论】:

  • 您是否要忽略 正在运行的应用程序,除了配置版本之外您还需要哪些信息?
  • 我需要的信息在一些环境信息中,也在容器中。例如我们需要图像、CONFIGMAP_LONGVERSION & PROJECT_LONGVERSION

标签: optimization openshift continuous-delivery openshift-3


【解决方案1】:

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

 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

【讨论】:

  • oc get dc -a 没有返回正确的信息,例如我有 application_name 告诉我修订版 24。但修订版 24 实际上是一个失败的修订版,它给出了错误。现行版本是第 23 版。
猜你喜欢
  • 1970-01-01
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-12-24
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多