Skip to content

GitHub Actions

· 3 min

是什么?#

GitHub 推出的持续集成 (Con­tin­u­ous in­te­gra­tion,简称 CI) 服务,它提供了配置非常不错的虚拟服务器环境,基于它可以进行构建、测试、打包、部署项目。

github 利用仓库下的配置文件,根据配置文件的触发时机(例如:push、pull requests)执行配置文件的流程(例如:打包、部署)。

配置文件#

基本概念#

workflows(工作流程):续集成一次运行的过程,就是一个 workflow。 job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。 step(步骤):每个 job 由多个 step 构成,一步步完成。 action (动作):每个 step 可以依次执行一个或多个命令(action)。

workflow 文件#

位置:存放在代码仓库的 .github/workflows 目录。

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

name: Demo # workflow 的名称,默认为文件名。
on: push # 触发时机,例如:push。多个是为[push, pull_request]
on:
push:
branches:
- master # 限制触发分支
jobs:
job1:
name: 任务说明
runs-on: ubuntu-latest # 运行环境,具体选项可根据 github 提供配置的填写 https://docs.github.com/cn/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources
steps:
- name: Print a greeting
env: # 注入四个环境变量
MY_VAR: Hi there! My name is
FIRST_NAME: Mona
MIDDLE_NAME: The
LAST_NAME: Octocat
run: |
echo $MY_VAR $FIRST_NAME $MIDDLE_NAME $LAST_NAME.
job2:
needs: job1
job3:
needs: [job1, job2] # 运行顺序,job1 > job2 > job3

node

name: qa build and upload
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3 # 拉取代码
- uses: actions/setup-node@v3 # 设置 node
with:
node-version: 16
cache: "npm"
- run: npm install && rm -rf ./dist && npm run build:qa
- name: copy file
uses: appleboy/scp-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
port: ${{ secrets.PORT }}
key: ${{ secrets.KEY }}
source: "dist"
rm: true
target: "/home/lane/qa-lane-web"

java

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3 # 拉取代码
- name: Set up JDK 8
uses: actions/setup-java@master
with:
java-version: 8
distribution: 'adopt'
cache: maven
- name: Build with Maven # 打包命令
run: mvn clean package --file pom.xml
- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
script: |
whoami
ls -all

参考#

GitHub Actions 入门教程 https://www.ruanyifeng.com/blog/2019/09/getting-started-with-github-actions.html Github Action https://github.com/features/actions 官方中文文档 https://docs.github.com/cn/actions/using-workflows/about-workflows