繁体   English   中英

如何在 Kubernetes yaml 文件中动态设置包含 URL(带斜杠)的值并防止:替换命令中的错误标志

[英]How to dynamically set values containing URLs (with slashes) in Kubernetes yaml files & prevent: bad flag in substitute command

我们使用 Tekton 作为我们的 CI/CD 解决方案,并希望在我们的pipeline-run.yml中替换{{DASHBOARD_HOST}}的值,如下所示:

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  generateName: buildpacks-test-pipeline-run-
spec:
  serviceAccountName: buildpacks-service-account-gitlab # Only needed if you set up authorization
  pipelineRef:
    name: buildpacks-test-pipeline
  workspaces:
    - name: source-workspace
      subPath: source
      persistentVolumeClaim:
        claimName: buildpacks-source-pvc
    - name: cache-workspace
      subPath: cache
      persistentVolumeClaim:
        claimName: buildpacks-source-pvc
    - name: maven-repo-cache
      subPath: maven-repo-cache
      persistentVolumeClaim:
        claimName: buildpacks-source-pvc
  params:
    - name: IMAGE
      value: registry.gitlab.com/jonashackt/microservice-api-spring-boot # This defines the name of output image
    - name: REPO_PATH_ONLY
      value: jonashackt/microservice-api-spring-boot
    - name: SOURCE_REVISION
      value: 3c4131f8566ef157244881bacc474543ef96755d
    - name: DASHBOARD_PORT
      value: 8765
    - name: DASHBOARD_HOST
      value: {{DASHBOARD_HOST}}

我们尝试使用此方法中描述的sed方法,因此请回答

DASHBOARD_HOST=http://abd1c6f-123246.eu-central-1.elb.amazonaws.com
sed "s/{{DASHBOARD_HOST}}/$DASHBOARD_HOST/g" pipeline-run.yml | kubectl apply -f -

但得到以下错误:

bad flag in substitute command: '/'

关于如何使用sed替换{{DASHBOARD_HOST}}变量的任何想法?

您要替换的变量包含斜杠 - 和sed "s/{{DASHBOARD_HOST}}/$DASHBOARD_HOST/g"告诉sed使用/作为分隔符。 这会产生错误。 但是由于 sed s命令可以使用任何字符作为分隔符,我们可以使用s#而不是s/来优化解决方案,如下所示:

sed "s#{{DASHBOARD_HOST}}#$DASHBOARD_HOST#g" app-deployment.yaml | kubectl apply -f -

我们也可以省略sed所说的cat ,因为sed能够自行读取文件。 我们要在app-deployment.yaml中替换的变量可能看起来像这样:

...
params:
  - name: DASHBOARD_HOST
    value: {{DASHBOARD_HOST}}
...

多变量替换

使用 sed 您甚至可以替换 yaml 文件中的多个变量 假设您的app-deployment.yaml具有以下内容:

...
params:
  - name: DASHBOARD_HOST
    value: {{DASHBOARD_HOST}}
  - name: DASHBOARD_PORT
    value: {{DASHBOARD_PORT}}
...

现在在 shell 中设置两个变量:

DASHBOARD_HOST=http://abd1c6f-123246.eu-central-1.elb.amazonaws.com
DASHBOARD_PORT=9785

然后使用 ; 链接 sed s#命令; 像这样:

sed "s#{{DASHBOARD_HOST}}#$DASHBOARD_HOST#g;s#{{DASHBOARD_PORT}}#$DASHBOARD_PORT#g" app-deployment.yaml | kubectl apply -f -

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM