我有一个可以通过 docker-compose 启动的应用程序。该 docker-compose 文件使用“.env”文件来获取所有秘密变量。现在我想使用 Jenkins 通过 CI/CD 实现自动化。我的问题是如何在该构建中添加“.env”文件而不公开 env 文件?
这是我的 docker-compose.yml
version: "3"
services:
my-app:
image: j0sal/nextjs-13-login
ports:
- "3001:3000"
env_file:
- .env
如果可能的话,我想保留特定于该构建的 .env 文件。这可能吗?
您可以将文件添加到 Jenkins 凭证存储并使用
withCredentials
step 在管道中访问它们。所以管道看起来像这样:
node('built-in') {
withCredentials([file(credentialsId: 'secretFile', variable: 'SECRET_FILE')]) {
sh '''
docker compose up -d --env SECRET_FILE
# do whatever you need to do with the containers
'''
}
}
然后 docker-compose.yml 文件将引用该变量而不是硬编码路径:
version: "3"
services:
my-app:
image: j0sal/nextjs-13-login
ports:
- "3001:3000"
env_file:
- "${SECRET_FILE}"
理想情况下,您应该使用 secrets 而不是 env_file,但这是一个不同的主题。