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


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

    前言

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

    一、自动化部署

    1.1 提交代码到Github

    back-project

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

    secretvalueremark
    DOCKER_HUB_ACCESS_TOKEN1234567890dockerhub账号私钥
    DOCKER_HUB_USERNAMEbubaiwantongdockerhub账号
    SERVER_HOST127.0.0.1服务器IP地址
    SERVER_PASSWORD1234567890服务器密码
    SERVER_PORT22服务器开放端口
    SERVER_PRIVATE_KEY1234567890服务器私钥
    SERVER_USERNAMEroot服务器账号
    TOKEN1234567890Github的Token
    1.2.1 设置服务器密钥

    设置服务器密钥

    1.2.2 设置Github私钥

    设置Github私钥-图1

    设置Github私钥-图2

    设置Github私钥-图3

    设置Github私钥-图4

    1.2.3 设置DockerHub账号

    设置DockerHub账号

    1.3 新增工作流文件

    maven.yml

    maven.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
    • 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
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68

    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
    • 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

    1.5 编写服务器启动脚本

    start.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 -
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    2.7 开启自动化部署

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

    Github Actions

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

    网站首页

    三、写在最后

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

  • 相关阅读:
    微软云计算Windows Azure(二)
    web开发
    docker使用filebeat+elk采集日志
    欧拉计划详解第323题:随机整数按位或运算
    黑马SpringBoot 基础篇12-28
    产品经理如何独立从0-1着手甲方项目,或者负责一个产品?
    过滤器和拦截器的区别
    【Spring】更简单的读取和存储对象
    【ShaderLab 碎片边境美式卡通角色_“ospreycaptain“_角色渲染(第三篇)】
    【编程之路】面试必刷TOP101:链表(11-16,Python实现)
  • 原文地址:https://blog.csdn.net/weixin_46294086/article/details/133967079