後端代碼提交後,自動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/"
複製代碼