将CircleCI部署到Heroku

时间:2018-09-18 11:26:44

标签: git heroku deployment continuous-deployment circleci

我对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

2 个答案:

答案 0 :(得分: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上的代码进行逐位精确复制(即仅构建一次),请考虑通过{{3 }}。

答案 1 :(得分:0)

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

随时查看:production-ready-ci-cd-using-circleci-docker-heroku-fastapi