Openshift CLI-使用模板和oc new-app更新应用程序

时间:2019-01-18 08:11:00

标签: jenkins command-line-interface openshift openshift-client-tools build-pipeline

我目前正在使用

构建和部署带有模板的应用程序
oc new-app -f ./openshift/template.yaml

我使用的是模板,而不是单独的Deployment-,Build-等配置,因为我还希望能够传递类似的参数

oc new-app -f ./openshift/template.yaml --p DATABASE_PW=PW

据我所知,不可能使用

oc create -f ./openshift/deploymentconfig.yaml --p SOME_PARAM=TEST

现在我也将其集成到Jenkins的构建管道中。我的问题是这个。所有这些在第一次部署时都可以正常运行,但是对于重新部署将不起作用。我可以只用Jenkins重建应用程序,例如

oc start-build my-app

但这将导致更改,因为我的模板将不被考虑。我也不能使用new-app,因为它不会替换现有配置,从而产生类似于此的错误

--> Creating resources ...
    error: services "my-app" already exists
    ....
--> Failed

现在有解决此问题的方法。也许像new-app replace命令之类的东西,其中所有配置都被替换?我目前正在通过使用Shell文件完全杀死该应用程序,然后再次启动它来解决此问题,但这总是会导致几分钟的停机时间,这确实让我感到困扰

2 个答案:

答案 0 :(得分:1)

Graham指出解决此问题的最佳方法是使用

oc process -f openshift/template.yaml -p PARAM1=VALUE1 -p PARAM2=VALUE2

首先使用参数填充模板。然后将命令通过管道传递给oc apply以将其应用到应用程序,这将使您留下以下命令

oc process -f openshift/template.yaml -p PARAM1=VALUE1 -p PARAM2=VALUE2 | oc apply -f -

这将创建或更新您的所有配置。它还将检查哪些配置已更改。

如果您想在之后直接开始构建,请使用

oc start-build my-app

答案 1 :(得分:0)

要更新从模板 YAML 文件(即使用 oc create -f ./$tmpl_name.yaml)启动的正在运行的 pod 中的模板参数:

# delete existing dc (leaving svc & route)
# (here dc and template are named the same: $tmpl_name)
oc delete dc $tmpl_name
    
# update template parameter (notice template was not deleted)
oc process $tmpl_name -p $PARAM_NAME=$PARAM_VALUE | oc create -f -