【发布时间】:2021-08-23 07:35:25
【问题描述】:
我有一个服务器应用程序,它有两个部署,一个用于暂存环境,另一个用于生产环境。我有两个单独的脚本负责启动进程。我想通过读取环境文件将start_production.sh和start_staging.sh合并到start.sh中。
start_production.sh
#!/bin/bash
pm2 delete production
pm2 start "npm run build && npm run start:prod" --name production --log-date-format 'DD-MM HH:mm:ss.SSS'
pm2 logs
检查内容,两个脚本之间的唯一区别是进程名称空间应该始终对应于环境文件。这将使其成为加载 .env 属性 NODE_ENV 的理想选择
.env
NODE_ENV=staging
最终我想做类似的事情
start.sh
#!/bin/bash
ENVIRONMENT={read NODE_ENV content of .env}
pm2 delete echo $ENVIRONMENT
pm2 start "npm run build && npm run start:prod" --name echo $ENVIRONMENT --log-date-format 'DD-MM HH:mm:ss.SSS'
pm2 logs
很明显,我在 bash 脚本方面绝对是个新手,所以我希望得到一个尽可能具体的答案。
解决方案
我将提供一个基于两个当前答案的聚合解决方案
start.sh
#!/bin/bash
source .env
ENVIRONMENT="$NODE_ENV"
if [ "$ENVIRONMENT" != "production" ] && [ "$ENVIRONMENT" != "staging" ]; then
echo "improper .env NODE_ENV"
exit
fi
pm2 delete "$ENVIRONMENT"
pm2 start "npm run build && npm run start:prod" --name "$ENVIRONMENT" --log-date-format 'DD-MM HH:mm:ss.SSS'
pm2 logs
【问题讨论】:
标签: bash deployment scripting pm2