Github Actions
Github Actions 你可以认为是 SaaS
您可以配置 GitHub Actions 工作流,使其在代码仓库中发生特定事件时触发,例如创建拉取请求或议题。
您的工作流包含一个或多个作业,这些作业可以按顺序或并行运行。
每个作业都将在其自身的虚拟机运行器或容器中运行,并包含一个或多个步骤。
这些步骤可以运行您定义的脚本或运行** Action**(一种可重用的扩展,可以简化您的工作流)。
每次工作流运行都会在一个全新的、新配置的虚拟机中执行。(运行器是一台服务器,它会在工作流被触发时运行这些工作流。每个运行器一次只能运行一个作业)
工作流在何时触发?on
当向工作流存储库中的任何分支推送代码时,具有以下值的工作流将运行:
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]工作在什么机器上运行? runs-on
jobs:
test:
runs-on: ubuntu-latest备注:公开仓库的 actions 无限制使用,4 核 16GB;私有仓库的有限制,2 核 7GB
创建作业?
jobs:
my_first_job:
name: My first job
my_second_job:
name: My second job
needs: my_first_job # 依赖matrix(矩阵)?
是一种在单个工作中运行多个配置的策略,如测试多个 python 版本
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [10, 12, 14]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }} on ${{ matrix.os }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm test这里一共 6 个作业
预制动作?
为了避免一些重复性的工作,github actions 利用 uses+actions 来提供统一的预定的动作
比如将你的代码拉取到执行器上,或者按照 python 环境等等
检出?
如何确保执行器上有你的代码呢?
你需要
steps:
- uses: actions/checkout@v4安装 python
uses: actions/setup-python@v4Codecov ?
它是一个 SaaS 软件即服务
它衡量的是你的测试实际执行了代码的多少百分比
支持多语言,GUI 界面,覆盖率比较(避免因懒惰而不写测试)
我这里最终成功的如下:
name: My CI/CD Learn Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run unit tests with coverage
run: |
python -m pytest tests/test_calculator.py -v --cov=src --cov-report=xml
- name: Run API tests
run: |
python -m pytest tests/test_api.py -v
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
file: ./coverage.xml
flags: unittests
name: codecov-umbrellaJenkins(传统 CI 先驱)是自己管理维护的 Github Actions( 2019 年云原生时代产物)
用 Groovy 脚本编排流程
Groovy 是一个运行在 JVM 上的动态语言
Groovy 可无缝调用 Java 库,Java 也可调用 Groovy 代码(需编译)