【发布时间】:2021-06-25 10:37:32
【问题描述】:
我有几个地方,需要在部署的各个阶段定义一组K8s secret,所以想将循环脚本提取到模板中:
parameters:
- name: secretName
type: string
default: ""
- name: secrets
type: object
default:
Foo: Bar
steps:
- task: Bash@3
displayName: Create generic secret ${{ parameters.secretName }}
inputs:
targetType: inline
script: |
echo "Creating generic secret ${{ parameters.secretName }}"
microk8s kubectl delete secret ${{ parameters.secretName }}
microk8s kubectl create secret generic ${{ parameters.secretName }} ${{ each secret in parameters.secrets }}: --from-literal=${{ secretKey }}="${{ secret.value }}"
我想多次这样调用它,为每个阶段的部署创建所有必要的秘密
- job: CreateSecrets
pool:
name: $(poolName)
steps:
- template: "Templates/template-create-secret.yml"
parameters:
secretName: "testSecret"
secrets:
username: $(staging-user)
password: $(staging-password)
foo: $(bar)
它应该简单地执行一个类似于这个的脚本:
kubectl create secret generic secretName \
-- from-literal=username=user1 \
-- from-literal=password=pass1 \
-- ...etc
使用我目前的方法,我收到了错误:
/Code/BuildScripts/Templates/template-create-secret.yml(第 18 行, Col: 15): 在此上下文中不允许使用指令“每个”。 内嵌的表达式不支持指令 一个字符串。仅当整个值为 表达。
如何迭代对象类型的参数并使用它的键和值来为 bash 构建字符串?另一种方法是简单地为每个秘密使用一个键值对并创建多个秘密,我想避免这种情况
【问题讨论】:
标签: bash kubernetes azure-devops yaml azure-pipelines