什么是持續集成
- 代碼開發 -> 代碼提交 -> 服務器編譯、測試、打包 -> 服務器部署(大規模部署用 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 * * *'