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 分钟。

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

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

谢谢

4

1 回答 1

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

于 2018-07-31T07:59:01.230 回答