Skip to content

项目编译

xcaspar edited this page Jun 22, 2020 · 1 revision

ChaosBlade 项目编译

ChaosBlade 工具包含很多领域的混沌实验,不同领域的混沌实验由不同的项目实现,本文详细介绍如何编译这些项目,打包出 ChaosBlade 工具包。

ChaosBlade 各项目编译

你可以在 Mac 或者 Linux 平台上编译 ChaosBlade 各个项目,而且在 Mac 平台上可通过 docker 实现跨平台编译,编译 Linux 平台下运行的包,下面会详细介绍各项目编译所需环境及编译方式。

chaosblade

ChaosBlade CLI 工具,使用 golang 编程语言实现,使用 go.mod 做包管理,项目地址: https://github.com/chaosblade-io/chaosblade 。只编译此项目,会生成一个 blade 文件,用于执行 chaosblade 混沌实验。作为 ChaosBlade 项目的主项目,可以通过其编译 ChaosBlade 相关的所有的项目,下面分阶段介绍如何编译。 编译结果目录:target/chaosblade-VERSION

只编译 CLI 工具 blade

在 Mac 上编译 Linux 版本

编译环境:Mac、Docker 目标平台:Linux 平台 编译目标:build_with_linux 编译命令:

ARGS="cli" make build_with_linux

编译结果:

» tree
.
├── bin
├── blade
└── lib

在 Mac 上编译 Mac 版本 编译环境:Mac、go1.13+ 目标平台:Mac 编译目标:build_with 编译命令:

make build_with cli

在 Linux 上编译 Linux 版本 编译环境:Linux、go1.13+ 目标平台:Linux 编译目标:build_with 编译命令:

make build_with cli

编译包含 os 场景的 ChaosBlade 工具包

通过 git clone 命令下载 chaosblade-exec-os 仓库,根据 Makefile 中指定的 BLADE_EXEC_OS_BRANCH 分支进行编译。

在 Mac 上编译 Linux 版本 编译环境:Mac、Docker、git 目标平台:Linux 平台 编译目标:build_with_linux 编译命令:

ARGS="cli os" make build_with_linux

编译结果:

» tree
.
├── bin
│   ├── chaos_burncpu
│   ├── chaos_burnio
│   ├── chaos_burnmem
│   ├── chaos_changedns
│   ├── chaos_dropnetwork
│   ├── chaos_filldisk
│   ├── chaos_killprocess
│   ├── chaos_occupynetwork
│   ├── chaos_stopprocess
│   ├── chaos_tcnetwork
│   └── chaosblade-os-spec-0.6.0.yaml
├── blade
└── lib


在 Mac 上编译 Mac 版本 编译环境:Mac、git、go1.13+ 目标平台:Mac 编译目标:build_with 编译命令:

make build_with cli os_darwin

在 Linux 上编译 Linux 版本 编译环境:Linux、git、go1.13+ 目标平台:Linux 编译目标:build_with 编译命令:

make build_with cli os

编译所有 ChaosBlade 项目

包含除 java 场景之外的 cli、os、docker、kubernetes、cplus 场景,java 场景需要单独编译,然后复制到指定的chaosblade 目录中,详见 chaosblade-exec-jvm 编译篇。

在 Mac 上编译 Linux 版本 编译环境:Mac、Docker、git 目标平台:Linux 平台 编译目标:build_linux 编译命令:

make build_linux

编译结果:

» tree
.
├── bin
│   ├── chaos_burncpu
│   ├── chaos_burnio
│   ├── chaos_burnmem
│   ├── chaos_changedns
│   ├── chaos_dropnetwork
│   ├── chaos_filldisk
│   ├── chaos_fuse
│   ├── chaos_killprocess
│   ├── chaos_occupynetwork
│   ├── chaos_stopprocess
│   ├── chaos_tcnetwork
│   ├── chaosblade-cplus-spec.yaml
│   ├── chaosblade-docker-spec-0.6.0.yaml
│   ├── chaosblade-k8s-spec-0.6.0.yaml
│   └── chaosblade-os-spec-0.6.0.yaml
├── blade
└── lib
   └── cplus
       ├── chaosblade-exec-cplus.jar
       └── script
           ├── shell_break_and_return.sh
           ├── shell_break_and_return_attach.sh
           ├── shell_check_process_duplicate.sh
           ├── shell_check_process_id.sh
           ├── shell_initialization.sh
           ├── shell_modify_variable.sh
           ├── shell_modify_variable_attch.sh
           ├── shell_remove_process.sh
           ├── shell_response_delay.sh
           └── shell_response_delay_attach.sh

4 directories, 27 files

在 Mac 上编译 Mac 版本 编译环境:Mac、git、go1.13+ 目标平台:Mac 编译目标:build_darwin 编译命令:

make build_darwin

在 Linux 上编译 Linux 版本 编译环境:Linux、git、go1.13+ 目标平台:Linux 编译目标:build 编译命令:

