Jenkins 向OpenShift中已部署的应用程序添加环境变量

Jenkins 向OpenShift中已部署的应用程序添加环境变量,jenkins,openshift,Jenkins,Openshift,我目前有一个流程,通过以下命令,利用Jenkins OpenShift插件构建并部署我们的应用程序到OpenShift: openshift.newBuild("--image-stream=${builderImageName}", "--binary=true", "-n ${projectName}", "--to=${applicationName}:${targetEnv}") openshift.startBuild("${applicationName}", "--from-dir

我目前有一个流程,通过以下命令,利用Jenkins OpenShift插件构建并部署我们的应用程序到OpenShift:

openshift.newBuild("--image-stream=${builderImageName}", "--binary=true", "-n ${projectName}", "--to=${applicationName}:${targetEnv}")
openshift.startBuild("${applicationName}", "--from-dir=.", "--wait=true", "-n ${projectName}")
openshift.newApp("-n ${projectName}", "--template=${templateName}", "--param-file=${appDeployConfigFileName}", "--env-file=${appEnvFileName}")

这正是我们想要的。我的问题是,一旦部署了应用程序,如果需要添加其他变量,如何更新环境变量?我基本上想要复制通过ui和添加env变量的功能。但是,我希望使用openshift插件或oc工具来实现这一点,并使用一个变量文件,而不仅仅是一组键值。

您需要更新应用程序的部署配置

oc set env dc/<your_app> MYVAR=foo -n <project_name>

如果您试图在SCM中存储环境变量,并使用生成器映像w/S2I aka source to image enabled container映像,请使用环境文件.S2I/environment

文件: 例子:
感谢您的回复,我已经尝试了这个方法,但这个解决方案的问题是可能要添加多个env变量。最初,它们在新应用程序中以env文件的形式传递。如果我想将这个文件存储在SCM中,然后更新变量,我必须进行一些解析并将命令串在一起。我希望能再次传递整个文件,然后考虑使用配置图。这将保存原始键/值。然后,在将环境变量添加到部署配置时,从配置映射中引用它们。然后,您可以一次性编辑/替换配置映射,重新部署将自动触发。正确答案是使用配置映射谢谢您的建议!我在配置映射方面的经验有限,但发现需要为将添加到配置映射的每个环境变量更新DeploymentConfig模板。由于newApp命令中使用了该模板来部署原始应用程序,那么如何更新DeploymentConfig?或者有没有一种方法可以在不直接引用DeploymentConfig中的每个变量的情况下使用配置映射?您可以在创建应用程序-oc edit dc或oc patch dc/-patch“{your_change}”后编辑部署配置谢谢您的评论。我不想将环境变量耦合到构建中,因为它们会随着环境的变化而变化。我想在DeploymentConfig中指定它们。