由于学习上的需要,我需要不断对GitHub上的分支进行合并与持续向远端推送。虽然手动操作并不难,但次数较多时,自动化部署功能显得尤为必要。本文将介绍如何利用GitHub Actions实现Spring Boot程序的持续部署。
Actions基本使用方法
基本概念
字段解释
runs-on
选择执行环境,目前支持的环境包括:
ubuntu-latest
windows-latest
macos-latest
uses
调用GitHub市场中的预定义脚本。例如:
1
| uses: actions/checkout@v4
|
使用Actions将Java程序部署到远程服务器上
使用Maven打包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| name: Java CI with Maven on: push: branches: ["main"] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 8 uses: actions/setup-java@v4 with: java-version: '8' distribution: 'temurin' cache: maven - name: Build with Maven run: mvn -B clean package --file ./Blog-api/pom.xml
|
远程推送Java包到远程服务器
使用easingthemes/ssh-deploy插件:
1 2 3 4 5 6 7 8 9
| - name: deploy uses: easingthemes/ssh-deploy@v2.1.1 env: SSH_PRIVATE_KEY: ${{ secrets.ACCESS_TOKEN }} ARGS: "-avzr --delete" SOURCE: "Blog-api/target/Blog-api-0.0.1-SNAPSHOT.jar" REMOTE_HOST: ${{ secrets.REMOTE_HOST }} REMOTE_USER: ${{ secrets.REMOTE_USER }} TARGET: ${{ secrets.TARGET }}
|
在远程服务器上部署
使用appleboy/ssh-action插件执行命令:
1 2 3 4 5 6 7 8
| - name: deploy1 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.ACCESS_TOKEN }} script: | /home/traveller/config/replayjar
|
最终呈现
完整的workflow配置文件如下:
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
| name: Java CI with Maven on: push: branches: ["main"] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up JDK 8 uses: actions/setup-java@v4 with: java-version: '8' distribution: 'temurin' cache: maven - name: Build with Maven run: mvn -B clean package --file ./Blog-api/pom.xml - name: deploy uses: easingthemes/ssh-deploy@v2.1.1 env: SSH_PRIVATE_KEY: ${{ secrets.ACCESS_TOKEN }} ARGS: "-avzr --delete" SOURCE: "Blog-api/target/Blog-api-0.0.1-SNAPSHOT.jar" REMOTE_HOST: ${{ secrets.REMOTE_HOST }} REMOTE_USER: ${{ secrets.REMOTE_USER }} TARGET: ${{ secrets.TARGET }} - name: deploy1 uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.ACCESS_TOKEN }} script: | /home/traveller/config/replayjar
|