Kubernetes 如何使用gitlab ci动态分配命名空间名称?

Kubernetes 如何使用gitlab ci动态分配命名空间名称?,kubernetes,namespaces,gitlab,gitlab-ci,pipeline,Kubernetes,Namespaces,Gitlab,Gitlab Ci,Pipeline,一旦我在Gitlab中运行管道,我将尝试创建一个新的名称空间,这个名称空间将具有我推送到它的分支的名称 那么,我如何传递一个名称空间清单文件可以读取的变量呢? 有没有办法通过gitlab-ci.yml传递它 我正在思考的示例: apiVersion: v1 kind: Namespace metadata: name: $CI_COMMIT_BRANCH 因此,这里最好的答案是推荐,因为您实际上是在要求动态yaml模板。对于Helm,它不需要任何服务器端组件,如Tiller,因此使用起来更

一旦我在Gitlab中运行管道,我将尝试创建一个新的名称空间,这个名称空间将具有我推送到它的分支的名称

那么,我如何传递一个名称空间清单文件可以读取的变量呢? 有没有办法通过gitlab-ci.yml传递它

我正在思考的示例:

apiVersion: v1
kind: Namespace
metadata:
  name: $CI_COMMIT_BRANCH

因此,这里最好的答案是推荐,因为您实际上是在要求动态yaml模板。对于Helm,它不需要任何服务器端组件,如Tiller,因此使用起来更容易

但是,如果您不想将所有文件转换为Helm模板,还有两种更实用的方法


sed

通过使用,您可以在(假设)
namespace.yml
中查找/替换env变量,如下所示:

script:
  - sed -i "s/\$CI_COMMIT_BRANCH/$CI_COMMIT_BRANCH/g" namespace.yml
  - kubectl apply -f namespace.yml
-i
代表“就地”,如果要保存到新文件或标准输出,请保留它


envsubst

如果您有多个yaml文件并且需要批量查找/替换,那么使用(gnu实用程序的一部分)是另一种选择

它查找文件中的所有环境变量,并用当前环境中的实际值替换它们。这看起来像这样():

脚本:
-envsubs<“namespace.yml”>“namespace replaced.yml”
-kubectl apply-f namespace-replaced.yml
请注意,正如相关答案中所述:如果您想对这两个文件使用相同的文件,则必须使用类似于moreutil的
海绵
envsubs<“namespace.yml”|海绵“namespace.yml”
. (因为shell重定向将在读取文件之前清空文件


最后提示:

  • 请不要在yaml文件中定义命名空间(namespace.yml除外),因为这不是最佳做法。请使用kubectl设置目标命名空间:
    kubectl apply-f deployment.yml--namespace=$CI\u COMMIT\u BRANCH
  • 不要使用与K8相关的
    $CI_COMMIT_BRANCH
    。它是完整的分支名称,可以包含特殊的字符和空格。相反,请使用
    $CI_COMMIT_REF_SLUG
    ,因为这是为其生成项目的分支或标记名,小写,缩短为63字节,除0-9和a-z外的所有内容都替换为-。无前导ing/尾随-。用于URL、主机名和域名

kubectl创建ns$CI\u提交分支机构
script:
  - envsubst < "namespace.yml" > "namespace-replaced.yml"
  - kubectl apply -f namespace-replaced.yml