从源代码安装Caliper
修改Caliper的源码的流程一般包含以下步骤:
- 引导软件仓库
- 修改、测试代码
- 本地发布NPM包
- 构建Docker镜像
启动引导软件仓库
要安装基本的依赖包,以及解析不同包之间的交叉依赖,需要 在仓库的根目录执行以下命令:
- npm i:安装开发期依赖,例如Lerna等开发包
- npm run repoclean:清理node_mudles目录,新克隆的仓库不需要这个步骤
- npm run bootstrap:安装所有的依赖,并在交叉依赖的包之间建立连接。这需要 花一点时间。如果用ctrl+c中断的话,请首先恢复package.json文件,然后再次 运行npm run bootstrap
具体命令可以写成一行:
user@hubwiz:~/caliper$ npm i && npm run repoclean -- --yes && npm run bootstrap
测试Caliper代码
测试你修改的代码最简单的方法是本地运行CI过程。目前,CI进程为特定的 适配器执行基准测试。你可以在根目录运行以下脚本来触发这些基准测试, 记得设置BENCHMARK环境变量为指定的平台名称:
user@hubwiz:~/caliper$ BENCHMARK=fabric ./.travis/benchmark-integration-test-direct.sh
BENCHMARK可以设置为以下值:
- besu
- ethereum
- fabric
- fisco-bcos
- sawtooth
脚本将执行以下测试:
- 语法检查
- 许可协议头检查
- 单元测试
- 运行示例的基准测试
如果要运行其他示例,你可以直接使用packages/caliper-cli目录下的 caliper命令行程序,不必本地发布:
user@hubwiz:~/caliper$ node ./packages/caliper-cli/caliper.js launch master \
--caliper-workspace ~/caliper-benchmarks \
--caliper-benchconfig benchmarks/scenario/simple/config.yaml \
--caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml
发布到本地NPM仓库
可以利用本地NPM代理服务器Verdaccio来测试NPM发布和安装,主要步骤包括:
- 启动本地的Verdaccio服务
- 从本地修改后的Caliper仓库发布NPM包到Verdaccio服务器
- 从Verdaccio服务器安装并绑定caliper命令行
- 运行集成测试或其他任何示例的基准测试
packages/caliper-publish
目录包含了内置的命令行工具来管理上述步骤。
因此以下命令必须在 packages/caliper-publish 目录执行:
user@hubwiz:~/caliper$ cd ./packages/caliper-publish
启动Verdaccio
要安装启动Verdaccio服务器,只需要运行以下命令:
user@ubuntu:~/caliper/packages/caliper-publish$ ./publish.js verdaccio start
...
[PM2] Spawning PM2 daemon with pm2_home=.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /home/user/projects/caliper/packages/caliper-tests-integration/node_modules/.bin/verdaccio in fork_mode (1 instance)
[PM2] Done.
┌───────────┬────┬──────┬────────┬────────┬─────────┬────────┬─────┬───────────┬────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ user │ watching │
├───────────┼────┼──────┼────────┼────────┼─────────┼────────┼─────┼───────────┼────────┼──────────┤
│ verdaccio │ 0 │ fork │ 115203 │ online │ 0 │ 0s │ 3% │ 25.8 MB │ user │ disabled │
└───────────┴────┴──────┴────────┴────────┴─────────┴────────┴─────┴───────────┴────────┴──────────┘
Use `pm2 show <id|name>` to get more details about an app
Verdaccio服务器现在已经在以下地址监听:http://localhost:4873
发布NPM包
一旦Verdaccio包运行起来,你就可以运行如下命令在本地发布Caliper包:
user@hubwiz:~/caliper/packages/caliper-publish$ ./publish.js npm --registry "http://localhost:4873"
...
+ @hyperledger/caliper-core@0.3.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-core@0.3.0-unstable-20200206065953
...
+ @hyperledger/caliper-fabric@0.3.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-fabric@0.3.0-unstable-20200206065953
...
+ @hyperledger/caliper-cli@0.3.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-cli@0.3.0-unstable-20200206065953
记录日志中的动态版本号,你在从Verdaccio安装Caliper时需要。
由于发布的包在版本中包含了时间戳,因此你可以重新发布任何修改而无需重新启动Verdaccio服务器。
运行基于NPM包的测试
一旦包发布到本地Verdaccio服务器,你就可以使用正常的NPM install方法来安装。 唯一的区别在于你需要指定使用本地的Verdaccio注册库作为安装源:
user@hubwiz:~/caliper-benchmarks$ npm init -y
user@hubwiz:~/caliper-benchmarks$ npm install --registry=http://localhost:4873 --only=prod \
@hyperledger/caliper-cli@0.3.0-unstable-20200206065953
user@hubwiz:~/caliper-benchmarks$ npx caliper bind --caliper-bind-sut fabric:1.4.0
user@hubwiz:~/caliper-benchmarks$ npx caliper launch master \
--caliper-workspace . \
--caliper-benchconfig benchmarks/scenario/simple/config.yaml \
--caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml
构建docker镜像
一旦修改的包发布到本地Verdaccio服务器,你就可以重新构建Docker镜像。 Dockerfile在packages/caliper-publish目录。
执行如下命令重新构建caliper的docker镜像:
user@hubwiz:~/caliper/packages/caliper-publish$ ./publish.js docker
...
Successfully tagged hyperledger/caliper:0.3.0-unstable-20200206065953
[BUILD] Built Docker image "hyperledger/caliper:0.3.0-unstable-20200206065953"