我的gitlab CI
中有一些变量,我想通过CI/CD piepeline传递给GCP secret manager
。
我发现了这个命令,它允许我创建一个单独的秘密:
gcloud secrets create secret-id --data-file="/path/to/file.txt"
但当涉及到多个变量时,就会变得非常复杂。
有没有办法通过gcloud command
同时创建多个秘密?
解决方案1:
您可以添加自定义的shell
脚本来执行此操作。
例如,对于您的GCP
Secret env vars,您可以添加一个命名约定和相同的前缀:
# Your Gitlab env vars
export GCP_SECRET_ENV_NAME=secret_name
export GCP_SECRET_ENV_VALUE=secret_value
然后你可以添加这种脚本,并在所有的秘密变量上添加foreach:
#!/usr/bin/env bash
set -e
set -o pipefail
set -u
# Simulate your Gitlab secrets
export GCP_SECRET_ENV_NAME=secret_name
export GCP_SECRET_ENV_VALUE=secret_value
for var_name in "${!GCP_SECRET@}"; do
echo "##### var name"
echo $var_name
echo "##### var value"
echo "${!var_name}"
gcloud secrets create $var_name --data-file="${!var_name}"
done
- 这个脚本从
GCP_SECRET
开始循环所有的秘密 - 然后您可以访问env-var的键和值
- 您可以在每个秘密变量上执行
gcloud
命令
解决方案2:
您还可以考虑Gitlab
中的File
类型变量:https://docs.gitlab.com/ee/ci/variables/#cicd-可变类型
来自文件:
Use File type CI/CD variables for tools that need a file as input.
File type variables:
Consist of a key, value and file.
Are made available in jobs as environment variables, with
The CI/CD variable key as the environment variable name.
The CI/CD variable value saved to a temporary file.
The path to the temporary file as the environment variable value.
解决方案3:
- 使用类似
Terraform
的infra as code工具在Secret manager
中直接创建没有版本(值(的机密 - 在
Secret manager
中手动添加版本(值(
此解决方案对机密版本的自动化程度较低,但更安全,因为我们不在Gitlab
、Terraform
、tfstate
或其他位置设置机密和敏感值。