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_CRT 和 TLS_KEY 是在 /settings/ci_cd/variables 中定义的变量。
在这种情况下应该如何处理变量替换?
答案 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