Chinese, Simplified
SEO Title
将机密存储在存储库中,并使用Mozilla SOPS对其进行解密
先决条件
- Codefresh帐户
- 公共和私有GnuGP密钥对
- 凭据yaml,使用Mozilla SOPS加密,并存储在您的存储库中
Java应用程序示例
你可以在GitHub上找到这个示例项目。
示例应用程序从管道中检索系统变量“password”,并使用它对Redis数据库进行身份验证,但您可以自由使用任何类型的数据库。
String password = System.getenv("password");
String host = System.getProperty("server.host");
RedisClient redisClient = new RedisClient(
RedisURI.create("redis://" + password + "@" + host + ":6379"));
RedisConnection<String, String> connection = redisClient.connect();
示例应用程序中还有一个简单的单元测试,确保我们能够读取数据并将数据写入数据库。
加密的凭据文件存储在存储库中(以及公钥):
credentials.yaml
password: ENC[AES256_GCM,data:Jsth2tY8GhLgj6Jct27l,iv:3vcKVoD5ms29R5SWHiFhDhSAvvJTRzjn9lA6woroUQ8=,tag:OjkLvcHxE4m5RSCV7ej+FA==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
lastmodified: '2020-03-30T19:12:49Z'
mac: ENC[AES256_GCM,data:jGMTkFhXjgGMdWBpaSWjGZP6fta3UuYjEsnqziNELQZ2cLScT9v+GKg/c8iJYv1Gfiz3aw4ivYYrWzwmZehIbPHaw3/XBv/VRCQhzRWYKaf6pPFUXIS7XALSf9L9VbGOXL/CGPRae3t3HpaOor+knd6iQk2WR3K9kSeib4RBSCE=,iv:WSP8hBwaBv3ymTGltBOaVVC1sT08IG4hwqESlG8rN9w=,tag:3hZvCuql+ASWe/Mm5Bl7xg==,type:str]
pgp:
- created_at: '2020-03-30T19:12:49Z'
enc: |
-----BEGIN PGP MESSAGE-----
hQGMA9TqgBq6RQVRAQv/UouNaHfxkJ5PwXLvda97Fgj/2ew2VXPAlAnLvoGvTsb2
U4GXcaE7c4mYf7wSKF9k/F0FZTUEnd3CRji/OqjrNyvj5zI/9KGRABCKvzjsx+ZG
JolVnDifHl78Mor1CUPQ4JXasHKbVSlNLMGgDHIsvpeC7f7pIi8YDUDIa3/zXhFK
jcKzz4nlrW1Ph8zukmQk49Xvv6+DFj2NTptOB3U6mh79RCdnyCSRHxA3f0X00Pi5
g0p5x46S5E04uC2wXrZv8i/gyQbLHxwjmdbLq+P1Peu4/i9eSZZOpx0mc1KJ2mjr
oKRvgnUFz3xuYrSNzjC1vM01UbuSytlwx+S3J7VVLPSZRso1sbgv2+ylUOAHS+gZ
64uL0j/BZrF4wZI8y8zr0nJ6cZLiiF3LeXhfcuWJJ7+5p1OBEvfO+sWorLahIZTw
pogYPDpz4rGnrJRKBkNsVlYuUG8aNerIfhEBr6n//VJtt7QXTEXraLCTt4a6z/Fl
R6YSeNCKWQlURrTfm4Kv0lwBzMTLUb+Fg3HO8ShhiE9/2dKTSJkRJMVXRDp22Fm1
vO/wMFUjg6Dkrj1LVqQ9zcXc5QElgc4mF/V7SazacbQ7/g67tVtUrTit9LXgR9A0
k7wU5iT5oWLJtWwpkA==
=Il2p
-----END PGP MESSAGE-----
fp: C70833A85193F72C2D72CB9DBC109AFC69E0185D
encrypted_regex: password
version: 3.5.0
您无法在本地运行应用程序,因为它需要在管道中运行才能使用我们的环境变量进行连接。
创建管道
该管道包含四个阶段:
- 克隆阶段
- 导入私钥/公钥对的阶段
- 解密凭证文件的阶段
- 打包 jar 并运行单元测试的阶段
Codefresh UI管道视图
首先,您需要为私钥添加一个管道变量PRIV_KEY。您可以在UI中导航到内嵌的YAML编辑器,然后在右侧找到Variables选项卡:
Pipeline Variables
这是整个管道:
codefresh.yaml
# More examples of Codefresh YAML can be found at
# https://codefresh.io/docs/docs/example-catalog/ci-examples/
version: "1.0"
# Stages can help you organize your steps in stages
stages:
- "clone"
- "import"
- "decrypt"
- "package"
steps:
clone:
title: "Cloning repository..."
type: "git-clone"
stage: "clone"
arguments:
repo: "codefresh-contrib/mozilla-sops-app"
revision: "master"
import_keys:
title: "Importing gpg keys..."
type: "freestyle"
stage: "import"
working_directory: '${{clone}}'
arguments:
image: "vladgh/gpg"
commands:
- gpg --import public.key
- echo -e "${{PRIV_KEY}}" > private.key
- gpg --allow-secret-key-import --import private.key
decrypt_password:
title: "Decrypting password..."
type: "freestyle"
working_directory: "${{clone}}"
stage: "decrypt"
arguments:
image: "mozilla/sops"
commands:
- cp -r /codefresh/volume/.gnupg /root/.gnupg
- cf_export password=$(sops --decrypt --extract '["password"]' credentials.yaml)
package_jar:
title: "Packaging jar and running unit tests..."
working_directory: ${{clone}}
stage: "package"
arguments:
image: "maven:3.5.2-jdk-8-alpine"
commands:
- mvn -Dmaven.repo.local=/codefresh/volume/m2_repository -Dserver.host=my-redis-db-host clean package
services:
composition:
my-redis-db-host:
image: 'redis:4-alpine'
command: 'redis-server --requirepass $password'
ports:
- 6379
此管道执行以下操作:
- 通过git克隆步骤克隆主存储库。
- 使用GPG映像并通过自由式步骤导入公钥和私钥对。
- 通过不同的自由式步骤解密凭据文件。在这一步中,SOPS在/root下查找.gnupg目录(存储密钥环的目录)。我们需要从Codefresh Volume中复制它,因为/root不保存在容器之间。
- 最后一步,package_jar,做了一些特别的事情需要注意:
- 在6379端口上启动一个运行Redis的Service Container,并使用导出的环境变量设置数据库的密码
- 设置maven.report.local将maven依赖项缓存到本地codefresh卷中,以加快构建速度
- 运行单元测试并打包jar。请注意,当我们设置server.host时,如何直接引用服务容器的名称(我的redis-db-host)
发布日期
星期日, 八月 20, 2023 - 16:10
最后修改
星期日, 八月 20, 2023 - 16:18
Article
最新内容
- 8 hours ago
- 11 hours ago
- 11 hours ago
- 3 days ago
- 3 days 9 hours ago
- 3 days 10 hours ago
- 3 days 10 hours ago
- 3 days 10 hours ago
- 1 week ago
- 1 week ago