build
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 5m57s
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 5m57s
This commit is contained in:
@@ -1,43 +1,45 @@
|
|||||||
|
name: Build and Push Docker Image
|
||||||
|
|
||||||
# name: 构建项目
|
# 当代码推送到 main 分支时触发
|
||||||
# run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
# # 2. 触发条件 (on)
|
jobs:
|
||||||
# on: [push]
|
build-and-push:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
# # 3. 作业定义 (jobs)
|
steps:
|
||||||
# jobs:
|
# 步骤 1: 检出你的代码仓库
|
||||||
# 构建:
|
- name: Checkout code
|
||||||
# # 4. 运行器选择 (runs-on)
|
uses: actions/checkout@v4
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
# # 5. 步骤序列 (steps)
|
# 步骤 2: 设置 Docker Buildx (推荐,支持多平台构建等高级功能)
|
||||||
# steps:
|
- name: Set up Docker Buildx
|
||||||
# # 步骤 1: 检出代码
|
uses: docker/setup-buildx-action@v3
|
||||||
# - name: 检出代码
|
|
||||||
# uses: https://gitea.com/actions/checkout@v4
|
|
||||||
|
|
||||||
# - name: 显示目录
|
# 步骤 3: 登录到你的 Docker 仓库
|
||||||
# run: ls -la
|
# 你需要在 Gitea/GitHub 的 Secrets 中配置好 DOCKERHUB_USERNAME 和 DOCKERHUB_TOKEN
|
||||||
|
- name: Login to Docker Hub
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: registry.bmycode.help
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
# # 步骤 2: 设置 Node.js 环境
|
# 步骤 4: 构建并推送 Docker 镜像 (核心步骤)
|
||||||
# - name: 设置 Node.js 环境
|
- name: Build and push
|
||||||
# uses: https://gitea.com/actions/setup-node@v4
|
uses: docker/build-push-action@v5
|
||||||
# with:
|
with:
|
||||||
# node-version: 22
|
# context: . 表示 Docker 构建上下文为当前仓库的根目录
|
||||||
# cache: 'npm'
|
# 这意味着 Dockerfile 中 COPY . . 会复制整个项目代码
|
||||||
|
context: .
|
||||||
|
|
||||||
# # 步骤 3: 安装依赖
|
# push: true 表示构建成功后将镜像推送到仓库
|
||||||
# - name: 安装依赖
|
push: true
|
||||||
# run: npm ci
|
|
||||||
|
|
||||||
# # 步骤 4: 执行打包命令
|
# tags: 定义镜像的名称和标签
|
||||||
# - name: 执行Build构建
|
# 推荐使用 commit sha 作为标签,便于版本追溯
|
||||||
# run: npm run build
|
tags: |
|
||||||
|
registry.bmycode.help/app-product:latest
|
||||||
# # 步骤 5: 上传打包产物
|
registry.bmycode.help/app-product:${{ github.sha }}
|
||||||
# - name: 上传构建产物
|
|
||||||
# uses: https://gitea.com/actions/upload-artifact@v3
|
|
||||||
# with:
|
|
||||||
# name: dist
|
|
||||||
# path: dist/
|
|
||||||
@@ -1,92 +1,91 @@
|
|||||||
# 工作流名称
|
# # 工作流名称
|
||||||
name: Gitea Actions Demo
|
# name: Gitea Actions Demo
|
||||||
|
|
||||||
# 运行名称:在Gitea界面中显示的具体运行名称,支持动态变量
|
# # 运行名称:在Gitea界面中显示的具体运行名称,支持动态变量
|
||||||
run-name: ${{ gitea.actor }} 正在测试 Gitea Actions 🚀
|
# run-name: ${{ gitea.actor }} 正在测试 Gitea Actions 🚀
|
||||||
|
|
||||||
# 触发条件:当发生push事件时触发
|
# # 触发条件:当发生push事件时触发
|
||||||
on: [push]
|
# on: [push]
|
||||||
|
|
||||||
# 作业定义
|
# # 作业定义
|
||||||
jobs:
|
# jobs:
|
||||||
# 作业名称:探索Gitea Actions
|
# # 作业名称:探索Gitea Actions
|
||||||
Explore-Gitea-Actions:
|
# Explore-Gitea-Actions:
|
||||||
# 运行环境:在ubuntu-latest标签的runner上运行
|
# # 运行环境:在ubuntu-latest标签的runner上运行
|
||||||
runs-on: ubuntu-latest
|
# runs-on: ubuntu-latest
|
||||||
|
|
||||||
# 步骤序列
|
# # 步骤序列
|
||||||
steps:
|
# steps:
|
||||||
- name: 执行远程 SSH 命令(密码认证)
|
# - name: 执行远程 SSH 命令(密码认证)
|
||||||
uses: appleboy/ssh-action@v1
|
# uses: appleboy/ssh-action@v1
|
||||||
with:
|
# with:
|
||||||
host: ${{ secrets.HOST }}
|
# host: ${{ secrets.HOST }}
|
||||||
username: ${{ secrets.USERNAME }}
|
# username: ${{ secrets.USERNAME }}
|
||||||
password: ${{ secrets.PASSWORD }}
|
# password: ${{ secrets.PASSWORD }}
|
||||||
port: ${{ secrets.PORT }}
|
# port: ${{ secrets.PORT }}
|
||||||
script: |
|
# script: |
|
||||||
pwd
|
# pwd
|
||||||
cd /home/bmy/app-product
|
# cd /home/bmy/app-product
|
||||||
ls -al
|
# ls -al
|
||||||
|
|
||||||
# 步骤 2: 在管理机拉取最新代码并部署
|
# # 步骤 2: 在管理机拉取最新代码并部署
|
||||||
- name: 拉取代码并执行部署
|
# - name: 拉取代码并执行部署
|
||||||
run: |
|
# run: |
|
||||||
# 1. 在 Runner 上安装 sshpass
|
# # 1. 在 Runner 上安装 sshpass
|
||||||
sudo apt-get update && sudo apt-get install -y sshpass
|
# sudo apt-get update && sudo apt-get install -y sshpass
|
||||||
|
|
||||||
# 2. 使用 sshpass 执行远程命令
|
# # 2. 使用 sshpass 执行远程命令
|
||||||
# -o StrictHostKeyChecking=no: 自动接受未知的主机密钥,避免 "Host key verification failed" 错误
|
# # -o StrictHostKeyChecking=no: 自动接受未知的主机密钥,避免 "Host key verification failed" 错误
|
||||||
# sshpass -p '密码' ssh ...: 通过 sshpass 提供密码
|
# # sshpass -p '密码' ssh ...: 通过 sshpass 提供密码
|
||||||
# -T: 禁用伪终端分配,避免相关警告
|
# # -T: 禁用伪终端分配,避免相关警告
|
||||||
sshpass -p '${{ secrets.PASSWORD }}' ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${{ secrets.USERNAME }}@${{ secrets.HOST }} << 'EOF'
|
# sshpass -p '${{ secrets.PASSWORD }}' ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${{ secrets.USERNAME }}@${{ secrets.HOST }} << 'EOF'
|
||||||
# --- 以下为在管理机上执行的脚本 ---
|
# # --- 以下为在管理机上执行的脚本 ---
|
||||||
|
|
||||||
# 定义项目目录(管理机上的代码存放路径)
|
# # 定义项目目录(管理机上的代码存放路径)
|
||||||
PROJECT_DIR="/home/bmy/gitea_actions"
|
# PROJECT_DIR="/home/bmy/gitea_actions"
|
||||||
|
|
||||||
# 进入项目目录,若不存在则克隆仓库
|
# # 进入项目目录,若不存在则克隆仓库
|
||||||
if [ ! -d "$PROJECT_DIR" ]; then
|
# if [ ! -d "$PROJECT_DIR" ]; then
|
||||||
echo "项目目录不存在,克隆仓库..."
|
# echo "项目目录不存在,克隆仓库..."
|
||||||
# 假设管理机已配置好 Gitea 的访问权限 (如部署密钥)
|
# # 假设管理机已配置好 Gitea 的访问权限 (如部署密钥)
|
||||||
# git@git.bmycode.help:bmy/gitea_actions.git
|
# git clone git@git.bmycode.help:${{ gitea.repository }}.git $PROJECT_DIR
|
||||||
git clone git@git.bmycode.help:${{ gitea.repository }}.git $PROJECT_DIR
|
# cd $PROJECT_DIR
|
||||||
cd $PROJECT_DIR
|
# else
|
||||||
else
|
# echo "拉取最新代码..."
|
||||||
echo "拉取最新代码..."
|
# cd $PROJECT_DIR
|
||||||
cd $PROJECT_DIR
|
# git checkout main
|
||||||
git checkout main
|
# git pull origin main
|
||||||
git pull origin main
|
# fi
|
||||||
fi
|
|
||||||
|
|
||||||
# 执行部署脚本
|
# # 执行部署脚本
|
||||||
pwd
|
# pwd
|
||||||
ls
|
# ls
|
||||||
|
|
||||||
# --- 远程脚本结束 ---
|
# # --- 远程脚本结束 ---
|
||||||
EOF
|
# EOF
|
||||||
# 步骤1:输出事件信息
|
# # 步骤1:输出事件信息
|
||||||
- run: echo "🎉 该作业由 ${{ gitea.event_name }} 事件自动触发。"
|
# - run: echo "🎉 该作业由 ${{ gitea.event_name }} 事件自动触发。"
|
||||||
|
|
||||||
# 步骤2:输出运行环境信息
|
# # 步骤2:输出运行环境信息
|
||||||
- run: echo "🐧 该作业现在正在Gitea托管的 ${{ runner.os }} 服务器上运行!"
|
# - run: echo "🐧 该作业现在正在Gitea托管的 ${{ runner.os }} 服务器上运行!"
|
||||||
|
|
||||||
# 步骤3:输出分支和仓库信息
|
# # 步骤3:输出分支和仓库信息
|
||||||
- run: echo "🔎 您的分支名称是 ${{ gitea.ref }},您的仓库是 ${{ gitea.repository }}。"
|
# - run: echo "🔎 您的分支名称是 ${{ gitea.ref }},您的仓库是 ${{ gitea.repository }}。"
|
||||||
|
|
||||||
# 步骤4:检出仓库代码(具有名称的步骤)
|
# # 步骤4:检出仓库代码(具有名称的步骤)
|
||||||
- name: 检出仓库代码
|
# - name: 检出仓库代码
|
||||||
uses: actions/checkout@v4
|
# uses: actions/checkout@v4
|
||||||
|
|
||||||
# 步骤5:输出克隆完成信息
|
# # 步骤5:输出克隆完成信息
|
||||||
- run: echo "💡 ${{ gitea.repository }} 仓库已克隆到runner。"
|
# - run: echo "💡 ${{ gitea.repository }} 仓库已克隆到runner。"
|
||||||
|
|
||||||
# 步骤6:准备测试提示
|
# # 步骤6:准备测试提示
|
||||||
- run: echo "🖥️ 工作流现已准备好在runner上测试您的代码。"
|
# - run: echo "🖥️ 工作流现已准备好在runner上测试您的代码。"
|
||||||
|
|
||||||
# 步骤7:列出仓库文件(多行命令)
|
# # 步骤7:列出仓库文件(多行命令)
|
||||||
- name: 列出仓库中的文件
|
# - name: 列出仓库中的文件
|
||||||
run: |
|
# run: |
|
||||||
ls ${{ gitea.workspace }}
|
# ls ${{ gitea.workspace }}
|
||||||
|
|
||||||
# 步骤8:输出作业状态
|
# # 步骤8:输出作业状态
|
||||||
- run: echo "🍏 此作业的状态是 ${{ job.status }}。"
|
# - run: echo "🍏 此作业的状态是 ${{ job.status }}。"
|
||||||
21
Dockerfile
Normal file
21
Dockerfile
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
FROM node:24-alpine AS builder
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY package.json ./
|
||||||
|
|
||||||
|
# 直接使用 npm install 并解决依赖问题
|
||||||
|
RUN npm install --no-audit --no-fund --legacy-peer-deps
|
||||||
|
|
||||||
|
# 拷贝源码并构建
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# 【前端修改】如果要以子路径 /app-product/ 部署,请用 base 指定前缀,同 .env中VITE_SERVER_NAME
|
||||||
|
RUN npx vite build
|
||||||
|
|
||||||
|
FROM nginx:alpine
|
||||||
|
# 构建产物放到 /usr/share/nginx/html/app-product
|
||||||
|
COPY --from=builder /app/dist /usr/share/nginx/html
|
||||||
|
# 覆盖 Nginx 配置,支持 SPA 子路径
|
||||||
|
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||||
|
EXPOSE 80
|
||||||
|
CMD ["nginx", "-g", "daemon off;"]
|
||||||
13
nginx.conf
Normal file
13
nginx.conf
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name *.ddd.com;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
alias /usr/share/nginx/html/;
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
add_header 'Access-Control-Allow-Origin' '*';
|
||||||
|
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
|
||||||
|
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
|
||||||
|
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user