Github Actions实现Spring Boot自动化部署(第二弹)

Github Actions实现Spring Boot自动化部署(第二弹)

前言

​ 今天就来讲述一下如何使用GitHub结合Actions实现Spring Boot程序从提交代码到打包、容器化、部署全过程自动化。首先咱们得现有一个能够在本地运行的Spring Boot程序,并且在Github上拥有一个仓库。

一、自动化部署

1.1 提交代码到Github

1.2 设置服务器密钥、GitHub私钥、DockerHub账号

secret value remark
DOCKER_HUB_ACCESS_TOKEN 1234567890 dockerhub账号私钥
DOCKER_HUB_USERNAME bubaiwantong dockerhub账号
SERVER_HOST 127.0.0.1 服务器IP地址
SERVER_PASSWORD 1234567890 服务器密码
SERVER_PORT 22 服务器开放端口
SERVER_PRIVATE_KEY 1234567890 服务器私钥
SERVER_USERNAME root 服务器账号
TOKEN 1234567890 Github的Token
1.2.1 设置服务器密钥
1.2.2 设置Github私钥
1.2.3 设置DockerHub账号

1.3 新增工作流文件

maven.yml文件

yml 复制代码
name: Deploy with docker

on:
  push:
    # 分支
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]

jobs:
  compile:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up JDK 21
        uses: actions/setup-java@v2
        with:
          java-version: '21'
          distribution: 'adopt'
      # maven缓存,不加的话每次都会去重新拉取,会影响速度
      - name: Dependies Cache
        uses: actions/cache@v2
        with:
          path: ~/.m2/repository
          key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
          restore-keys: |
            ${{ runner.os }}-maven-
      # 编译打包
      - name: Build with Maven
        run: |
          mvn package -Dmaven.test.skip=true
      # 登录Docker Hub
      - name: Login to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v1
      #build镜像并push到中央仓库中
      - name: Build and push
        id: docker_build
        uses: docker/build-push-action@v2
        with:
          context: ./
          file: ./Dockerfile
          push: true
          tags: ${{secrets.DOCKER_HUB_USERNAME}}/back:latest
  
      #push后,用ssh连接服务器执行脚本
      - name: SSH
#        uses: fifsky/ssh-action@master
        uses: appleboy/ssh-action@master
        with:
#          command: |
#            cd /develop/work/education-back-server
#            sh start.sh
          host: ${{secrets.SERVER_HOST}}
          username: ${{secrets.SERVER_USERNAME}}
          port: ${{secrets.SERVER_PORT }}
#          key: ${{secrets.SERVER_PRIVATE_KEY}}
          password: ${{secrets.SERVER_PASSWORD}}
          script:
            sh /develop/work/education-back-server/start.sh
#            sh start.sh

1.4 新增Dockerfile文件

Dockerfile文件

dockerfile 复制代码
#基础镜像
FROM bubaiwantong/openjdk:21-jdk-alpine

#安装字体
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/* && mkfontscale && mkfontdir && fc-cache
RUN apk add --update ttf-dejavu fontconfig && rm -rf /var/cache/apk/*

#添加文件
ADD education-back/target/back-0.0.1-SNAPSHOT.jar /usr/local
RUN chmod u+x /usr/local/back-0.0.1-SNAPSHOT.jar

#设置时区
RUN rm -f /etc/localtime \
&& ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone

#挂载目录到容器
#VOLUME ["/data"]
#环境变量设置
#ENV #开放端口
EXPOSE 8088
#启动时执行的命令
CMD ["/bin/bash"]
#启动时执行的命令
ENTRYPOINT ["java","-jar","/usr/local/back-0.0.1-SNAPSHOT.jar"]

1.5 编写服务器启动脚本

start.sh文件

sh 复制代码
#!/bin/bash
docker pull bubaiwantong/back:latest

docker tag docker.io/bubaiwantong/back:latest back:latest

docker stop back

docker rm back

docker run --name back -p 8088:8088 -d back:latest

docker image prune -

2.7 开启自动化部署

提交代码到master ,在GitHub 中的Actions即可发现项目正在自动化部署

在浏览器地址栏打开网站首页 就可以发现自动化部署成功啦!

三、写在最后

如果这篇【文章】有帮助到你,希望可以给【JavaGPT】点个赞👍,创作不易,如果有对【后端技术 】、【前端领域 】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【JavaGPT】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💝💝💝!

相关推荐
松哥_ai自动化1 小时前
从抓包GitHub Copilot认证请求,认识OAuth 2.0技术
github·copilot
fouryears_234177 小时前
Spring,Spring Boot 和 Spring MVC 的关系以及区别
java·spring boot·spring·mvc
庸子8 小时前
Ansible & AWX 自动化运维
运维·自动化·ansible
板板正8 小时前
SpringAI——提示词(Prompt)、提示词模板(PromptTemplate)
java·spring boot·ai·prompt
板板正8 小时前
SpringAI——对话记忆
java·spring boot·ai
吗喽1543451889 小时前
用python实现自动化布尔盲注
数据库·python·自动化
qianmoQ9 小时前
GitHub 趋势日报 (2025年07月15日)
github
handsomestWei9 小时前
GitHub Jekyll博客本地Win开发环境搭建
github·jekyll·blog博客·windows开发环境
皮皮林5519 小时前
为什么 SpringBoot 宁可挨骂也要干掉 spring.factories?
spring boot
ii_best9 小时前
解锁 iOS 按键精灵辅助工具自动化新可能:iOSElement.Click 让元素交互更简单
运维·自动化