make

chaosblade-exec-jvm

Java 实验场景项目,项目地址:https://github.com/chaosblade-io/chaosblade-exec-jvm 。编译时会下载 jvm-sandbox 库。 编译结果目录:build-target/chaosblade-VERSION

编译环境:JDK8、Maven3.X 目标平台:Mac、Linux 编译目标:build 编译命令:

make

编译结果:

.
├── bin
│   ├── chaosblade-jvm-spec-0.6.0.yaml
│   └── tools.jar
└── lib
    └── sandbox
        ├── bin
        │   └── sandbox.sh
        ├── cfg
        │   ├── sandbox-logback.xml
        │   ├── sandbox.properties
        │   └── version
        ├── example
        │   └── sandbox-debug-module.jar
        ├── install-local.sh
        ├── lib
        │   ├── sandbox-agent.jar
        │   ├── sandbox-core.jar
        │   └── sandbox-spy.jar
        ├── module
        │   ├── chaosblade-java-agent-0.6.0.jar
        │   └── sandbox-mgr-module.jar
        ├── provider
        │   └── sandbox-mgr-provider.jar
        └── sandbox-module

10 directories, 14 files

需要你将 build-target/chaosblade-VERSION/* 复制到 chaosblade 项目编译结果目录 target/chaosblade-VERSION/ 下执行,例如:

cp -R /Users/Shared/ChaosBladeProjects/chaosblade-opensource/chaosblade-exec-jvm/build-target/chaosblade-0.6.0/* /Users/Shared/ChaosBladeProjects/chaosblade-opensource/chaosblade/src/github.com/chaosblade-io/chaosblade/target/chaosblade-0.6.0/

复制结果:

target/chaosblade-0.6.0
├── bin
│   ├── chaos_burncpu
│   ├── chaos_burnio
│   ├── chaos_burnmem
│   ├── chaos_changedns
│   ├── chaos_dropnetwork
│   ├── chaos_filldisk
│   ├── chaos_fuse
│   ├── chaos_killprocess
│   ├── chaos_occupynetwork
│   ├── chaos_stopprocess
│   ├── chaos_tcnetwork
│   ├── chaosblade-cplus-spec.yaml
│   ├── chaosblade-docker-spec-0.6.0.yaml
│   ├── chaosblade-jvm-spec-0.6.0.yaml
│   ├── chaosblade-k8s-spec-0.6.0.yaml
│   ├── chaosblade-os-spec-0.6.0.yaml
│   └── tools.jar
├── blade
└── lib
    ├── cplus
    │   ├── chaosblade-exec-cplus.jar
    │   └── script
    │       ├── shell_break_and_return.sh
    │       ├── shell_break_and_return_attach.sh
    │       ├── shell_check_process_duplicate.sh
    │       ├── shell_check_process_id.sh
    │       ├── shell_initialization.sh
    │       ├── shell_modify_variable.sh
    │       ├── shell_modify_variable_attch.sh
    │       ├── shell_remove_process.sh
    │       ├── shell_response_delay.sh
    │       └── shell_response_delay_attach.sh
    └── sandbox
        ├── bin
        │   └── sandbox.sh
        ├── cfg
        │   ├── sandbox-logback.xml
        │   ├── sandbox.properties
        │   └── version
        ├── example
        │   └── sandbox-debug-module.jar
        ├── install-local.sh
        ├── lib
        │   ├── sandbox-agent.jar
        │   ├── sandbox-core.jar
        │   └── sandbox-spy.jar
        ├── module
        │   ├── chaosblade-java-agent-0.6.0.jar
        │   └── sandbox-mgr-module.jar
        ├── provider
        │   └── sandbox-mgr-provider.jar
        └── sandbox-module

12 directories, 41 files

chaosblade-operator

此项目编译用于 Kubernetes 场景所用的 yaml 文件和 chaosblade-operator 镜像。项目地址:https://github.com/chaosblade-io/chaosblade-operator

编译环境:go1.13+、operator-sdk、docker 目标平台:Linux、Mac 编译目标:build_all 编译命令:

make build_all

编译结果:

.
└── bin
    ├── chaos_fuse
    └── chaosblade-k8s-spec-0.6.0.yaml

chaosblade-operator 镜像:

chaosblade-operator                                                   0.6.0                   c1cfb831e20f        About a minute ago   126MB

chaosblade-tool image

包含 ChaosBlade 工具的镜像,在 chaosblade 项目 下编译,需要确保 chaosblade 已编译了 Linux 平台版本包,即在 chaosblade/target 目录下包含 Linux 版本的 chaosblade-VERSION.tar.gz 包。

编译环境:docker 目标平台:Linux 编译目标:build_image 编译命令:

make build_image

编译结果:

chaosblade-tool                                                       0.6.0                   e6ac3e3c5b8a        3 weeks ago         302MB