优化工作流,增加构建docker镜像的工作流
This commit is contained in:
12
.github/workflows/BuildLauncher.yml
vendored
12
.github/workflows/BuildLauncher.yml
vendored
@@ -1,6 +1,6 @@
|
|||||||
name: 构建启动器
|
name: 构建启动器
|
||||||
on:
|
on:
|
||||||
workflow_dispatch: # 允许手动触发
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
build_modules:
|
build_modules:
|
||||||
description: '构建 Modules'
|
description: '构建 Modules'
|
||||||
@@ -42,7 +42,7 @@ jobs:
|
|||||||
apt update -y
|
apt update -y
|
||||||
apt install zip unzip nodejs -y
|
apt install zip unzip nodejs -y
|
||||||
|
|
||||||
- name: 克隆代码
|
- name: 检出代码
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: 配置环境
|
- name: 配置环境
|
||||||
@@ -60,9 +60,9 @@ jobs:
|
|||||||
|
|
||||||
- name: 获取 Managed.zip
|
- name: 获取 Managed.zip
|
||||||
id: managed
|
id: managed
|
||||||
if: ${{ github.event.inputs.build_modules == 'true' }}
|
if: inputs.build_modules == true
|
||||||
run: |
|
run: |
|
||||||
MANAGED_URL="${{ github.event.inputs.managed_zip_url }}"
|
MANAGED_URL="${{ inputs.managed_zip_url }}"
|
||||||
|
|
||||||
if [ -z "$MANAGED_URL" ]; then
|
if [ -z "$MANAGED_URL" ]; then
|
||||||
echo "错误:未提供 Managed.zip 路径或URL"
|
echo "错误:未提供 Managed.zip 路径或URL"
|
||||||
@@ -138,11 +138,11 @@ jobs:
|
|||||||
id: params
|
id: params
|
||||||
run: |
|
run: |
|
||||||
# 是否构建modules
|
# 是否构建modules
|
||||||
BUILD_MODULES="${{ github.event.inputs.build_modules || 'true' }}"
|
BUILD_MODULES="${{ inputs.build_modules || 'true' }}"
|
||||||
echo "build_modules=$BUILD_MODULES" >> $GITHUB_OUTPUT
|
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
|
echo "build_launcher=$BUILD_LAUNCHER" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
# 构建后是否压缩为zip
|
# 构建后是否压缩为zip
|
||||||
|
|||||||
138
.github/workflows/BuildServer.yml
vendored
Normal file
138
.github/workflows/BuildServer.yml
vendored
Normal 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 "用户选择不推送镜像"
|
||||||
|
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
|
||||||
@@ -16,12 +16,28 @@ echo "SPT服务端提交ID:$SPT_COMMIT_ID"
|
|||||||
echo "适用客户端版本:$CLIENT_VERSION"
|
echo "适用客户端版本:$CLIENT_VERSION"
|
||||||
echo "构建日期:$DATE_TIME"
|
echo "构建日期:$DATE_TIME"
|
||||||
|
|
||||||
docker buildx build \
|
IMAGE_TAG="yhl452493373/spt-server:$SPT_VERSION-$DATE_TIME-$SPT_COMMIT_ID"
|
||||||
--platform linux/amd64 \
|
|
||||||
-t 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_VERSION=$SPT_VERSION \
|
||||||
--build-arg SPT_BUILD_TYPE=$SPT_BUILD_TYPE \
|
--build-arg SPT_BUILD_TYPE=$SPT_BUILD_TYPE \
|
||||||
--build-arg SPT_BUILD_CONFIG=Release \
|
--build-arg SPT_BUILD_CONFIG=Release \
|
||||||
-f Dockerfile .
|
-f Dockerfile .
|
||||||
|
|
||||||
|
# 检查上一个命令的退出状态
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "错误:Docker 镜像构建失败!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
echo "镜像构建完毕"
|
echo "镜像构建完毕"
|
||||||
|
|
||||||
|
# 构建成功后,将镜像标签保存到文件
|
||||||
|
echo "$IMAGE_TAG" > image_tag.txt
|
||||||
|
echo "镜像标签已保存到 image_tag.txt: $IMAGE_TAG"
|
||||||
|
|||||||
Reference in New Issue
Block a user