gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:01:20 25 4
gpt4 key购买 nike

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

那么如何传递命名空间 list 文件可以读取的变量呢?
有没有办法用 gitlab-ci.yml 传递它?

我在想什么的例子:

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

最佳答案

所以这里最好的答案是推荐 Helm因为您实际上是在要求动态 yaml 模板。 Since version 3 Helm 不需要像 Tiller 这样的任何服务器端组件,因此使用起来要容易得多。

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

sed

通过使用 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 文件并且需要批量查找/替换,请使用 envsubst (gnu gettext 实用程序的一部分)是另一种选择。

它查找文件中的所有环境变量,并将它们替换为当前环境中存在的实际值。这看起来像这样( original answer ):
script:
- envsubst < "namespace.yml" > "namespace-replaced.yml"
- kubectl apply -f namespace-replaced.yml

请注意,如相关答案中所述:如果您想对两者使用相同的文件,则必须使用类似 moreutil 的 sponge 之类的文件。 : envsubst < "namespace.yml" | sponge "namespace.yml". (因为 shell 重定向将在读取文件之前清空文件。

最后提示:
  • 请不要在 yaml 文件中定义命名空间(namespace.yml 除外),因为这不是最佳实践。使用 kubectl 来设置目标命名空间:kubectl apply -f deployment.yml --namespace=$CI_COMMIT_BRANCH
  • 不要使用 $CI_COMMIT_BRANCH关于k8s。它是完整的分支名称,可以包含特殊字符和空格。而是使用 $CI_COMMIT_REF_SLUGpredefined CI variable因为这是为其构建项目的分支或标记名称,所以小写,缩短为 63 字节,并且除了 0-9 和 a-z 之外的所有内容都替换为 -。没有前导/尾随 -。在 URL、主机名和域名中使用。
  • 关于kubernetes - 如何使用 gitlab-ci 动态分配命名空间名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61808416/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com