如何使用 GitHub 的 Actions 实现项目的 CI/CD

如何使用 GitHub 的 Actions 实现项目的 CI/CD

GitHub 的 actions,提供了一整套的任务流,能够帮助我们实现项目的自动自动测试和自动部署。本篇主要是将我使用 github 的 actions 实现项目的自动部署,其中项目主要是 java + vue

Java 项目部署

环境依赖

1、jdk
2、maven
3、ssh

操作过程

1 创建项目(省略)

2 添加 workflow 文件

在项目的根目录下,创建 .github/workflows 文件夹
新建 build.yml 文件

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
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven

name: Build Ci # 流名称

on:
push:
branches: [ master ] # 目标分支
pull_request:
branches: [ master ]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2 # JDK 环境
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Cache Maven packages # maven 缓存
uses: actions/cache@v1
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Maven Build # build 打包
run: mvn -B package -DskipTests --file pom.xml
- name: Deploy to server # 发布到服务器上
uses: easingthemes/ssh-deploy@v2.1.2
env:
SSH_PRIVATE_KEY: ${{ secrets.DEV_TOKEN }}
ARGS: "-avz --delete"
REMOTE_HOST: ${{ secrets.DEV_HOST }}
REMOTE_USER: ${{ secrets.DEV_USER }}
SOURCE: target/wkserver-0.0.1-SNAPSHOT.jar
TARGET: /home/yiliaofeiwu
- name: Restart server # 执行部署后的命令
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.DEV_HOST }}
username: ${{ secrets.DEV_USER }}
key: ${{ secrets.DEV_TOKEN }}
script: |
nohup sh /home/yiliaofeiwu/reload.sh

其中 REMOTE_HOSTREMOTE_USERSSH_PRIVATE_KEY 为服务器相关配置,使用 github 的secrets 配置。[项目]->[setting]->[secrets] 进行配置

Vue 项目部署

环境依赖

1、nodejs
2、ssh

操作过程

1 创建项目(省略)

2 添加 workflow 文件

在项目的根目录下,创建 .github/workflows 文件夹
新建 build.yml 文件

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
name: deploy web

on:
push:
branches:
- master

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: use Node.js 10
uses: actions/setup-node@v1
with:
node-version: 10
- name: npm install and build
run: |
npm install
npm run build
# 部署到腾讯云服务器
- name: Deploy to Server
uses: easingthemes/ssh-deploy@v2.0.7
env:
SSH_PRIVATE_KEY: ${{ secrets.DEV_TOKEN }}
ARGS: "-avz --delete"
REMOTE_HOST: ${{ secrets.DEV_HOST }}
REMOTE_USER: ${{ secrets.DEV_USER }}
SOURCE: dist/
TARGET: /home/wuyuan