侧边栏壁纸
博主头像
火腾

行动起来,活在当下

  • 累计撰写 7 篇文章
  • 累计创建 9 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

使用 Jenkins 自动化构建与上传小游戏

温馨提示:
本文最后更新于2025-08-06,若内容或图片失效,请留言反馈。 本文章权益归属火腾(www.firedance.cn),转载请注明来源于火腾(www.firedance.cn)。


在小游戏开发中,手动完成代码拉取、项目构建、资源混淆、预览和上传等步骤耗时且容易出错。借助 Jenkins,我们可以搭建一个自动化流水线,将这些任务整合为高效的工作流程。本文将介绍 Jenkins 的基本概念、安装与部署方法,并基于一个实际的 Pipeline 示例,展示如何自动化构建、混淆、预览和上传小游戏(以某轻量级游戏平台为例)。我们会聚焦核心实现逻辑,展示部分通用代码片段(不暴露真实信息),并介绍相关脚本的作用,最后提供 Pipeline 结构大纲。


一、什么是 Jenkins?Jenkins 是一个开源的自动化服务器,广泛应用于持续集成(CI)和持续部署(CD)。通过 Pipeline 脚本(声明式或脚本式),开发者可以定义从代码拉取到部署的完整流程。对于小游戏开发,Jenkins 能整合 Git、游戏引擎(如 Cocos Creator)、代码混淆工具和平台 CLI,实现从开发到上线的自动化。Jenkins 的核心优势

  • 灵活性:支持插件生态,适配 Git、Python、邮件通知等。

  • 可扩展性:Pipeline 支持复杂工作流定制。

  • 易用性:Web 界面便于任务配置和监控。


二、Jenkins 安装与部署1. 安装 Jenkins以下以 Windows 系统为例,简述安装步骤:

  1. 下载 Jenkins:

    • Jenkins 官网 下载 .war 文件。

    • 运行命令启动:

      java -jar jenkins.war --httpPort=8080
  2. 安装 Java:

    • Jenkins 依赖 Java,推荐安装 JDK 11 或 17(下载自 Oracle JDK)。

    • 配置环境变量,确保 java -version 正常运行。

  3. 初始化:

    • 访问 http://localhost:8080,输入 ~/.jenkins/secrets/initialAdminPassword 中的初始密码。

    • 安装推荐插件(如 Git、Pipeline、Credentials),创建管理员账户。

2. 配置环境

  • 安装工具:

    • Git:用于拉取代码。

    • Python:运行混淆和上传脚本。

    • Node.js:支持平台 CLI(如 tmg)。

    • 游戏引擎:如 Cocos Creator,确保 CLI 可调用。

  • 配置插件:

    • 安装 Git、Pipeline 和 Credentials 插件。

    • 在 Jenkins 中添加 Git 凭据(用户名/密码或 SSH 密钥)。

  • 全局配置:

    • 在 Manage Jenkins > Global Tool Configuration 中配置 JDK、Git、Node.js 路径。

    • 设置环境变量(如引擎路径、脚本路径)。

3. 创建 Pipeline 项目

  • 在 Jenkins 首页点击“新建任务”,选择“Pipeline”。

  • 输入任务名称,粘贴 Pipeline 脚本(后文介绍)。

  • 保存并运行测试。


三、自动化构建小游戏的核心流程我们以一个基于 Cocos Creator 的小游戏项目为例,目标是自动化构建并上传到某轻量级游戏平台。以下是 Pipeline 的核心设计思路,包含部分通用代码(不暴露真实信息)。核心思想

  • 模块化:将流程拆分为独立阶段(如拉取代码、构建、混淆、上传),可通过参数控制。

  • 参数化:允许用户选择是否执行构建、预览、上传等步骤。

  • 错误处理:检测构建错误,及时中断并通知。

  • 通知机制:通过内网消息或邮件反馈构建状态。

用到的脚本及其作用

  1. 日志检查脚本(Python,check_log.py):

    • 作用:解析构建日志,检查是否存在特定错误(如时间戳异常)。

    • 示例代码:

      python

      import sys
      with open(sys.argv[1], 'r') as f:
          if "bad timestamp" in f.read():
              sys.exit(1)
          sys.exit(0)
  2. 代码混淆脚本(Python,obfuscate_js.py):

    • 作用:对 JavaScript 代码进行混淆,增强安全性。

    • 示例代码:

      python

      import os
      from javascript_obfuscator import obfuscate
      input_path = sys.argv[1]
      obfuscate(input_path, output_path=os.path.join(input_path, "obfuscated"))
  3. 图片混淆脚本(Python,obfuscate_images.py):

    • 作用:处理图片资源(JPG/PNG),防止资源被轻易提取。

    • 示例代码:

      python

      import os
      from PIL import Image
      input_dir = sys.argv[1]
      for file in os.listdir(input_dir):
          if file.endswith(('.jpg', '.png')):
              img = Image.open(os.path.join(input_dir, file))
              # 应用混淆逻辑(如添加水印)
              img.save(os.path.join(input_dir, f"obf_{file}"))
  4. CDN 上传脚本(Python,upload_cdn.py):

    • 作用:将资源上传至 CDN(如火山引擎)。

    • 示例代码:

      python

      import sys
      import boto3  # 示例使用 AWS SDK,实际替换为 CDN API
      client = boto3.client('s3', endpoint_url=sys.argv[2])
      client.upload_file(sys.argv[1], 'bucket', 'remote/file')
  5. 二维码处理脚本(Python,process_qr.py):

    • 作用:优化生成的预览二维码图片。

    • 示例代码:

      python

      from PIL import Image
      img = Image.open(sys.argv[1])
      img = img.convert('RGB')  # 转换为标准格式
      img.save(sys.argv[1])
  6. 平台预览与上传脚本(Node.js,preview.js 和 upload.js):

    • 作用:调用平台 CLI(如 tmg)生成预览二维码或上传构建产物。

    • 示例代码(preview.js):

      javascript

      const { execSync } = require('child_process');
      execSync(`tmg preview -o ./qrcode.png`, { stdio: 'inherit' });

