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文件
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文件
#基础镜像
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文件
#!/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】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💝💝💝!