【发布时间】:2019-12-30 18:53:24
【问题描述】:
如果我不将 .env 文件推送到我的存储库中,如何在 Dockerfile 中使用 .env ? 因为我想使用 dockerfile 在我的存储库上使用 jenkins
我的 dockerfile 是这样的
FROM node:lts-alpine
COPY ./ ./
RUN npm install
EXPOSE 8090
CMD ["npm", "run" , 'dev']
我对此很陌生,在这里我正在尝试使用 docker 部署我的 nodejs api 并与 jenkins 集成以继续部署,我已经关注了一些文章,所以我尝试在我的 linux 服务器上使用 dockerfile 和 jenkisfile
我的 .env 是这样的,对于 mongod db
DB_USERNAME=for_USERNAME_DB
DB_PASSWORD=for_PASSWORD_DB
DB_NAME=for_DATABASE_NAME
我的 Jenkinsfile 示例
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'docker build -t mygithub/express-api:latest'
}
}
stage('Test') {
steps {
sh 'docker run mygithub/express-api:latest npm test'
}
}
stage('Deploy') {
when {
branch 'master'
}
steps {
sh 'docker push mygithub/express-api:latest'
}
}
}
post {
failure {
echo 'build is broken. notify team!'
}
}
}
【问题讨论】:
-
我想你想让 jenkins 服务器运行集成测试,否则你不应该需要那里的秘密。在我们的设置中,我们生成一组新的凭据来运行测试,并在集成测试完成后最终丢弃实例。为此,我们每次都会生成一个
.env。 -
所以我们应该创建私有仓库?
-
我认为你不需要它。只需在
.gitignore中添加.env文件,并在需要时动态创建它。 -
所以当我在 github 上运行没有 .env 的 jenkins 和 dockerfile 时需要 .env 的快递就可以了吗?因为我希望每次推送到 master 时都集成它,所以我在 vps 上的 api 服务器也会更新我在我的 jenkins 服务器上设置的
-
集成测试将在哪个数据库上运行?如果您计划在全新的数据库上运行集成测试,那么您可以即时创建自己的
.env文件。另一方面,如果您计划在提交完成后让 jenkins 启动应用程序,情况会发生变化,您需要将 .env 文件直接存储在服务器上。无论如何,在任何一种情况下,您都不想将 .env 文件(或任何硬编码的密码)存储在 git repo