最近接触了“持续集成”的概念,就是代码提交之后的自动化测试、打包、部署等工作,github actions就是一个持续集成的工具,给代码托管在github上的开源项目带来了便利。我的需求是依据多个markdown文档生成pdf文件,为了排版需要使用sphinx、pandoc以及LATEX环境,部署环境比较复杂,因此尝试使用github actions。
1. 查找可用的actions
很多常用的actions都被发布到官方的市场中了,另外,awesome-actions仓库也搜集了一些常用的actions。因为我的需求是比较特异的,不具普遍性,也比较简单,因此没有必要写一个新的actions,直接在别人的action基础上进行配置就好。
2. 写workflow 文件
2.2 设置触发器
workflow的触发事件,有两种方式:
1.用户的事件
每个push事件运行
1
2
|
name: descriptive-workflow-name
on: push
|
2.定时事件
最短的执行间隔为5分钟,以下为每小时执行一次
1
2
3
|
on:
schedule:
- cron: '0 * * * *'
|
详细的官方文档可参见Events that trigger workflows
本次项目为了避免重复构建,设置的触发事件为指定分支、指定目录文件的push
1
2
3
4
5
6
|
on:
push:
branches:
- master
paths:
- 'document/content/*'
|
2.2 选择 runner
2.2.1 指定单个runner
对于每一个job,需要制定运行的runner,可以选择github托管的runner或者自建的runner,github托管的runner有一下几种选择
虚拟环境 |
workflow标签 |
Windows Server 2019 |
windows-latest or windows-2019 |
Ubuntu 20.04 |
ubuntu-20.04 |
Ubuntu 18.04 |
ubuntu-latest or ubuntu-18.04 |
Ubuntu 16.04 |
ubuntu-16.04 |
macOS Catalina 10.15 |
macos-latest or macos-10.15 |
这里选择比较常见的ubuntu-latest
2.2.2 配置构建矩阵
有时候测试、编译等过程需要在不同的环境下进行,因此需要指定一个构建矩阵,具体实例如下:
1
2
3
4
5
|
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-16.04, ubuntu-18.04]
node: [6, 8, 10]
|
2.3 使用checkout action
checkout action是比较常用的标准action之一,job使用仓库代码的副本的时候需要这个action
1
|
- uses: actions/checkout@v2
|
2.4 引用操作
语法为{owner}/{repo}@{ref}
或 {owner}/{repo}/{path}@{ref}
3.总体项目
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
name: build docs PDF
on:
push:
branches:
- master
paths:
- 'document/content/**'
jobs:
build:
# 安装依赖
name: publish PDF
# This job runs on Linux
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.7'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
sudo apt-get update -y
sudo apt-get install -y latexmk texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended
sudo apt-get install texlive-xetex latex-cjk-all
sudo apt-get install pandoc
wget https://github.com/adobe-fonts/source-han-sans/raw/release/OTF/SourceHanSansSC.zip
wget https://github.com/adobe-fonts/source-han-serif/raw/release/OTF/SourceHanSerifSC_SB-H.zip
wget https://github.com/adobe-fonts/source-han-serif/raw/release/OTF/SourceHanSerifSC_EL-M.zip
unzip SourceHanSansSC.zip
unzip SourceHanSerifSC_EL-M.zip
unzip SourceHanSerifSC_SB-H.zip
sudo mv SourceHanSansSC SourceHanSerifSC_EL-M SourceHanSerifSC_SB-H /usr/share/fonts/opentype/
wget -O source-serif-pro.zip https://www.fontsquirrel.com/fonts/download/source-serif-pro
unzip source-serif-pro -d source-serif-pro
sudo mv source-serif-pro /usr/share/fonts/opentype/
wget -O source-sans-pro.zip https://www.fontsquirrel.com/fonts/download/source-sans-pro
unzip source-sans-pro -d source-sans-pro
sudo mv source-sans-pro /usr/share/fonts/opentype/
wget -O source-code-pro.zip https://www.fontsquirrel.com/fonts/download/source-code-pro
unzip source-code-pro -d source-code-pro
sudo mv source-code-pro /usr/share/fonts/opentype/
sudo fc-cache -f -v
- name: generate PDF
run: |
bash generatePDF.sh
bash generatePDF.sh en
- name: commit PDF
run: |
git config user.name github-actions
git config user.email [email protected]
git add *.pdf -f
git commit -m "Add changes"
git push -u origin master
|
参考
- GitHub Actions Documentation https://docs.github.com/en/actions
- GitHub Actions 入门教程 http://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html
- Github Marketplace https://github.com/marketplace?type=actions
- awesome-actions https://github.com/sdras/awesome-actions