/autobuild

适合中小项目的python自动化编译工具

Primary LanguagePython

autobuild

适合中小项目的 python 自动化编译工具

依赖安装

pip install -r requirements.txt --user

在 windows 环境下使用还需要安装 pywin32

pip install pywin32 --user

模块划分

  • 主模块(autobuild.py

    程序入口,驱动其他模块。

  • 配置模块(build_config.py

    用于加载编译配置

  • 版本控制模块(vcs.py) 用于版本控制,拉取代码

  • 环境变量控制系统 (env.py

    用于环境变量、运行目录的设置、恢复等

  • 本地构建模块(local_build.py

    用于在本地构建的执行

  • 远程构建模块(remote_build.py

    用于远程构建执行

  • 日志模块(logger.py

    用于打印日志

  • 脚本生成模块(script_gen.py

    用于生成编译脚本

  • ssh 连接模块(ssh.py

    ssh 远程执行命令,并且提供scp文件下载功能

  • 本地命令执行模块(local_command.py

    执行本地命令模块

配置示例

// 将此文件重命名为config.json
{
  // 全局环境变量,可选,可以在build、before、after、scp配置中使用,使用方法{{key}},如{{VS2017_DIR}}
  env: {
    VS2017_DIR: "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise"
  },
  build: [
    // 这里可以指定编译的列表,不在此列表的项目将被忽略
  ],
  // 发生错误时是否立即停止编译,可选,默认为true
  stop_on_error: false,
  // 工程列表,必需,每个元素表示一个工程配置
  project: {
    // 工程名称对应工程配置
    Example1: {
      // 本工程的环境变量,可选
      env: {
        PATH: "{{PATH}};C:\\msys64\\mingw32\\bin"
      },
      // 跳过本工程编译
      skip: 0,
      // 工程类型,必需,值可以是local或者remote,分别代表在本地编译和在远程主机编译,当配置为remote时,需要配置ssh和scp
      type: "remote",
      // 编译机类型,可配置为Windows或Linux,当type为remote时,必需
      os: "Windows",
      // 版本控制系统配置,必需
      vcs: {
        // 跳过代码拉取,可选,某些工程可能不需要从VCS拉取代码,可以添加此项配置
        skip: 0,
        // 版本控制系统,必需,可选git和svn
        type: "svn",
        // 版本控制系统用户名,当选择svn时,必需
        username: "test",
        // 版本控制系统密码,当选择svn时,必需
        password: "password",
        // 代码地址,必需
        addr: "https://192.168.1.1:1443/svn/Example1",
        // 在拉取代码前需要执行的命令行、可选
        before: ["echo before get code", "echo prepare get code"],
        // 在拉取代码后需要执行的命令行、可选
        after: ["echo after get code", "echo get code finished"]
      },
      // 编译命令,可选,没有此字段则默认此过程成功
      build: [
        "cd Example1",
        "cmake .",
        "mingw32-make",
        "md {{_SLN_DIR}}\\Example1",
        "copy bin\\* {{_SLN_DIR}}\\Example1\\"
      ],
      // 在构建项目前执行的命令
      before: ["echo before build Example1"],
      // 构建命令后执行的命令
      after: ["echo after build Example1"],
      // ssh配置,当type为remote时,必需
      ssh: {
        host: "192.168.1.2",
        port: "22",
        username: "root",
        password: "password"
      },
      // 远程构建结束后,需要拉取的文件列表,当type为remote时,必需
      scp: {
        // 远程路径:本地路径
        "{{_PROJECT_DIR}}/RemoteControl/bin": "{{_SLN_DIR}}/RemoteControl"
      }
    }
    // 其他工程
  },
  // 所有工程构建前执行的命令
  before: ["echo before build solution"],
  // 所有工程构建完成后执行的命令
  after: ["echo after build solution"]
}