Compare commits

..

2 Commits

Author SHA1 Message Date
yhl452493373
960ee44e9c 优化工作流 2025-11-21 23:27:18 +08:00
yhl452493373
231a8337e9 优化工作流,增加构建docker镜像的工作流 2025-11-21 23:25:39 +08:00
3 changed files with 163 additions and 9 deletions

View File

@@ -1,6 +1,6 @@
name: 构建启动器
on:
workflow_dispatch: # 允许手动触发
workflow_dispatch:
inputs:
build_modules:
description: '构建 Modules'
@@ -42,7 +42,7 @@ jobs:
apt update -y
apt install zip unzip nodejs -y
- name: 克隆代码
- name: 检出代码
uses: actions/checkout@v4
- name: 配置环境
@@ -60,9 +60,9 @@ jobs:
- name: 获取 Managed.zip
id: managed
if: ${{ github.event.inputs.build_modules == 'true' }}
if: inputs.build_modules == true
run: |
MANAGED_URL="${{ github.event.inputs.managed_zip_url }}"
MANAGED_URL="${{ inputs.managed_zip_url }}"
if [ -z "$MANAGED_URL" ]; then
echo "错误:未提供 Managed.zip 路径或URL"
@@ -138,11 +138,11 @@ jobs:
id: params
run: |
# 是否构建modules
BUILD_MODULES="${{ github.event.inputs.build_modules || 'true' }}"
BUILD_MODULES="${{ inputs.build_modules || 'true' }}"
echo "build_modules=$BUILD_MODULES" >> $GITHUB_OUTPUT
# 是否构建启动器
BUILD_LAUNCHER="${{ github.event.inputs.build_launcher || 'true' }}"
BUILD_LAUNCHER="${{ inputs.build_launcher || 'true' }}"
echo "build_launcher=$BUILD_LAUNCHER" >> $GITHUB_OUTPUT
# 构建后是否压缩为zip

138
.github/workflows/BuildServer.yml vendored Normal file
View File

