后端代码提交后,自动build(使用gradle)打包并将新的可执行jar包部署到指定服务器前端
在项目根目录的.github/workflows
目录下写以下文件gradle_build.yaml
vue
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 & 复制代码
注意事项java
gradlew
因此能够事先在本地环境中,尝试使用gradlew
构建项目,保证配置没有错误,而且应将gradlew
可执行脚本加入到git库中gradlew
配置项目时会在根目录生成gradle/wrapper
目录,其中有gradle-wrapper.jar
和gradle-wrapper.properties
两个文件,要将此目录加入到git库中gradle/wrapper/gradle-wrapper.properties
配置文件复制到项目根目录中,并加入到git库中,保证gradle配置生效Settings
选项界面的Secret
界面中点击New repository secret
添加配置信息,名字就是yaml文件中使用的配置属性名nohup bin/dockerhub &
,GitHub Actions的执行流程会卡顿在此处前端代码(Vue项目)提交后,自动打包并将新包部署到指定服务器node
在项目根目录的.github/workflows
目录下写以下文件vue_build.yaml
git
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/"
复制代码