Web3 DevOps:第1部分:编译和测试
为Ethereum区块链建立DevOps管道
在这个系列的前一篇文章《Web3 DevOps:系列》中,我解释了这个系列背后的动机。在这篇文章中,我们通过为我们的应用程序搭建脚手架以及学习如何编译和测试它来开始。
为了开始,我们需要一个项目。在这个例子中,我将使用Truffle来构建我的分布式应用(dApp)。
truffle unbox react myapp
这个命令创建了一个具有React前端和用Solidity编写的合同的项目。我用JavaScript写了我的测试,所以我删除了测试文件夹中的TestSimpleStorage.sol文件。我还使用了NPM而不是Yarn,所以我删除了客户端 文件夹中的yarn.lock文件。项目清理完毕后,我用git初始化并提交了我的代码。
git initgit branch -m maingit add -–allgit commit -a -m “init”
我为这篇文章创建了一个名为 "blog/part1"的新分支。
git checkout -b blog/part1
在我走得太远之前,我想确定如何使用Truffle在本地编译、测试和部署代码。我将在最后的管道中重复这些命令。
契约
编译
为了编译合同,我运行了以下命令。
truffle compile
这在client/src 文件夹下创建了一个新的合同 文件夹。
在client/src文件夹下的新合同文件夹
因为我将在我的管道中编译这些文件,我把它们添加到客户项目的*.gitignore*文件中。在我的.gitignore的底部,我添加了以下内容。
对.gitignore的修改
一旦我知道如何编译这些合同,我就需要对它们进行测试。
测试
我用以下命令对我的智能合约进行了测试。
truffle test
测试运行并成功了,但我注意到没有结果文件。为了在我的管道中显示结果,测试结果必须在一个可以在管道中发布的文件中。用Truffle运行的JavaScript测试使用Mocha。我可以通过更新我项目根部的truffle-config.js 文件来配置Mocha以创建一个结果文件。在网络部分的下面,我添加了这块代码。
truffle-config.js的Mocha部分
现在运行truffle测试命令,在项目的根部创建了一个TEST-results.xml 文件。这将被用来在我的管道中发布结果。这个文件不应该被git跟踪,所以我在项目的根部添加了一个*.gitignore*文件,并在该文件中添加了TEST-results.xml 。
将TEST-results.xml添加到.gitignore中
前端
构建
随着合同的编译和测试,我开始构建和测试前端。切换到客户 目录,运行下面的命令建立前端。
npm run build
测试
随着前端的建立,我运行了测试。
npm test
试图运行测试时,我很快意识到我有一个问题。前端使用Jest来运行测试,它提示我需要输入。
Jest提示输入
这在自动化管道中是行不通的。经过一些研究,我发现我可以通过设置一个环境变量来运行测试,从而让Jest知道它正在CI中运行。
CI=true npm test
这很有效,但现在我又回到了之前的问题。我需要一个包含测试结果的文件。获得一个与我的管道兼容的结果文件需要jest-junit包。我使用npm安装了它,并将其保存为开发依赖项。
npm install --save-dev jest-junit
安装了这个包后,我需要在我的npm测试命令中添加一些参数来生成文件。
CI=true npm test -- --reporters=default --reporters=jest-junit
这就生成了一个junit.xml 文件。这个文件不应该被追踪,所以在client 文件夹中的.gitignore文件的底部,我添加了以下内容。
在完成了所有的编译和测试后,我提交了所有的修改。
git commit -a -m "compile and test"
然后我把我的修改合并到main 。
git checkout maingit merge blog/part1
接下来要做的事情是部署我的智能合约。我将在下一篇文章中介绍这个问题,因为这正是事情变得非常棘手的地方。