使用 GitHub Actions 实现 Spring Boot 项目打包并推送至阿里云镜像仓库
GitHub Actions 配置文件
在项目根目录下创建 .github/workflows/docker-publish.yml 文件,内容如下:
# 此工作流用于构建 Spring Boot 项目并推送 Docker 镜像至阿里云容器镜像服务
# 更多信息请参考:https://docs.github.com/en/actions
name: 构建并推送至阿里云容器镜像
# 触发条件:推送到 master 分支或创建 v 开头的标签时触发,同时监控 master 分支的拉取请求
on:
push:
branches: [ master ]
tags: [ 'v*' ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 登录阿里云容器镜像服务
uses: aliyun/acr-login@v1
with:
login-server: ${{ secrets.ALIYUN_ACR_REGISTRY }} # 示例:registry.cn-beijing.aliyuncs.com
username: ${{ secrets.ALIYUN_ACR_USERNAME }}
password: ${{ secrets.ALIYUN_ACR_PASSWORD }}
- name: 构建并推送 Docker 镜像
env:
ACR_REGISTRY: ${{ secrets.ALIYUN_ACR_REGISTRY }}
ACR_NAMESPACE: ${{ secrets.ALIYUN_ACR_NAMESPACE }} # 命名空间
DOCKER_VERSION: latest
IMAGE_NAME: thrive-blog # 镜像名称
run: |
# 构建镜像
docker build -t $ACR_REGISTRY/$ACR_NAMESPACE/$IMAGE_NAME:$DOCKER_VERSION .
# 推送镜像至仓库
docker push $ACR_REGISTRY/$ACR_NAMESPACE/$IMAGE_NAME:$DOCKER_VERSION
- name: 连接服务器并部署应用
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.REMOTE_HOST }}
username: ${{ secrets.REMOTE_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: 22
script: |
echo "开始执行服务器部署命令"
# 停止并移除旧容器
docker stop thrive-blog || true
docker rm thrive-blog || true
# 清理旧镜像并拉取最新镜像
docker rmi registry.cn-chengdu.aliyuncs.com/thrivex-blog/thrive-blog:latest || true
docker pull registry.cn-chengdu.aliyuncs.com/thrivex-blog/thrive-blog:latest
# 使用 Docker Compose 重新部署应用
cd /root/thrive-blog
docker-compose up -d
echo "服务器部署完成"
配置说明
分支配置:请根据实际项目需求调整监控的分支名称
ALIYUN_ACR_REGISTRY:阿里云容器镜像服务地址,例如:registry.cn-beijing.aliyuncs.com
ALIYUN_ACR_USERNAME:阿里云账号用户名
ALIYUN_ACR_PASSWORD:阿里云账号密码
ALIYUN_ACR_NAMESPACE:容器镜像服务的命名空间
REMOTE_HOST:服务器 IP 地址
REMOTE_USER:服务器用户名
SSH_PRIVATE_KEY:服务器 SSH 私钥
Dockerfile 配置文件
# 使用 Maven 和 JDK 8 作为构建环境
FROM maven:3.6.3-openjdk-8 AS builder
# 设置工作目录
WORKDIR /app
# 复制项目文件
COPY . .
# 执行 Maven 构建,跳过测试阶段以提高构建效率
RUN mvn install -Dmaven.test.skip=true -P pro
# 使用轻量级 JRE 环境作为运行时镜像
FROM openjdk:8-jre-alpine
# 维护者信息
LABEL maintainer="1141306760@qq.com"
# 设置时区为上海
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 设置工作目录
WORKDIR /app
# 从构建阶段复制生成的 Jar 文件
COPY --from=builder /app/blog/target/*.jar app.jar
# 声明应用端口
EXPOSE 9003
# 使用 exec 格式启动应用,确保正确接收系统信号
ENTRYPOINT ["java", "-jar", "app.jar"]
提示
Dockerfile 中已包含完整的项目构建配置,可与 GitHub Actions 工作流无缝配合,实现从代码到镜像的全自动打包和部署流程。