【问题标题】:Can we use env variable as a value for a ENV variable in container of openshift deployment?我们可以使用 env 变量作为 openshift 部署容器中 ENV 变量的值吗?
【发布时间】:2020-02-17 12:26:31
【问题描述】:

我必须使用 api 登录 Openshift,我在 deployment.yaml 文件中提到了 apikey,如下所示:

    apiVersion: extensions/v1beta1
kind: Deployment
metadata:
 name: abc
spec:
 replicas: 1
 template:
   metadata:
     labels:
       app: abc
       version: v1
   spec:
     containers:
      - name: chaos
        image: abcusr/abc:v1
        imagePullPolicy: Always
        env:
         - name: HOST
           value: $host
         - name: NAMESPACE
           value: $namespace
         - name: APIKEY
           value: $apikey

这 3 个环境变量在 travis 中设置为环境变量。但是当我运行构建时,我的部署没有成功。它给出了错误:

 error: --server and passing the server URL as an argument are mutually exclusive

但是当我对所有这些值进行硬编码时,它会起作用。

【问题讨论】:

  • 您是说 value 是定义 yaml 的机器上的有效环境变量?您可能需要首先在本地处理 yaml 以替换这些变量。 envsubst 之类的东西应该可以工作 stackoverflow.com/a/11050943

标签: openshift travis-ci-cli


【解决方案1】:

env 变量($host 等)之前没有定义,因为 env 变量中的 value 被描述为:

变量引用 $(VAR_NAME) 使用容器中先前定义的环境变量和任何服务环境变量进行扩展。如果无法解析变量,则输入字符串中的引用将保持不变。 $(VAR_NAME) 语法可以用双 $$ 转义,即:$$(VAR_NAME)。无论变量是否存在,转义引用都不会被扩展。默认为“”。

但是,将template 与部署(以及您的应用程序的所有其他对象)和所有此类变量(如template's parameters)一起使用是一种更好的方法。因此,您可以在流程模板阶段设置该参数。

【讨论】:

  • 我这样做了 export apikey=XXXXXXXXXXXXXXXXX 并在deployment.yaml文件中做了env: - name: HOST value: XXXXXXXXXX - name: NAMESPACE value: XXXXXX - name: APIKEY value: "${apikey}"
  • 我创建了秘密并应用它并像这样在部署中使用name: APIKEY valueFrom: secretKeyRef: name: ocapikey key: APIKEY 这对我有用
猜你喜欢
  • 2021-03-26
  • 1970-01-01
  • 2022-01-20
  • 2022-10-25
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
相关资源
最近更新 更多