bash - 如何使用 each 表达式连接 Azure Pipelines 中的 bash 脚本
问题描述
我有几个地方,需要在部署的各个阶段定义一组 K8s 机密,所以我想将循环脚本提取到模板中:
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 行,第 15 列):在此上下文中不允许使用指令“每个”。嵌入在字符串中的表达式不支持指令。仅当整个值是表达式时才支持指令。
如何迭代对象类型的参数并使用其键和值来为 bash 构建字符串?另一种方法是简单地为每个秘密使用一个键值对并创建多个秘密,我想避免这种情况
解决方案
推荐阅读
- python - 在 Pandas 数据框中有条件地连接字符串
- oracle - oracle xml解析多行
- logging - 在java中记录用户
- cumulocity - Cumulocity 单点登录 - 在 SSO 用户的上下文中使用微服务进行身份验证
- java - 如何在 JSON 响应中的数组对象本身的数组之前添加名称?
- php - Woocommerce:购物车页面上每个产品的自定义字段
- c++ - 不能将 Accept() (CSocket) 放在自己的线程中
- typescript - 设置状态的接口包含枚举值会引发错误
- sql-server - 设置数据收集时无法更改身份验证类型
- node.js - nodejs MongoDB问题 - 不是函数