【CICID】GitHub-Actions-SpringBoot项目部署
2024/7/15 23:02:44
本文主要是介绍【CICID】GitHub-Actions-SpringBoot项目部署,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
[TOC]
【CICID】GitHub-Actions-SpringBoot项目部署
0 流程图
1 创建SprinBoot项目
IDEA创建本地项目,然后推送到 Github
1.1 项目结构
1.2 Dockerfile文件
根据自身项目,修改
CMD ["java","-jar","/app/target/SprintBoot-Template-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
# Docker 镜像构建 FROM maven:3.5-jdk-8-alpine as builder # 指定工作目录 WORKDIR /app # 将文件复制到容器里 COPY pom.xml . COPY src ./src # 方案一:用本地打的包 # COPY target ./target # 方案二:容器内打包,并跳过测试用例 RUN mvn package -DskipTests # 启动服务 # -- 指定 application-prod.yml 启动 CMD ["java","-jar","/app/target/SprintBoot-Template-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
2 云服务器环境搭建
准备好自己购买的云服务,搭建环境
2.1 安装docker
安装教程:https://www.runoob.com/docker/centos-docker-install.html
2.2 获取IP、账号、密码
Github配置中使用
3 Github配置
3.1 配置密码
- REMOTE_SERVER01_IP : 云服务器地址
- REMOTE_SERVER01_PWD: 登录密码 (默认使用root角色)
3.2 创建Action
3.2 action代码
- jobs.build.env : 定义变量
- Host_IP: 远程服务器的地址
- Host_Dir : 远程服务器的存放目录
- Host_Role :远程服务器的账号
- Host_PWD :远程服务器的密码
- VERSION : 版本号
name: SpringBoot项目部署 on: # 当向分支进行git push时触发该工作流 push: branches: - "main" # 当向master分支合并分支时触发该工作流 pull_request: branches: - "main" # 工作流具体执行的任务 jobs: build: # 运行在虚拟机上,指定虚拟机及其版本 runs-on: ubuntu-latest env: # 端口号 Port: 8081 # 云服务地址 Host_IP: ${{secrets.REMOTE_SERVER01_IP}} # 路径 Host_Dir: "/cicd" # 账号 Host_Role: root # 云服务密码 Host_PWD: ${{secrets.REMOTE_SERVER01_PWD}} # 版本 VERSION : 0.1 steps: # 定义环境变量 - name: Define environment variables run: | # 定义全局变量 PROJECT_NAME=$(basename $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]') FILE_NAME=${PROJECT_NAME}-backend # 写入环境中 echo "PROJECT_NAME=$PROJECT_NAME" >> "$GITHUB_ENV" echo "FILE_NAME=$FILE_NAME" >> "$GITHUB_ENV" # 测试环境变量 - name: Use variable from environment run: | echo "================= env ============" echo "端口号:$Port" echo "仓库全名称:$GITHUB_REPOSITORY" echo ${GITHUB_REF##*/} echo "服务器地址: $Host_IP" echo "服务器密码: $Host_PWD" echo "服务器目录: $Host_Dir" echo "项目版本号: $VERSION" echo "================= GITHUB_ENV ============" echo "项目名称 (从环境变量): $PROJECT_NAME" echo "文件名称 (从环境变量): $FILE_NAME" # 拉取最新代码 - name: Pull latest code uses: actions/checkout@v3 # 使用官方的checkout action,用于将仓库中的最新代码检查并拉取到工作目录中 # 设置JDK版本 - name: Set up JDK 1.8 uses: actions/setup-java@v3 # 安装java环境的action with: java-version: '8.0' # 指定jkd版本 distribution: 'temurin' cache: maven # 使用maven缓存,避免每次构建项目时都要重新下载maven依赖 # 构建镜像 - name: Build docker image run: | docker build -t ${FILE_NAME}:${VERSION} . # 构建docker镜像,命令最后的点代表Dockerfile所在目录 docker save -o ${FILE_NAME}.tar ${FILE_NAME}:${VERSION} # 保存压缩后的docker镜像,这一步是为了方便后面我们将该镜像上传至指定的服务器 # 查看镜像文件大小 - name: Print file size run: | FILE_PATH="./${FILE_NAME}.tar" FILE_SIZE_MB=$(echo "scale=2; $(stat -c%s "$FILE_PATH") / (1024 * 1024)" | bc) # 生成文件大小 echo "Generated file size: $FILE_SIZE_MB MB" # 删除旧的docker镜像 - name: Delete old docker image uses: matheusvanzan/sshpass-action@v2 with: host: ${{env.Host_IP}} user: ${{env.Host_Role}} pass: ${{env.Host_PWD}} run: # 停止运行中的docker容器、删除该容器、删除镜像 docker stop ${{env.FILE_NAME}} || true && docker rm ${{env.FILE_NAME}} || true && docker rmi ${{env.FILE_NAME}}:${{env.VERSION}} || true # 删除旧的docker镜像压缩包 - name: Delete old docker tar uses: matheusvanzan/sshpass-action@v2 with: host: ${{env.Host_IP}} user: ${{env.Host_Role}} pass: ${{env.Host_PWD}} run: | echo "Attempting to delete ${{env.Host_Dir}}/${{env.FILE_NAME}}.tar" rm -rf ${{env.Host_Dir}}/${{env.FILE_NAME}}.tar # 上传新的docker镜像 - name: upload new docker image and start-up script run: sshpass -p ${Host_PWD} scp -r -o StrictHostKeyChecking=no ./${FILE_NAME}.tar ${Host_Role}@${Host_IP}:${Host_Dir} # 加载tar文件,加载docker镜像 - name: Load new docker image uses: matheusvanzan/sshpass-action@v2 with: host: ${{env.Host_IP}} user: ${{env.Host_Role}} pass: ${{env.Host_PWD}} run: docker load -i ${{env.Host_Dir}}/${{env.FILE_NAME}}.tar # docker run 运行,启动容器 - name: Run project uses: matheusvanzan/sshpass-action@v2 with: host: ${{env.Host_IP}} user: ${{env.Host_Role}} pass: ${{env.Host_PWD}} run: docker run -d -p ${{env.Port}}:8080 --name ${{env.FILE_NAME}} ${{env.FILE_NAME}}:${{env.VERSION}}
4 触发
-
Push 触发
代码push到Github时,自动触发
-
手动触发
5 效果
5.1 查看Action信息
执行成功,若执行失败点进去可以看报错信息
5.3 云服务器
5.3.1 登录服务器,查看docker
- 查看docker镜像:
docker images
- 查看docker容器:
docker ps -a
5.3.2 页面访问
6 参考文档
-
免费使用 GitHub Actions 自动打包部署 Spring Boot 项目到服务器
https://blog.imzjw.cn/posts/d347d656/index.html#前言
-
github actions实现CICD
https://blog.csdn.net/m0_68377725/article/details/132033543 -
使用 GitHub Actions 自动构建部署发布 Spring Boot 应用
https://blog.ning.moe/posts/gitub-actions/index.html
这篇关于【CICID】GitHub-Actions-SpringBoot项目部署的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-07面向对象编程基础:初学者指南
- 2024-09-07数据结构入门:了解基础概念与简单应用
- 2024-09-07面向对象编程入门:掌握基本概念与实践
- 2024-09-07数据结构入门:从基础概念到基本操作
- 2024-09-07从零开始学数据库:入门级指南与实操技巧
- 2024-09-07综合设备故障分析与预防:实例代码与优化策略
- 2024-09-07数据库入门:轻松掌握数据管理基础
- 2024-09-07面向对象入门:快速掌握对象编程基础
- 2024-09-07数据库教程:入门与实践指南
- 2024-09-07面向对象开发教程 - 从零基础到实践应用的进阶之路