【问题标题】:Adding environment variables to already deployed application in OpenShift将环境变量添加到 OpenShift 中已部署的应用程序
【发布时间】:2018-01-29 16:45:52
【问题描述】:

我目前有一个流程,可以通过以下命令使用 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}")

这按预期工作。我的问题是,一旦应用程序部署完毕,如果需要添加其他变量,我该如何更新 env 变量?我基本上想复制通过 ui 和添加 env 变量的功能。但是,我想使用 openshift 插件或 oc 工具来执行此操作,并使用变量文件而不仅仅是一组键值。

【问题讨论】:

    标签: jenkins openshift


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复,我已经尝试过了,它可以工作,但是这个解决方案的问题是可能需要添加多个环境变量。最初,它们在新应用程序的 env 文件中传递。如果我想将此文件存储在 SCM 中,然后更新变量,我将不得不进行一些解析并将命令串在一起。我希望有一种方法可以再次传递整个文件。
    • 然后考虑使用配置映射。这将保存原始键/值。然后在将环境变量添加到部署配置时,从配置映射中引用它们。然后,您可以一次性编辑/替换配置映射,重新部署将自动触发。
    • 正确的答案是使用 ConfigMap
    • 感谢您的建议!我对配置映射的经验有限,但发现需要为要添加到配置映射的每个环境变量更新 DeploymentConfig 模板。由于在 newApp 命令中使用模板来部署原始应用程序,那么 DeploymentConfig 将如何更新?或者有没有办法在不直接引用 DeploymentConfig 中的每个变量的情况下利用配置映射?
    • 您可以在创建应用程序后编辑部署配置 - oc edit dc &lt;your_app&gt;oc patch dc/&lt;yourapp&gt; --patch '{your_change}'
    【解决方案2】:

    如果您尝试使用构建器映像(带 S2I 又名启用源到映像的容器映像)在 SCM 中存储环境变量,请使用环境文件 .s2i/environment

    【讨论】:

    • 感谢您的评论。我不想将环境变量耦合到构建,因为它们会随着环境的变化而变化。我想在 DeploymentConfig 中指定它们。
    猜你喜欢
    • 1970-01-01
    • 2020-12-28
    • 2018-05-21
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    相关资源
    最近更新 更多