【问题标题】:Deploying CircleCI changes to Heroku将 CircleCI 更改部署到 Heroku
【发布时间】:2020-05-26 08:02:47
【问题描述】:

我对 Git 和自动化部署非常陌生,我正在尝试将作为 CI 的一部分所做的更改部署到 Heroku。

高层次的想法:

  1. 将我的代码发送到 GitHub
  2. CircleCI 将其拾取并进行一些缩小
  3. CircleCI 运行一些测试
  4. CircleCI 将我的文件(包括我对它们所做的更改)部署到 Heroku

一切正常,除了我在 Heroku 上获得的文件似乎是来自 Git 的文件,而不是修改/缩小的文件。

我猜问题出在我的 YAML 中:

... build steps

deploy:
  docker:
    - image: buildpack-deps:trusty
  steps:
    - checkout
    - run:
        name: Deploy to Heroku
        command: |
            git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APP_NAME.git master

但是,我不确定如何更改它。

  • 将修改后的文件直接发送到 Heroku 是不是不好?我应该先将它们提交到特殊发布文件夹中的 GitHub,然后将其发送到 Heroku?怎么样?
  • 这只是我的 YAML 中缺少的东西吗?

完整的 YAML 作为参考:

version: 2
jobs:
build:
    docker:
    # https://circleci.com/docs/2.0/circleci-images/
    - image: circleci/node:10.10
    - image: circleci/postgres:10.5-alpine-postgis
        environment:
        POSTGRES_USER: myproject
        POSTGRES_DB: myproject

    working_directory: ~/repo

    steps:
    - checkout

    - restore_cache:
        keys:
        - v1-dependencies-{{ checksum "package.json" }}
        - v1-dependencies-

    - run: npm install

    ..........

    - save_cache:
        paths:
            - node_modules
        key: v1-dependencies-{{ checksum "package.json" }}

    - run:
        name: Unit Testing
        command: npm run test_unit

    - run:
        name: Build client files
        command: npm run build

    - run:
        name: API Testing
        command: |
            npm start &
            npm run test_api

deploy:
    docker:
    - image: buildpack-deps:trusty
    steps:
    - checkout
    - run:
        name: Deploy to Heroku
        command: |
            git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_APP_NAME.git master

workflows:
version: 2
build-deploy:
    jobs:
    - build
    - deploy:
        requires:
            - build
        filters:
            branches:
            only: master

【问题讨论】:

    标签: git heroku deployment continuous-deployment circleci


    【解决方案1】:

    您的 CI 工具不应该为 Heroku 构建您的应用程序。 (当然,它可以构建它来运行测试。)

    Heroku 将自行构建您的应用程序。推送您的源文件,让它完成它的工作。使用 Node.js 构建包,您可以Heroku will run your postinstall script, if provided,这是运行构建命令的好地方:

    "scripts": {
      "start": "node index.js",
      "test": "mocha",
      "postinstall": "npm rum build"
    }
    

    对缩小的文件(相对于未缩小的文件)运行测试可能会让您感觉更安全,但您正在有效地测试缩小工具以及您自己的代码。理想情况下,您应该使用已经过良好测试的工具,并将您自己的测试集中在您自己的代码上。 (如果您仍然喜欢针对缩小的代码运行它不会造成太大的伤害。)

    如果您想确保测试针对您在 Heroku 上的代码的逐位精确副本运行(即仅构建一次),请考虑通过 Docker container 构建和部署您的应用程序.

    【讨论】:

    • 我添加了完整的 YAML,目标是基于 NodeJS 的。通过构建,我的意思主要是缩小客户端 javascript 和 CSS 文件,对我来说,这似乎是(IMO)CI 工作的一部分,特别是因为我想对缩小的文件运行 UI 测试
    【解决方案2】:

    我最近编写了一个使用 CirclCI、Heroku、Docker 和 FastAPI 设置 CI/CD 的教程。尽管您没有使用 FastAPI,但大部分过程是相同的。

    欢迎查看:production-ready-ci-cd-using-circleci-docker-heroku-fastapi

    【讨论】:

      猜你喜欢
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 2011-12-18
      相关资源
      最近更新 更多