React 应用程序拥有暂存环境并在 AWS Elastic BeanStalk 上使用 Docker 进行部署

React Application to have a staging environment and deploying with Docker on AWS Elastic BeanStalk

我正在开发一个由 create-react-app 创建的 React 应用程序。我在 AWS Elastic BeanStalk 上有两个环境,暂存环境和生产环境。我正在通过 Docker 部署我的应用程序。我正在使用 CircleCI 进行自动化部署。

我的问题是我想在构建 React 应用程序时更改端点 url。

我正在使用 cross-env 来设置变量 REACT_APP_API_HOST 但我必须 运行 一个命令 build:staging 来构建它。

我不知道如何使用这个 docker。

Docker 文件

FROM node:12

WORKDIR /app
COPY . /app

RUN npm install
RUN npm run build

RUN npm install -g serve

EXPOSE 3000

ENTRYPOINT ["serve", "-l", "3000", "-s", "build", "-d"]

以及 package.json 文件的脚本部分

"scripts": {
        "start": "react-scripts start",
        "build": "react-scripts build",
        "test": "react-scripts test",
        "eject": "react-scripts eject",
        "build:staging": "cross-env REACT_APP_API_HOST=staging react-scripts build",
        "build:prod": "cross-env REACT_APP_API_HOST=production react-scripts build"
    },

所以经过长时间的研发,我和朋友找到的答案是 运行 在将它部署到 Elastic Beanstalk 之前做一个中间脚本。

buildDocker.sh

#!/bin/bash
branch_name=$(git symbolic-ref --short -q HEAD)

if [ "$branch_name" == "develop" ]; then
    result_sed=$(sed 's/RUN npm run build/RUN npm run build:staging/g' Dockerfile)
    echo "$result_sed" > Dockerfile
elif [ "$branch_name" == "master" ]; then
    result_sed=$(sed 's/RUN npm run build/RUN npm run build:prod/g' Dockerfile)
    echo "$result_sed" > Dockerfile
fi