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

rel*_*one 5 command-line-interface jenkins build-pipeline openshift openshift-client-tools

我目前正在使用模板构建和部署应用程序

oc new-app -f ./openshift/template.yaml
Run Code Online (Sandbox Code Playgroud)

我使用的是模板,而不是单独的部署、构建等配置,因为我也希望能够传递参数,例如

oc new-app -f ./openshift/template.yaml --p DATABASE_PW=PW
Run Code Online (Sandbox Code Playgroud)

据我所知,这是不可能使用

oc create -f ./openshift/deploymentconfig.yaml --p SOME_PARAM=TEST
Run Code Online (Sandbox Code Playgroud)

现在我也将其集成到了 Jenkins 的构建管道中。我现在的问题是这样的。这在第一次部署时一切正常,但对于重新部署则不起作用。我可以用 Jenkins 重建应用程序,就像

oc start-build my-app
Run Code Online (Sandbox Code Playgroud)

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

--> Creating resources ...
    error: services "my-app" already exists
    ....
--> Failed
Run Code Online (Sandbox Code Playgroud)

有办法解决这个问题吗?也许像命令一样new-app replace所有配置都被替换?我目前正在解决这个问题,方法是使用 shell 文件完全终止该应用程序,然后再次启动它;但这总是会导致几分钟的停机时间,这确实让我很烦恼。

rel*_*one 3

正如格雷厄姆指出的,解决这个问题的最好方法是使用

oc process -f openshift/template.yaml -p PARAM1=VALUE1 -p PARAM2=VALUE2
Run Code Online (Sandbox Code Playgroud)

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

oc process -f openshift/template.yaml -p PARAM1=VALUE1 -p PARAM2=VALUE2 | oc apply -f -
Run Code Online (Sandbox Code Playgroud)

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

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

oc start-build my-app
Run Code Online (Sandbox Code Playgroud)