使用具有外部化属性的 Delivery Pipeline Tekton 管道
您可以运行包含未随 Delivery Pipeline一起存储的管道属性的管道。 通过使用这些外部化属性,您可以在 Git 存储库 (存储库) 中管理管道环境属性,并使用版本控制和跟踪。
在管道外部化后,根据为管道配置的触发器,管道以相同方式运行。 当属性名称和属性类型匹配时,通过管道 UI 外部化和指定的任何属性的值将被 UI 中的值覆盖。
配置管道以使用外部化属性
最新的专用工作程序代理程序版本本机支持外部属性。 此支持使用 Kustomize 和 External Secrets,并且需要配置为使用外部属性的管道。
从 Kubernetes V 1.14起,Kustomize 包含在 Kubernetes 中,以通过使用 yaml
文件提供集群配置和 Kubernetes 对象创建的声明式方法。 要使用外部化属性,管道需要 kustomization.yaml
文件。
通过使用“外部私钥”操作程序,可以将来自外部 API 的私钥与 Kubernetes 私钥同步。 受支持的提供程序包括 IBM Cloud® Secrets Manager。 通过使用操作程序,可以表示存储在存储库中的 yaml
文件 (例如 Git) 中的私钥和提供程序。 要使用外部化安全属性,管道定义必须提供同时定义
SecretStore
和 ExternalSecret
的 yaml
文件。
配置集群
具有外部化环境属性的管道在 管道专用工作程序安装 (V 0.14.9 或更高版本) 或 IBM提供的受管工作程序上受支持。
如果您正在使用自己的专用工作程序,那么必须在托管该工作程序的集群上运行以下命令。
kubectl set env deployment/private-worker-agent -n tekton-pipelines ENABLE_CDPR="true"
有关专用工作程序安装在集群上放置的映像的更多信息,请参阅 管道专用工作程序映像。
配置管道
要设置管道以使用外部属性,必须指定两组属性: 基本属性 和 触发器属性。
基本属性 表示跨触发器运行的全局属性和私钥的集合。 您可以在 Tekton 管道的“环境属性”页面上指定的设置中找到这些值。
触发器属性 是在单个触发器上指定的属性和私钥。 属性优先顺序表示触发属性覆盖相同名称的基本属性。 虽然每个管道只有一组基本属性,但您可以具有许多不同的触发器属性集。
管道 UI 中具有相同名称的属性将覆盖任何外部化属性。
建议您通过将基本属性存储在 Git 存储库 (存储库) 内的单个文件夹中,并将每个触发器私钥存储在其自己的单独文件夹中,来分隔基本属性和私钥。
基本属性
基本属性文件夹必须包含以下文件:
.cdexternalpropbase
: 将当前目录标记为包含外部化基本属性的空文件。environment-properties.env
: 密钥值对中非安全管道属性的外部化表示。kustomization.yaml
:YAML 文件,用于从环境属性生成 configmap,并标识目录中定义的私钥库和外部私钥。external-secret-store.yaml
: 外部密钥库的外部密钥定义,例如 HashiCorp Vault。 您可以有多个由不同私钥使用的商店。external-secret.yaml
: 存储在external-secret-store.yaml
文件中定义的私钥存储库中的私钥的外部私钥定义。 您可以具有多个外部私钥。
示例
在用于包含外部化属性的存储库中完成以下步骤:
- 在包含现有 Tekton 资源定义的存储库中,添加名为
base
的文件夹。 - 将此文件夹的路径添加到管道定义。
- 在
base
文件夹中,添加.cdexternalpropbase
,environment-properties.env
,kustomization.yaml
,external-secret-store.yaml
和external-secret.yaml
文件。 - 更新这些文件以匹配要外部化的属性。
示例外部化 environment-properties.env
文件
## Pipeline Environment Properties: base/environment-properties.env
REGION=eu-de
BRANCH=main
CLUSTER_NAMESPACE=default
pipeline-debug=0
示例外部化 kustomization.yaml
文件
## Pipeline Kustomize file: base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
commonLabels:
devops.cloud.ibm.com/cd: kustomize
generatorOptions:
disableNameSuffixHash: true
resources:
- external-secret.yaml
- external-secret-store.yaml
configMapGenerator:
- name: environment-properties
envs:
- environment-properties.env
示例外部化 external-secret-store.yaml
文件
## Pipeline HashiCorp vault secret store: base/external-secret-store.yaml
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
name: hv-vault-backend
spec:
provider:
vault:
server: "https://VAULT:PORT"
path: ""
version: "v1"
auth:
appRole:
path: "approle"
roleId: "12345678-1234-1234-1234-123456789012"
# Reference to a key in a K8 Secret that contains the App Role SecretId
secretRef:
name: "secure-properties"
key: "vault_secret_id"
示例外部化 external-secret.yaml
文件
## Pipeline secure property stored externally: base/external-secret.yaml
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: "my-external-secret"
spec:
secretStoreRef:
name: hv-vault-backend
kind: SecretStore
refreshInterval: "0s"
target:
name: mysecrets
creationPolicy: "Owner"
deletionPolicy: "Delete"
data:
- secretKey: API_KEY
remoteRef:
key: VAULT/PATH/my-ibmcloud-apikey
property: value
触发器属性
确保管道中的每个外部化触发器都有自己的触发器属性文件夹,其中包含要用于该触发器的属性和外部私钥。
每个触发器属性文件夹都必须包含以下文件:
-
.cdexternalproptrigger
: 将当前目录标记为包含触发器属性的文件。 此文件必须具有具有触发器名称的 JSON 对象,如以下示例中所示。{ "triggerName" : "Deploy - External" }
-
trigger-properties.env
: 键值对中非安全管道属性的外部化表示。 -
kustomization.yaml
:YAML 文件,用于从触发器属性生成 configmap,并标识目录中定义的私钥库和外部私钥。 -
external-secret.yaml
: 基本文件夹中定义的私钥的外部私钥定义。
示例
在用于包含外部化属性的存储库中完成以下步骤:
- 在包含外部化属性的存储库中,添加具有唯一名称的文件夹,例如
trigger[#]
。 - 将此文件夹的路径添加到管道定义。
- 在
base
文件夹中,添加.cdexternalproptrigger
,trigger-properties.env
,kustomization.yaml
和external-secret.yaml
文件。 - 更新这些文件以匹配要外部化的属性。
配置根密钥
要使用外部私钥,必须至少配置一个私钥库。 此私钥库需要其自己的访问私钥,名为 根私钥。
必须将此根私钥作为安全属性添加到要外部化的管道的“环境属性”页面中指定的设置。 根私钥名称必须与 SecretStore
定义中指定的 secretRef.key
值匹配,例如 vault_secret_id
。