0%

GitHub Actions使用案例

后端

后端代码提交后,自动build(使用gradle)打包并将新的可执行jar包部署到指定服务器

实现

在项目根目录的.github/workflows目录下写如下文件gradle_build.yaml

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
57
58
59
60
61
62
63
name: Java CI with Gradle
# 设置触发条件
# 1. 对main分支执行push操作或者pull request操作时触发
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
# CI/CD 任务流程
jobs:
build:
# 指定构建容器环境
runs-on: ubuntu-latest
steps:
# 1:下载源码(拉取代码到构建容器中)
- name: Checkout
uses: actions/checkout@master
# 2. 设置Java环境
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
# 3. 设置gradlew执行权限
- name: Grant execute permission for gradlew
run: chmod +x gradlew
# 4. 缓存构建缓存
- name: Cache Gradle packages
uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
# 5. 项目构建
- name: Build with Gradle
run: ./gradlew build -x test
# 6. 部署到服务器
- name: Copy file via scp
uses: appleboy/scp-action@master
env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
PORT: ${{ secrets.PORT }}
KEY: ${{ secrets.SSHKEY }}
with:
source: "build/libs/dockerhub-1.0.1.jar"
target: "/opt/dockerhub-1.0.1/temp"
# 7. 重启服务
- name: Deploy
uses: appleboy/ssh-action@master # 使用ssh链接服务器
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSHKEY }}
port: ${{ secrets.PORT }}
script: |
mv /opt/dockerhub-1.0.1/temp/build/libs/dockerhub-1.0.1.jar /opt/dockerhub-1.0.1/lib/
rm -rf /opt/dockerhub-1.0.1/temp
cd /opt/dockerhub-1.0.1/
jps |grep DockerHubService | awk '{print $1}' | xargs kill -9
nohup bin/dockerhub > nohup.out 2> nohup.err < /dev/null &

注意事项

  1. 要在项目根目录使用gradlew所以可以事先在本地环境中,尝试使用gradlew构建项目,保证配置没有错误,并且应将gradlew可执行脚本加入到git库中
  2. 使用gradlew配置项目时会在根目录生成gradle/wrapper目录,其中有gradle-wrapper.jargradle-wrapper.properties两个文件,要将此目录加入到git库中
  3. gradle/wrapper/gradle-wrapper.properties配置文件复制到项目根目录中,并加入到git库中,保证gradle配置生效
  4. 在第6、7步骤中,需要远程连接到指定的部署服务器,需要在GitHub项目界面中的Settings选项界面的Secret界面中点击New repository secret添加配置信息,名字就是yaml文件中使用的配置属性名
  5. 第6步骤中需要注意,会将source的目录结构复制到target指定的文件夹中,所以放到一个临时文件夹中
  6. 步骤7中,将目的jar包移动到目的目录。删除临时文件夹,重启服务,注意nohup指令,如果只是写作nohup bin/dockerhub &,GitHub Actions的执行流程会卡顿在此处

前端

前端代码(Vue项目)提交后,自动打包并将新包部署到指定服务器

实现

在项目根目录的.github/workflows目录下写如下文件vue_build.yaml

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
name: VUE-CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@master
- name: set up node env
uses: actions/setup-node@master
- name: Installing project dependencies
run: yarn
- name: Building the project
run: npm run build
# 使用ssh链接服务器,清空旧的部署
- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSHKEY }}
port: ${{ secrets.PORT }}
script: |
rm -rf /opt/dvclab/
mkdir -p /opt/dvclab/
# 拷贝打包好的文件
- name: Copy file via scp
uses: appleboy/scp-action@master
env:
HOST: ${{ secrets.HOST }}
USERNAME: ${{ secrets.USERNAME }}
PORT: ${{ secrets.PORT }}
KEY: ${{ secrets.SSHKEY }}
with:
source: "./dist/"
target: "/opt/dvclab/"