Mrli
别装作很努力,
因为结局不会陪你演戏。
Contacts:
QQ博客园

GithubActions

2020/11/12 小白文
Word count: 1,383 | Reading time: 6min

GitHub Actions 是 GitHub 的持续集成服务,于2018年10月推出

GitHub Actions 是什么?

大家知道,持续集成由很多操作组成,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。GitHub 把这些操作就称为 actions。

很多操作在不同项目里面是类似的,完全可以共享。GitHub 注意到了这一点,想出了一个很妙的点子,允许开发者把每个操作写成独立的脚本文件,存放到代码仓库,使得其他开发者可以引用。

如果你需要某个 action,不必自己写复杂的脚本,直接引用他人写好的 action 即可,整个持续集成过程,就变成了一个 actions 的组合。这就是 GitHub Actions 最特别的地方。

GitHub 做了一个官方市场,可以搜索到他人提交的 actions。另外,还有一个 awesome actions 的仓库,也可以找到不少 action。

基础名词概念

GitHub Actions 有一些自己的术语。
(1)workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
(2)job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
(3)step(步骤):每个 job 由多个 step 构成,一步步完成。
(4)action (动作):每个 step 可以依次执行一个或多个命令(action)。

GitHub Actions阮一峰

具体内容说明:

  • name自动构建的名字
  • on触发条件
    • watch监视
      • type:started 类型:点击了星标
    • 可以是数组: [push, pull_request]
  • env环境变量
  • jobs任务
  • build工作的id
  • run-on工作运行的环境平台
  • if工作运行的判断
  • steps 包含一系列任务步骤
    • name子任务名
    • uses 使用官方的一些action库完成一些操作
    • run 运行脚本
    • id运行id

workflow 文件

GitHub Actions 的配置文件叫做 workflow 文件,存放在代码仓库的.github/workflows目录。

workflow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为.yml,比如foo.yml。一个库可以有多个 workflow 文件。GitHub 只要发现.github/workflows目录里面有.yml文件,就会自动运行该文件。


综上, Github actions配合GithubPages会非常方便

什么是 GitHub Pages?

打开 GitHub Pages 的首页我们会看到如下图所示:
他可以当做你或者你的项目的 Websites,那么我们可以知道 GitHub Pages 有两种最基本的用法:

  1. 作为你自己(或者组织)的网站(访问地址示例:http://username.github.io
  2. 作为你某一个项目的网站(访问地址示例:http://username.github.io/projectname
  3. 由于性能不太好, 因此最主要的用途是作为部署静态网页, 给demo展示: 做 demo 展示不同于做项目开发, 我们需要的是快速轻便的开发和部署, 而不是完备的一整套开发流程.

Github pages 的好处

  1. 使用零成本: github pages 集成在 github 中, 直接和代码管理绑定在一起, 随着代码更新自动重新部署, 使用非常方便.
  2. 免费: 免费提供 username.github.io 的域名, 免费的静态网站服务器.
  3. 无数量限制: github pages 没有使用的数量限制, 每一个 github repository 都可以部署为一个静态网站.

workflowDemo

官方demo

默认的生成模板: 会在仓库的./github/workflows目录下创建一个.yml的文件

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
# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the main branch
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"——任务名
build:
# The type of runner that the job will run on
# To set the operating system for your job, specify the operating system using runs-on: ubuntu-latest, ubuntu-18.04, or ubuntu-16.04、windows-latest or windows-2019、macos-latest or macos-10.15
runs-on: ubuntu-latest

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
# 检出, 将代码从代码库中拉下来, 然后复制到本地的虚拟机上
- uses: actions/checkout@v2

# Runs a single command using the runners shell
# 给操作——run, 起个操作名——name
- name: Run a one-line script
run: echo Hello, world!

# Runs a set of commands using the runners shell
- name: Run a multi-line script
run: |
echo Add other actions to build,
echo test, and deploy your project.

BiliBiliTool的workflow

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
name: bilibili-daily-task


on:

push: # push触发
branches: [ main ]
workflow_dispatch: # 手动触发
schedule: # 计划任务触发
- cron: '10 6 * * *' # cron表达式,Actions时区是UTC时间,所以要往前推8个小时,如上表示每天14点10分


jobs:
run-bilibili-tool:

runs-on: ubuntu-latest

steps:

# 检出
- name: Checkout
uses: actions/checkout@v2

# 设置服务器时区为东八区
- name: Set time zone
run: sudo timedatectl set-timezone 'Asia/Shanghai'

# .Net Core 环境
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.301

# 安装依赖
- name: Install dependencies
run: dotnet restore

# 构建应用
- name: Build
run: dotnet build --configuration Release --no-restore

# 运行
- name: Run
# env是从仓库settings的secrets中取值
env:
userId: ${{secrets.USERID}}
sessData: ${{secrets.SESSDATA}}
biliJct: ${{secrets.BILIJCT}}
otherConfigs: ${{secrets.OTHERCONFIGS}}
run: dotnet run -p ./src/Ray.BiliBiliTool.Console -userId=${userId} -sessData=${sessData} -biliJct=${biliJct} -closeConsoleWhenEnd=1 ${otherConfigs}

Author: Mrli

Link: https://nymrli.top/2020/11/12/GithubAction/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
JupyterHub搭建
NextPost >
南邮校园网CSDN等部分网站图片无法加载解决方案
CATALOG
  1. 1. GitHub Actions 是什么?
  2. 2. 基础名词概念
  3. 3. workflow 文件
  4. 4. workflowDemo
    1. 4.1. 官方demo
    2. 4.2. BiliBiliTool的workflow