关键步骤解析

  1. 代码拉取:

    • 从 Git 仓库拉取指定分支代码。

    • 示例代码:

      groovy

      stage('更新代码') {
          steps {
              dir('project_path') {
                  git branch: 'main', credentialsId: 'git-cred-id', url: 'https://example.com/repo.git'
              }
          }
      }
  2. 分配预览地址:

    • 生成时间戳,构造预览二维码 URL。

    • 示例代码:

      groovy

      stage('分配预览地址') {
          steps {
              script {
                  def timestamp = new Date().format("HH.mm.ss-MM-dd-yyyy")
                  echo "Preview URL: http://server/qrcode/preview-${params.Version}-${timestamp}.png"
              }
          }
      }
  3. 项目构建:

    • 调用 Cocos Creator CLI 构建项目,检查日志错误。

    • 示例代码:

      groovy

      stage('构建工程') {
          steps {
              dir('project_path') {
                  script {
                      if (params.Build) {
                          def code = bat returnStatus: true, script: "creator.exe --project . --build configPath=build.json"
                          if (code != 0) error("Build failed with code ${code}")
                      }
                  }
              }
          }
      }
  4. 代码混淆:

    • 运行 Python 脚本混淆 JS 代码。

    • 示例代码:

      groovy

      stage('代码混淆') {
          steps {
              script {
                  if (params.Obfuscation) {
                      bat "python obfuscate_js.py build/output"
                  }
              }
          }
      }
  5. 资源上传:

    • 上传资源至 CDN,验证结果。

    • 示例代码:

      groovy

      stage('资源上传') {
          steps {
              script {
                  if (params.UploadBundle) {
                      bat "python upload_cdn.py build/remote https://cdn.example.com"
                  }
              }
          }
      }
  6. 图片混淆:

    • 运行 Python 脚本处理图片资源。

    • 示例代码:

      groovy

      stage('图片混淆') {
          steps {
              script {
                  if (params.ObfuscationImage) {
                      bat "python obfuscate_images.py build/output"
                  }
              }
          }
      }
  7. 平台预览:

    • 生成预览二维码,发送通知。

    • 示例代码:

      groovy

      stage('平台预览') {
          steps {
              script {
                  if (params.Preview) {
                      bat "tmg preview -o qrcode.png"
                      bat "python process_qr.py qrcode.png"
                  }
              }
          }
      }
  8. 平台上传:

    • 上传构建产物至平台。

    • 示例代码:

      groovy

      stage('平台上传') {
          steps {
              script {
                  if (params.Upload) {
                      bat "tmg upload -v ${params.Version}"
                  }
              }
          }
      }
  9. 通知机制:

    • 发送内网消息或邮件通知。

    • 示例代码:

      groovy

      post {
          success {
              mail to: 'team@example.com', subject: 'Build Success', body: 'Build completed successfully.'
          }
      }

四、Pipeline 脚本大纲

Pipeline {
    Agent: 任意节点
    Parameters:
        - Version: 版本号(字符串)
        - Build: 是否构建(布尔)
        - Preview: 是否预览(布尔)
        - Upload: 是否上传(布尔)
        - LocalMsg: 是否内网通知(布尔)
        - EmailNotice: 是否邮件通知(布尔)
        - Obfuscation: 是否代码混淆(布尔)
        - ObfuscationImage: 是否图片混淆(布尔)
        - UploadBundle: 是否上传资源(布尔)
    Environment:
        - Git 仓库、分支、项目路径
        - 引擎路径、构建配置路径
        - 脚本路径(日志检查、混淆、上传、预览)
    Stages:
        1. 更新代码
            - 拉取 Git 分支
        2. 分配预览地址
            - 生成时间戳和二维码 URL
        3. 构建工程
            - 执行游戏引擎构建
            - 检查日志错误
            - 发送通知
        4. 代码混淆
            - 运行混淆脚本
            - 发送通知
        5. 资源上传
            - 上传至 CDN
            - 发送通知
        6. 图片混淆
            - 处理图片资源
            - 发送通知
        7. 平台预览
            - 生成二维码
            - 发送通知
        8. 平台上传
            - 上传至平台
            - 发送通知
    Post:
        - 邮件通知(成功、失败)
}

微信图片_20250806122901.jpg

五、总结通过 Jenkins Pipeline,我们可以将小游戏开发的复杂流程自动化,从代码拉取到平台上传一气呵成。参数化设计让流程灵活可控,脚本支持(Python、Node.js)增强了混淆和上传能力,通知机制则提升了团队协作效率。对于小游戏开发者,这套流程能显著节省时间并确保质量。尝试搭建你的 Jenkins 流水线,体验自动化的魅力!有问题或优化建议,欢迎留言交流!

0

评论区