用 GitHub Actions 把项目部署到 Heroku

文章目录
  1. 1. Actions 配置文件
  2. 2. 项目配置
    1. 2.1. Python:以 Flask 应用程序为例
      1. 2.1.1. requirements.txt
      2. 2.1.2. Procfile
      3. 2.1.3. runtime.txt
  3. 3. FAQs

主要是利用到了 Actions Marketplace 里面的 Deploy to Heroku 项目。

Actions 配置文件

在项目 .github/workflow/ 下创建 heroku.yml ,并写入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
name: Push Container to Heroku

on:
push:
branches:
- master

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/[email protected]
- uses: akhileshns/[email protected]
with:
heroku_api_key: ${{secrets.HEROKU_API_KEY}}
heroku_app_name: "APPNAME" #Must be unique in Heroku (APPNAME.herokuapp.com)
heroku_email: ""
branch: "master" #OPTIONAL and DEFAULT - 'HEAD' (a.k.a your current branch)
dontuseforce: false #OPTIONAL and DEFAULT - false
usedocker: false #OPTIONAL and DEFAULT - false

然后在项目的环境变量中设置 HEROKU_API_KEY ,这玩意儿在 Heroku 的 Account Settings 页可以找到,形如:00000aa0-000a-00a0-0a0a-00a00a00a0a0

项目配置

这一节补充一下为把项目部署到 Heroku,要对项目进行的一些修改。

Python:以 Flask 应用程序为例

主要需要三份文件:requirements.txtProcfileruntime.txt

requirements.txt

1
pip freeze > requirements.txt

记得先装上 Gunicorn。

Procfile

这是 Heroku App 的启动脚本。

如果 app.py 在根目录:

1
web: gunicorn app:app --log-file -

如果 app1.py 在名为 projectname 的子文件夹下:

1
web: gunicorn --pythonpath projectname app1:app2 --log-file -

注:app1是 app1.py,app2是 app1.py 内一个指向 Flask 实例的变量,一般来讲就是

1
app2 = Flask(__name__)

runtime.txt

指定 Heroku App 所使用的 Python 版本。最近(2020 年 5 月)一般是:

1
python-3.8.2

FAQs

Q1:为什么你 TM 不用 Heroku 的 Connect to GitHub 呢?

A1:因为这样搞就可以一个 GitHub 账号对应多个 Heroku 账号了嘛。但其实我也没试过直接走 OAuth 可不可以一对多。