配置文件中的变量替换

时间:2021-03-11 08:29:43

标签: kubernetes gitlab gitlab-ci

Gitlab 中的变量替换似乎只在 gitlab-ci.yml 文件中起作用。

但是,我有一个配置文件(k8s 机密),我想根据我是在暂存环境还是生产环境中设置不同的值。

apiVersion: v1
kind: Secret
metadata:
  name: tls-config
  namespace: myNamespace
type: kubernetes.io/tls
data:
  tls.crt: |
    ${TLS_CRT}

  tls.key: |
    ${TLS_KEY}

其中 TLS_CRTTLS_KEY 是在 /settings/ci_cd/variables 中定义的变量。

在这种情况下应该如何处理变量替换?

1 个答案:

答案 0 :(得分:1)

您可以使用像 sed

这样的编辑器

例如,如果您有这样的文件:

data:
  tls.crt: |
    #TLS_CRT#

  tls.key: |
    #TLS_KEY#

您可以像这样使用 sed 作为 GitLab 作业的一部分来替换其内容:

myjob:
  script:
  - sed -i "s|#TLS_CRT#|${TLS_CRT}|" ./path/to/file
  - sed -i "s|#TLS_KEY#|${TLS_KEY}|" ./path/to/file

然后文件内容将是这样的:

data:
  tls.crt: |
        MIIC2DCCAcCgAwIBAgIBATANBgkqh ...
  tls.key: |
        MIIEpgIBAAKCAQEA7yn3bRHQ5FHMQ ...

使用模式 #word# 不是完全必要的。但是,它确实使 sed 的使用更容易,因为它避免了在 shell 命令中对文字 ${} 字符进行转义。

作为此处使用的 sed 命令的简短说明:

#    v shorthand for --in-place; edits the file directly
sed -i "s|FIRST_ARGUMENT|SECOND_ARGUMENT|" ./path/to/file
#         ^ replace this ^ with this       ^ in this file

有关详细信息,请参阅此处:https://unix.stackexchange.com/a/112024/453397