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】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💝💝💝!

相关推荐
CoderJia程序员甲12 分钟前
重学SpringBoot3-Spring Retry实践
java·spring boot·spring·retry·重试机制
《源码好优多》20 分钟前
基于Java Springboot未央商城管理系统
java·开发语言·spring boot
捂月1 小时前
Spring Boot 核心逻辑与工作原理详解
java·spring boot·后端
Nightselfhurt1 小时前
RPC学习
java·spring boot·后端·spring·rpc
苹果醋31 小时前
vue3 在哪些方便做了性能提升?
java·运维·spring boot·mysql·nginx
荆州克莱2 小时前
Vue3 源码解析(三):静态提升
spring boot·spring·spring cloud·css3·技术
弗拉唐9 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
2401_8576100310 小时前
SpringBoot社团管理:安全与维护
spring boot·后端·安全
凌冰_10 小时前
IDEA2023 SpringBoot整合MyBatis(三)
spring boot·后端·mybatis