From 315134c9b58fc0d6f14c175ec02832924afb8a74 Mon Sep 17 00:00:00 2001 From: 1 <1@72wo.cn> Date: Sun, 5 Oct 2025 07:29:35 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95CICD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/logic_CI.yml | 68 +++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 25 deletions(-) diff --git a/.github/workflows/logic_CI.yml b/.github/workflows/logic_CI.yml index 4c030b595..79bf24300 100644 --- a/.github/workflows/logic_CI.yml +++ b/.github/workflows/logic_CI.yml @@ -3,29 +3,25 @@ name: Go Build & Release on: workflow_dispatch: # 仅支持手动触发 inputs: - releaseVersion: # 手动输入版本号(可选,默认自动生成) - description: '自定义Release版本号(如 v1.0.2)' - required: false - type: string + servicePort: # 手动设置服务启动端口(必填) + description: '服务启动序号' + required: true + type: number jobs: - # 准备版本号(优先使用手动输入,否则自动生成) + # 生成随机版本号(8位字母数字,作为screen会话名核心标识) prepare-version: runs-on: ubuntu-latest outputs: - build_version: ${{ steps.set-version.outputs.version }} + build_version: ${{ steps.set-random-version.outputs.version }} steps: - - name: Set build version - id: set-version + - name: Set random build version + id: set-random-version run: | - # 如果手动输入了版本号,则使用输入值;否则自动生成 - if [ -n "${{ github.event.inputs.releaseVersion }}" ]; then - echo "version=${{ github.event.inputs.releaseVersion }}" >> $GITHUB_OUTPUT - else - # 自动生成格式:vYYYYMMDD-HHMMSS(带v前缀符合Release规范) - echo "version=v$(date +'%Y%m%d-%H%M%S')" >> $GITHUB_OUTPUT - fi + # 生成8位随机字母数字(大小写混合),确保版本与会话名唯一性 + RANDOM_SUFFIX=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1) + echo "version=v$RANDOM_SUFFIX" >> $GITHUB_OUTPUT build: needs: prepare-version @@ -57,21 +53,40 @@ jobs: name: logic_${{ needs.prepare-version.outputs.build_version }} path: ./public/logic_${{ needs.prepare-version.outputs.build_version }} - - name: 推送到服务器 + - name: 推送到服务器并通过screen启动服务(会话名无端口) uses: easingthemes/ssh-deploy@main env: SSH_PRIVATE_KEY: ${{ secrets.BLAZING }} - REMOTE_HOST: "82.23.177.97" + REMOTE_HOST: "122.10.117.123" REMOTE_USER: "root" SOURCE: "public/" TARGET: "/home/" ARGS: "-avz --chown=git:git" + # 核心调整:会话名仅用随机版本号(格式:logic-{版本号},如 logic-v7aB9x2zF) + SCRIPT_AFTER: | + # 定义screen会话名(仅含服务标识+随机版本号,无端口) + SCREEN_NAME="logic-${{ needs.prepare-version.outputs.build_version }}" + # 停止同名旧会话(仅清理当前版本,不影响其他版本) + screen -S $SCREEN_NAME -X quit 2>/dev/null || true + # 启动服务并传入-port参数 + screen -dmS $SCREEN_NAME /home/logic_${{ needs.prepare-version.outputs.build_version }} -port=${{ github.event.inputs.servicePort }} + # 输出完整关联信息,方便管理(会话名、端口、版本一一对应) + echo "======================================" + echo "服务启动成功!" + echo "Screen会话名:$SCREEN_NAME" + echo "服务端口:${{ github.event.inputs.servicePort }}" + echo "对应版本:${{ needs.prepare-version.outputs.build_version }}" + echo "管理命令:" + echo " - 进入会话:screen -r $SCREEN_NAME" + echo " - 查看所有会话:screen -ls" + echo " - 停止服务:screen -S $SCREEN_NAME -X quit" + echo "======================================" - # 自动创建GitHub Release + # 自动创建GitHub Release(同步会话名与端口关联关系) create-release: needs: [prepare-version, build] permissions: - contents: write # 必须的Release创建权限 + contents: write runs-on: ubuntu-latest steps: @@ -84,13 +99,16 @@ jobs: - name: Create GitHub Release uses: softprops/action-gh-release@v1 with: - tag_name: ${{ needs.prepare-version.outputs.build_version }} # 标签名=版本号 - name: Release ${{ needs.prepare-version.outputs.build_version }} # Release标题 + tag_name: ${{ needs.prepare-version.outputs.build_version }} + name: Release ${{ needs.prepare-version.outputs.build_version }} body: | ## 自动构建发布 - 版本号: ${{ needs.prepare-version.outputs.build_version }} - 触发方式: 手动触发 - - 构建时间: ${{ github.event.repository.updated_at }} - files: ./public/logic_${{ needs.prepare-version.outputs.build_version }} # 上传构建产物 - draft: false # 直接发布,不存草稿 - prerelease: false # 标记为正式版本 + - 服务端口: ${{ github.event.inputs.servicePort }} + - Screen会话名: logic-${{ needs.prepare-version.outputs.build_version }} + - 可执行文件: logic_${{ needs.prepare-version.outputs.build_version }} + - 启动命令: ./logic_${{ needs.prepare-version.outputs.build_version }} -port=${{ github.event.inputs.servicePort }} + files: ./public/logic_${{ needs.prepare-version.outputs.build_version }} + draft: false + prerelease: false