ci/cd 的 heroku 部署

heroku deployment with ci/cd

我正在尝试使用 github 操作构建一个 CI/CD 管道,以便构建我的应用程序并将其部署到 heroku。我使用了以下 YAML 文件。但它在 github 操作中显示错误。谁能帮我解决这个问题。我的 reository 是 bigshopcicd。我的项目结构是 大卖场 |-后端 |-前端 |-package.json
错误-

Run npm run build

sh: 1: 反应脚本: 未找到

npm 错误!代码生命周期 错误!系统调用生成 错误!文件sh 错误!错误的恩诺特 错误!前端@0.1.0 构建:react-scripts build 错误!生成 ENOENT

bigshop@1.0.0 build /home/runner/work/bigshopcicd/bigshopcicd cd frontend && npm run build

frontend@0.1.0 build /home/runner/work/bigshopcicd/bigshopcicd/frontend react-scripts build

npm 错误! 错误! frontend@0.1.0 构建脚本失败。 错误!这可能不是 npm 的问题。上面可能有额外的日志输出。 npm WARN Local package.json 存在,但缺少 node_modules,您是要安装吗?

npm 错误!此 运行 的完整日志可在以下位置找到: 错误! /home/runner/.npm/_logs/2021-12-23T08_13_25_954Z-debug.log 错误!代码生命周期 错误!错误号 1 错误! bigshop@1.0.0 构建:cd frontend && npm run build 错误!退出状态 1 错误! 错误! bigshop@1.0.0 构建脚本失败。 错误!这可能不是 npm 的问题。上面可能有额外的日志输出。

npm 错误!此 运行 的完整日志可在以下位置找到: 错误! /home/runner/.npm/_logs/2021-12-23T08_13_25_975Z-debug.log 错误:进程已完成,退出代码为 1。

pipeline.yml-

name: Deployment pipeline

on:
  push:
    branches:
      - main
  pull_request:
    branches: [main]
    types: [opened, synchronize]

jobs:
  simple_deployment_pipeline:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          node-version: '12.x'
      - name: npm install
        run: npm install
      - name: build
        run: npm run build
      - name: deployment
        uses: akhileshns/heroku-deploy@v3.12.12
        if: ${{ github.event_name == 'push' && !contains(join(github.event.commits.*.message, ' ,'), '#skip') }}
        with:
          heroku_api_key: ${{secrets.HEROKU_API_KEY}}
          heroku_app_name: bigshopcicd
          heroku_email: fakirsumon78@gmmail.com
          healthcheck: 'https://bigshopcicd.herokuapp.com/health'
          checkstring: 'ok'
          rollbackonhealthcheckfailed: true
      - uses: actions/checkout@v2
      - name: Bump version and push tag
        uses: anothrNick/github-tag-action@eca2b69f9e2c24be7decccd0f15fdb1ea5906598
        if: ${{ github.event_name == 'push' && !contains(join(github.event.commits.*.message, ' ,'), '#skip') }}
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          WITH_V: true
          DEFAULT_BUMP: patch
          RELEASE_BRANCHES: main

package.json 文件-

 "scripts": {
"start": "node backend/server.js",
"dev": "set NODE_ENV=DEVELOPMENT& nodemon backend/server",
"prod": "set NODE_ENV=PRODUCTION& nodemon backend/server",
"seeder": "node backend/utils/seeder.js",
"build": "cd frontend && npm run build",
"heroku-postbuild": "NPM_CONFIG_PRODUCTION=false && npm install --prefix frontend && npm run build --prefix frontend"

},

你的 npm install 命令 运行s 在你的根 package.json 中安装,它不包含反应依赖项。然后构建步骤进入 ./frontend 并尝试使用那些未获取的反应脚本。

您可以使用 npm 的 preinstall 目标来安装前端依赖项。

同时尝试看看是否可以将项目拆分为两个不同的项目,因为这种结构看起来很脆弱,而且您实际上失去了拥有单独 backend/frontend 的优势。 (加上你的脚本变得过于复杂)

编辑:
预安装不是专门为安装节点模块而设计的,它只是您可以添加到 package.json 的一个步骤,在安装步骤之前 npm 将其 运行 ,它可以包含任意脚本命令。在你的情况下可以尝试:

"scripts": {
    "preinstall": "cd frontend && npm install",
    "start": "node backend/server.js",
    "dev": "set NODE_ENV=DEVELOPMENT& nodemon backend/server",
    "prod": "set NODE_ENV=PRODUCTION& nodemon backend/server",
    "seeder": "node backend/utils/seeder.js",
    "build": "cd frontend && npm run build"
}