Github Action 的简单使用

GitHub Action 是 GitHub 于 2019 年 11 月正式推出的一个 CI CD 服务。

CI/CD 的一些解释

CI/CD 是什么?如何理解持续集成、持续交付和持续部署。

CI/CD 是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。作为一个面向开发和运营团队的解决方案,CI/CD 主要针对在集成新代码时所引发的问题(亦称:“集成地狱”)。

具体而言,CI/CD 可让持续自动化和持续监控贯穿于应用的整个生命周期(从集成和测试阶段,到交付和部署)。这些关联的事务通常被统称为“CI/CD 管道”,由开发和运维团队以敏捷方式协同支持。

写在前面

如果你仅仅是想体验一下 Github Action 那么阅读下面的步骤就可以(可能需要对GitHub有些基础)。

强烈建议访问官网了解详情 官方文档

部署python的定时任务

1. GitHub中创建项目

创建步骤可以自行搜索,没有特殊的要求

项目目录

这里注意 .github/workflows/run.yaml 该文件为具体任务的定义 包含 环境 任务 触发条件

1
2
3
4
5
6
7
8
├── .github
├── workflows
├── run.yaml
├── README.md
├── main.py
├── requeirments.txt

复制代码
主要文件内容
  1. run.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
name: Python package

on:
push:
branches:
- main
schedule:
- cron: 00 02 * * *

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requeirments.txt
- name: execute py script
env:
FM_USERNAME: ${{ secrets.USERNAME }}

run: |
python main.py

复制代码
  1. main.py
1
2
3
4
5
6
7
8
def main():
print("执行github action")


if __name__ == "__main__":
main()

复制代码

2. 配置环境变量

如果需要配置,没有则跳过

image.png

3. 上传代码 查看 actions

因为我在 .github/workflows/run.yaml 文件中配置 main 分支推送的时候会执行任务,这里会自动执行

image.png

4. 查看执行结果

这里可以点进每一步查看每一步的执行情况;如果有错误会显示具体的错误内容

image.png

5. 我的执行结果

因为我配置每天2点自动执行任务,所以我这边会有很多执行任务

image.png

6. 一些解释

  • name : job 的名称 (后续在GitHub的Actions会显示)
  • on.push.branches : 在代码合并/推送到此分支后自动执行当前job
  • on.schedule : 计划任务 符合cron的表达式
  • jobs.build.runs-on : 运行环境的选择
  • jobs.build.steps : job的具体执行步骤,可以定义多个步骤按顺序执行
  • jobs.build.steps : job的具体执行步骤,可以定义多个步骤按顺序执行
  • jobs.build.steps.env : 获取配置的环境变量对应的为 github.settings.secrets (注意不是 environment secrets )

详细的配置查看 GitHub Actions 的工作流程语法 这里只展示常见的解释

7. 问题思考

  1. 关于 Environment secrets 与 Repository secrets 的区别 参考链接

    简单的说 Repository secrets 是在任何地方都可以使用的变量 Environment secrets 需要配合 yaml 文件中的 environment 变量具体使用。

  2. 聪明的你是不是觉得可以想到白嫖,对此关于使用计费问题可以 查看 关于 GitHub Actions 的计费

    下图为部分限制内容 (如果你有合适的搭配方式欢迎推荐给我)

关于Github Action的使用限制

  1. cron的表达式 的时间问题

    因为 Github Action标准的时间为UTC时间,如果需要符合北京时间需要手动处理对应的时间。

其他可能的用处

  • 将静态网页发布到 GitHub Pages
  • 自动部署你的代码到服务器
  • 执行定时任务获取天气信息
  • 执行定时任务给你的小宝贝聊天
  • 爬虫执行签到以及任务打卡

参考资料

  • 官方文档
  • GitHub Action 官方市场
  • GitHub Actions 入门教程 阮一峰