@@ -0,0 +1,138 @@
name: 构建服务端镜像
on:
workflow_dispatch:
inputs:
runner_os:
description: |
选择运行器操作系统:
- ubuntu-latest: 最新的 Ubuntu
- ubuntu-24.04: Ubuntu 24.04 LTS
- ubuntu-host: 自建的运行器所在宿主机
type: choice
required: true
default: 'ubuntu-latest'
options:
- ubuntu-latest
- ubuntu-24.04
- ubuntu-host
push_to_docker:
description: 是否推送到 Docker Hub
type: boolean
default: true
required: true
output_path:
description: 镜像输出路径
type: string
required: false
env:
IMAGE_TAG_FILE: image_tag.txt
IMAGE_FILE: spt-server-image.tar
jobs:
build-server:
runs-on: ${{ inputs.runner_os }}
steps:
- name: 检出代码
uses: actions/checkout@v4
- name: 检查 Docker Hub 配置
id: docker-config
run: |
if [ "${{ inputs.push_to_docker }}" = "true" ]; then
if [ -z "${{ secrets.DOCKERHUB_USERNAME }}" ] || [ -z "${{ secrets.DOCKERHUB_TOKEN }}" ]; then
echo "Docker Hub 用户名或令牌未配置,无法推送镜像"
echo "push_available=false" >> $GITHUB_OUTPUT
else
echo "Docker Hub 配置检查通过"
echo "push_available=true" >> $GITHUB_OUTPUT
fi
else
echo "用户选择不推送到 Docker Hub"
echo "push_available=false" >> $GITHUB_OUTPUT
fi
- name: 登录 Docker Hub
if: steps.docker-config.outputs.push_available == 'true'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: 设置构建脚本执行权限
run: chmod +x build-server.sh
- name: 安装依赖
run: |
sudo apt update
sudo apt install -y jq
- name: 构建 Docker 镜像
run: |
# 运行构建脚本
./build-server.sh
- name: 获取镜像标签
id: exist-tag
run: |
# 从文件中读取镜像标签
if [ -f ${{ env.IMAGE_TAG_FILE }} ]; then
TAG=$(cat ${{ env.IMAGE_TAG_FILE }} | head -1)
echo "从文件读取镜像标签: $TAG"
echo "tag=$TAG" >> $GITHUB_OUTPUT
else
echo "错误:${{ env.IMAGE_TAG_FILE }} 文件不存在,构建可能失败"
exit 1
fi
- name: 导出构建镜像
if: inputs.output_path != ''
run: |
# 临时导出镜像
docker save -o ${{ env.IMAGE_FILE }} ${{ steps.exist-tag.outputs.tag }}
echo "镜像已临时导出为: ${{ env.IMAGE_FILE }}"
- name: 复制镜像到输出目录
if: inputs.output_path != ''
run: |
# 创建输出目录并复制镜像
mkdir -p ${{ inputs.output_path }}
cp ${{ env.IMAGE_FILE }} ${{ inputs.output_path }}/
echo "镜像已复制到: ${{ inputs.output_path }}/${{ env.IMAGE_FILE }}"
- name: 清理临时文件
if: inputs.output_path != ''
run: |
# 删除临时文件
rm -f ${{ env.IMAGE_FILE }}
echo "已清理临时镜像文件"
- name: 推送 Docker 镜像
if: steps.docker-config.outputs.push_available == 'true'
run: |
docker push ${{ steps.exist-tag.outputs.tag }}
- name: 构建结果
run: |
echo "=== 构建结果 ==="
echo "运行器操作系统: ${{ inputs.runner_os }}"
echo "镜像标签: ${{ steps.exist-tag.outputs.tag }}"
echo "用户选择推送到 Docker Hub: ${{ inputs.push_to_docker }}"
echo "实际是否推送到 Docker Hub: ${{ steps.check-docker-config.outputs.push_available }}"
if [ "${{ inputs.output_path }}" != "" ]; then
echo "镜像文件保存到: ${{ inputs.output_path }}/${{ env.IMAGE_FILE }}"
else
echo "未提供输出路径,镜像文件未保存"
fi
if [ "${{ steps.check-docker-config.outputs.push_available }}" = "true" ]; then
echo "已推送到 Docker Hub"
echo "推送的标签: ${{ steps.exist-tag.outputs.tag }}"
else
if [ "${{ inputs.push_to_docker }}" = "true" ]; then
echo "推送失败Docker Hub 用户名或令牌未配置"
else
echo "镜像仅本地构建,用户选择不推送到 Docker Hub"
fi
fi

View File

@@ -16,12 +16,28 @@ echo "SPT服务端提交ID$SPT_COMMIT_ID"
echo "适用客户端版本:$CLIENT_VERSION"
echo "构建日期:$DATE_TIME"
docker buildx build \
--platform linux/amd64 \
-t yhl452493373/spt-server:$SPT_VERSION-$DATE_TIME-$SPT_COMMIT_ID \
IMAGE_TAG="yhl452493373/spt-server:$SPT_VERSION-$DATE_TIME-$SPT_COMMIT_ID"
echo "开始构建镜像"
# 先删除可能存在的旧标签文件
rm -rf image_tag.txt
docker build \
-t $IMAGE_TAG \
--build-arg SPT_VERSION=$SPT_VERSION \
--build-arg SPT_BUILD_TYPE=$SPT_BUILD_TYPE \
--build-arg SPT_BUILD_CONFIG=Release \
-f Dockerfile .
# 检查上一个命令的退出状态
if [ $? -ne 0 ]; then
echo "错误Docker 镜像构建失败!"
exit 1
fi
echo "镜像构建完毕"
# 构建成功后,将镜像标签保存到文件
echo "$IMAGE_TAG" > image_tag.txt
echo "镜像标签已保存到 image_tag.txt: $IMAGE_TAG"