什么是持续集成
- 代码开发 -> 代码提交 -> 服务器编译、测试、打包 -> 服务器部署(大规模部署用 docker)
- 上面这套流程中除了前两个,其他的都自动执行,就是CI(持续集成)。
什么是GitHub Actions
- GitHub Actions 是 GitHub 推出的持续集成服务,于 2018 年 10 月推出。
- 之前是怎么做的:通过Webhook接入Jenkins
- 现在更方便:Github直接提供服务器帮忙做编译、测试、打包的工作,不需要额外搭建CI了
- 每一个操作都是一个action,很多操作叠加起来就是很多的actions
- 本质上就是每次提交代码到github仓库后,github会自动创建一个虚拟机(可以是Ubuntu、Mac、Windows),来执行一段或者多段指令。
- 切换到 Action 选项板可以看到很多workflow的模板。
Github Actions的使用限制
- 每个 Workflow 中 job 最多可以执行6个小时
- 每个 Workflow 中最多可以执行72小时
- 每个 Workflow 中的 job 最多可以排队24小时
- 在一个github库中的所有Action中,一个小时最多可以执行1000个API的请求
- 并发工作数: Linux 20,Mac: 5
- 硬件限制:目前Github只支持3类操作系统(Ubuntu、Mac、Windows),配置如下
(1)2 core CPUs
(2)7 GB of RAM memory
(3)14GB of SSD disk space
Actions市场
自己编写Action
name: my_nam # 根据自己需求命名
on: # 表示触发条件,比如当代码push到master分支的时候触发,则
push: # 这里代表单个事件,也可以写成 [push, workflow_dispatch] 多个事件
branches:
- master
pull_request: # 也可以新增单个事件
branches:
- main
jobs: # 表示实际需要执行的工作,比如下面的例子代表使用Ubuntu执行构建工作,执行步骤上使用了appleboy/ssh-action这个仓库的能力
build:
name: Build
runs-on: ubuntu-latest
steps: # 每个job由多个step构成,会从上到下依次执行
- name: executing remote ssh commands using password # 步骤名
uses: appleboy/ssh-action@master # 引用其他的workflows文件
举个例子:跑起来Actions只是为了单纯打印一句话
name: Test
on:
push:
branches:
- develop
pull_request:
branches:
- develop
jobs:
my-job:
name: Greeting for PARL
runs-on: ubuntu-latest
steps:
- name: Print a greeting
env:
MY_VAR: Hi there! My name is
FIRST_NAME: Hello world
run: |
echo $MY_VAR $FIRST_NAME
举个例子:push后让代码执行单测
name: CI
on: push
jobs:
ci:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
run: |
rm -rf ${{github.event.repository.name}}
git clone https://${{github.repository_owner}}:${{github.token}}@github.com/${{github.repository}}
git -C "${{github.workspace}}/${{github.event.repository.name}}" checkout ${{github.ref}}
- name: Python unittest
run: |
python3 -m venv venv
source venv/bin/activate
cd ${{github.event.repository.name}}
pip3 install -r requirements.txt
pre-commit run -a
python3 -m unittest discover -v
- name: Cleanup
run: |
rm -rf venv
rm -rf ${{github.event.repository.name}}
举个例子:push后自动登录自己的服务器,编译打包
name: remote ssh command
on:
push:
branches:
- master
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: executing remote ssh commands using password
uses: appleboy/ssh-action@master
with: # 根据文件的说明,添加所需的配置参数:从这里开始因为涉及登录账号密码,可以在 settings->secrets 里配置下面的变量,不会被泄露出去
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
command_timeout: 5m
script: | # 登录完成之后会连续执行这里的命令
cd ~/test
git pull origin master
yarn
yarn build
进阶配置
- 可以使用matrix并发的在不同的配置或者操作系统中执行单测。详见Matrix配置项
-
接收用户输入:可以等用户输入一个关键的信息,再执行整个流程。
- Nightly 构建:用户指定任何重复任务的触发时间,比如每天凌晨两点执行任务如下所示:
on:
schedule:
- cron: '0 18 * * *'
网友评论