如何将自定义 ci cd 变量传递到 yaml 文件中
·
回答问题
我是 GitLab cicd 的新手。我创建了简单的 nginx 部署,包括命名空间、配置映射、svc,部署配置映射包含带有 cicd 变量的简单自定义 index.html:
apiVersion: v1
kind: ConfigMap
metadata:
name: index-html-configmap
namespace: lazzio
data:
index.html: |
<html>
<h1>Welcomee</h1>
</br>
<h1>Hi! This is a configmap Index file for test-tepl+ingress </h1>
<h2> and this ---> $PW_TEST <--- is a password from gitlab cicd variable</h2>
</html>
自定义变量 PW_TEST 在 UI 的 cicd/variables 部分下设置,没有受保护的分支
#pipeline :
stages:
- build
variables:
ENV_NAME:
value: "int"
1st-build:
environment:
name: ${ENV_NAME}
variables:
PW_TEST: $PW_TEST
image: alpine
stage: build
before_script:
- apk add bash
- apk add curl
script:
- echo $PW_TEST
- curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
- install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
- kubectl --kubeconfig $CONF_INT_JK --insecure-skip-tls-verify apply -f nm.yml
- kubectl --kubeconfig $CONF_INT_JK --insecure-skip-tls-verify apply -f index.yml
- kubectl --kubeconfig $CONF_INT_JK --insecure-skip-tls-verify apply -f depl.yml
- kubectl --kubeconfig $CONF_INT_JK --insecure-skip-tls-verify apply -f svc.yml
- kubectl --kubeconfig $CONF_INT_JK --insecure-skip-tls-verify apply -f test_ingress_int.yml
但是当我登录集群并进行卷曲时,我得到了与 index.yml 中定义的相同的索引文件。
我知道它在索引中是一个愚蠢的无用变量,但我只是在测试变量是否将存储为 cicd 中的自定义变量传递到 k3s 上的部署中。在另一个正在安装的管道中,例如。通过 ansible 需要密码或其他机密的任何数据库或 k3s 集群,因此我想在 GitLab 存储库中的文件中使用 cicd 变量而不是明文机密。
感谢您的任何提示。
Answers
实际上,您几乎没有办法做到这一点。
-
个人喜欢envsubst,实现简单,分量有点重。但是您必须安装它(例如在 gitlab runner 中)以避免每次管道运行时下载它。
-
还有一个很好/简单的解决方案,使用 shell 脚本基本上只是用 var 的值替换字符串。这里的缺点是您必须自己编写健全性检查。
sed "s/\${PY_VERSION}/${PY_VERSION}/g; s/\${JQ_VERSION}/${JQ_VERSION}/g" "${FILE}yaml.in" > "${FILE}.yaml"
- 在复杂的动态部署中(如果你有大量的变量)你可以使用 helm 通过选项 debug 提取变量。这里的缺点是你基本上所有清单的声明最终都在一个文件中。
helm --values ci-variables/api-variables.yaml
--debug 模板 ./deployment/api-name > apply_file.yaml
更多推荐
所有评论(0)