Solidity 和 Truffle 持续集成设置
与 Truffle 的持续集成 (CI) 非常适合在实施一组基本测试后进行开发。 它允许您运行非常长的测试。在合并拉取请求(opens in a new tab)之前确保所有测试通过,并使用其他工具跟踪各种统计数据。
我们将使用 Truffle Metacoin Box(opens in a new tab) 来设置我们的持续集成。 您可以选择 Travis CI 或 Circle CI。
设置 Travis CI
添加 Travis CI(opens in a new tab) 很简单。 您只需要将 .travis.yml
配置文件添加到项目的根目录:
1language: node_js2node_js:3 - 1045cache: npm67before_script:8 - echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p910script:11 - npm test显示全部
我们现在保持简单,只运行执行 Truffle 单元测试的测试脚本。 但我们有一个问题,在 Travis CI 机器上没有区块链。 一个简单的解决方法是使用命令 npm install ganache-cli
安装 ganache-cli,并在测试前运行它。 您可以通过在 npx truffle test
调用前添加一个带有 npx ganache-cli > /dev/null
行的 bash 脚本来实现这一点。 完整示例 bash 脚本(opens in a new tab)。
设置 Circle CI
CircleCi(opens in a new tab) 需要更长的配置文件。 额外的 npm ci
(opens in a new tab) 命令在 Travis 中自动完成。 它安装依赖项比 npm install
更快和更安全。 在测试之前,我们再次使用 Travis 版本中的同一个脚本来运行 ganache-cli。
1version: 223aliases:4 - &defaults5 docker:6 - image: circleci/node:1078 - &cache_key_node_modules9 key: v1-node_modules-{{ checksum "package-lock.json" }}1011jobs:12 dependencies:13 <<: *defaults14 steps:15 - checkout16 - restore_cache:17 <<: *cache_key_node_modules18 - run:19 name: Install npm dependencies20 command: |21 if [ ! -d node_modules ]; then22 npm ci23 fi24 - persist_to_workspace:25 root: .26 paths:27 - node_modules28 - build29 - save_cache:30 paths:31 - node_modules32 <<: *cache_key_node_modules3334 test:35 <<: *defaults36 steps:37 - checkout38 - attach_workspace:39 at: .40 - run:41 name: Unit tests42 command: npm test4344workflows:45 version: 246 everything:47 jobs:48 - dependencies49 - test:50 requires:51 - dependencies显示全部
添加 eth-gas-reporter 插件
Eth-gas-reporter 插件对于记录您的智能合约函数的 gas 成本相当有用。 在您的 CI 中使用它,将进一步有助于在添加拉取请求时显示差异。
第 1 步:安装 eth-gas-reporter 插件和
npm install --save-dev eth-gas-reporternpm install --save-dev @codechecks/client
第 2 步:在您的 truffle-config.js 内的 mocha 设置中加入该插件
1module.exports = {2 networks: { ... },3 mocha: {4 reporter: 'eth-gas-reporter',5 reporterOptions: {6 excludeContracts: ['Migrations']7 }8 }9};显示全部复制
第 3 步:在您的项目的根目录中添加一个 codechecks.yml
1checks:2 - name: eth-gas-reporter/codechecks
第 4 步:在 test 命令后运行 codechecks
- npm test- npx codechecks
第 5 步:创建一个 Codechecks 帐户
- 使用 Codechecks(opens in a new tab) 创建一个帐户。
- 将 GitHub 存储库添加到其中。
- 复制密钥并将
CC_SECRET=COPIED SECRET
添加到您的 CI( Travis(opens in a new tab) 参见这里,CircleCi(opens in a new tab) 参见这里)。 - 现在继续创建拉取请求。
这就完成了。 现在,您将看到一份关于您的拉取请求的 gas 成本变化的报告。
添加 solidity-coverage 插件
通过 solidity-coverage 插件,您可以检查您的代码路径有多少被您的测试所覆盖。 将此插件添加到您的 CI,设置好后,使用非常方便。
第 1 步:创建一个 metacoin 项目并安装覆盖工具
npm install --save-dev truffle coveralls solidity-coverage
第 2 步:将 solidity-coverage 添加到 truffle-config.js 的插件数组中。
1module.exports = {2 networks: {...},3 plugins: ["solidity-coverage"]4}复制
第 3 步:将 coverage 命令添加到 .travis.yml 或 Circle CI config.yml
- npx truffle run coverage- cat coverage/lcov.info | npx coveralls
Solidity coverage 启动了它自己的 ganache-cli,所以我们不必担心这个问题。 但不要替换常规测试命令,coverage 的 ganache-cli 工作方式不同,因此不能代替运行正常的单位测试。
第 4 步:将 repository 添加到 Coveralls
- 使用 Coveralls(opens in a new tab) 创建一个帐户
- 将 GitHub 存储库添加到其中。
- 现在继续创建拉取请求。
进一步的想法
- MythX(opens in a new tab):使用 MythX,您可以自动分析智能合约的安全性。 因此, 将其添加到您的 CI(opens in a new tab) 是非常有意义的。
- Linting(opens in a new tab):好代码可以在一定程度上通过 linting 工具强制执行。 Eslint(opens in a new tab) 非常适合 JavaScript 并且便于设置(opens in a new tab),而 Solhint(opens in a new tab) 可用于 Solidity。
- 长测试:有时您可能想要添加极端测试,例如使用数百名用户测试一个合约。 这需要很长时间。 不要在每次测试运行中都运行它们,而是将它们添加到 CI 中。
这是全部内容了。 持续集成是您开发中非常有用的战略。 您可以在 Truffle-CI-example(opens in a new tab) 查看完整的示例。 请务必移除 Circle-CI 或 Travis,只使用一个就够了!
上次修改时间: @tyevlag(opens in a new tab), Invalid DateTime