캘리퍼는 @hyperledger/caliper-cli 패키지와 hyperledger/caliper 도커 이미지로 퍼블리싱되었다. 둘 모두 CLI 바이너리를 갖고 있다. 사용가능한 버전 및 그 복잡성은 NPM으로 설치하기와 도커 이미지 사용하기 섹션을 참조해라.
캘리퍼 설치 및 실행은 대개 아래 단계를 따르고, 나머지 섹션에서 디테일을 설명한다 :
bind
커맨드를 실행한다. 이 단계는 선택된 플랫폼의 SDK 패키지의 지정된 버전을 가져온다.나머지 문서에서 사용하는 예시는 캘리퍼 워크스페이스로 캘리퍼 벤치마크 리포지토리를 사용한다. 이것은 벤치마킹을 위한 다양한 샘플 아티팩트를 갖고 있다.
중요
사용하는 캘리퍼 버전과 일치하는 적절한 리포지토리 태그/커밋을 선택했는지 확인하자.
caliper-benchmarks
리포지토리를 복사하기 위해 아래를 실행해라 :
git clone https://github.com/hyperledger/caliper-benchmarks.git
cd caliper-benchmarks
git checkout <원하는 캘리퍼 버전>
참고
커스텀 벤치마크를 구동하고 있는 경우 디렉토리 경로(와 다른 관련된 구성들)을 적절히 바꿔라.
어플리케이션에 캘리퍼 패키지를 넣기 전 까지 CLI를 이용해 캘리퍼를 사용할 가능성이 높다. 다른 섹션은 캘리퍼 CLI를 얻고 호출하는 다른 방법을 소개한다. 이 섹션은 단순히 CLI가 제공하는 API에 집중한다.
참고
아래 예시는 CLI를 ~/caliper-benchmarks 디렉토리에 로컬로 설치했다고 가정한다. 따라서
npx
호출이caliper
바이너리 이전에 발생한다. 구체적인 내용은 로컬 NPM 설치 섹션을 참조해라.
CLI 엔트리 포인트는 caliper
바이너리다. 버전을 확인함으로써 CLI가 제대로 설치되었는지 알 수 있다 :
user@ubuntu:~/caliper-benchmarks$ npx caliper --version
v0.4.0
CLI는 상이한 작업들을 수행하기 위한 여러 커맨드들을 제공한다. 가능한 커맨드들과 그에 대한 설명을 확인하려면 아래를 실행해라 :
user@ubuntu:~/caliper-benchmarks$ npx caliper --help
caliper <command>
Commands:
caliper.js bind [options] Bind Caliper to a specific SUT and its SDK version
caliper.js launch <subcommand> Launch a Caliper process either in a manager or worker role.
caliper.js unbind [options] Unbind Caliper from a previously bound SUT and its SDK version
caliper.js completion generate completion script
Options:
--help, -h Show usage information [boolean]
--version Show version information [boolean]
Examples:
caliper bind
caliper unbind
caliper launch manager
caliper launch worker
For more information on Hyperledger Caliper: https://hyperledger.github.io/caliper/
또한 다음 하위섹션에서 설명되는 방법으로 특정한 커맨드에 대한 도움말 페이지를 요청할 수 있다.
참고
커맨드 옵션은 커맨드 라인을 통해서, 또는 캘리퍼 구성 매커니즘으로 지원되는 다양한 다른 소스들에 의해 설정된다. 이 유연성은 CLI를 여러 상이한 환경에 추가하기 쉽게 한다.
캘리퍼를 얻는 방법은 NPX 패키지 설치나 도커 이미지 가져오기만큼 쉽다. 하지만 캘리퍼에게 대상으로 설정한 플랫폼이 무엇인지, 어떤 플랫폼 SDK 버전을 사용하는지 지정하기 위해서 추가 단계가 필요하다. 이 단계는 binding이라고 불리며, binding
CLI 커맨드로 실행가능하다.
커맨드의 도움말 페이지를 보기 위해 실행하자 :
user@ubuntu:~/caliper-benchmarks$ npx caliper bind --help
//결과
Usage:
caliper bind --caliper-bind-sut fabric:1.4.1 --caliper-bind-cwd ./ --caliper-bind-args="-g"
Options:
--help, -h Show usage information [boolean] //사용 정보 설명
--version Show version information [boolean] // 버전 정보
--caliper-bind-sut The name and version of the platform and its SDK to bind to [string] //플랫폼 및 바인드되어야하는 SDK의 이름과 버전
--caliper-bind-cwd The working directory for performing the SDK install [string] // SDK 설치 수행 워킹디렉토리
--caliper-bind-args Additional arguments to pass to "npm install". Use the "=" notation when setting this parameter [string] //"npm install"에 넘겨주는 추가 인수. 이 파라미터 설정을 위해서는 "=" 표기법을 사용해라
--caliper-bind-file Yaml file to override default (supported) package versions when binding an SDK [string] // SDK 바인딩 시 디폴트 패키지를 오버라이딩하는 Yaml 파일
바인딩 단계는 기술적으로 CLI로 완전히 관리되는 적절한 패키지 및 설치 설정이 포함된 추가 npm install
호출로 구성된다.
커맨드 설정에 아래 파라미터들을 쓸 수 있다 :
fabric:1.4.1
)npm install
커맨드가 수행되어야 하는 디렉토리. 기본값은 현재 작업 디렉토리다.npm install
로 넘겨져야 하는 추가 인수. (예: --save
)아래 SUT 이름과 SDK 버전 결합이 지원된다 :
참고
타겟 SUT 버전과 바인딩하는 SDK가 호환되는지 확인해라
참고
Besu의 모든 패치 버전은 각각의 버전으로 지원된다.
1.3.2
SUT는 deprecated 되었으므로 대신에1.3
을 사용하기를 추천한다.
bind
명령어는 동일한 SUT 버전에 대해 여러 벤치마크를 실행할 계획일 때 유용하다. 한번 바인딩하면 재바인딩 필요 없이 서로 다른 벤치마크를 작동시킬 수 있다.
다음 섹션에서 볼 수 있듯, 필수 파라미터를 제공한다면 매니저와 워커 프로세스를 위한 launcher
커맨드를 바인딩에 사용할 수 있다.
참고
caliper-bind-file
파라미터를 YAML 파일 경로로 지정해 빌트인 바인딩을 오버라이딩할수있다. 파일은 여기서 설명되는 기본 바인딩 파일의 구조와 일치해야 한다.
이 방법으로 아직 캘리퍼가 지원하지 않는 실험적 SDK 버전을 사용할 수 있다.이는 그러한 SDK 버전에 대해 도움을 제공할 수 없음을 의미한다!
측정 또는 프로젝트 개발 동안 상이한 SUT SDK 버전/바인딩 간 전환이 필요할 수 있다. SUT SDK에 따라, 단순히 다른 버전으로 재바인딩하는 것은 원치 않는 패키지를 남겨 모호한 오류를 발생시킬 수 있다.
이것을 피하기 위해, CLI는 unbind
커맨드를 제공한다. 이 커맨드는 bind
와 같다(심지어 같은 인수를 사용한다).
하지만 바인딩 사양에 있는 패키지를 설치하는 대신 이것은 패키지를 제거하고 앞선 바인딩의 흔적을 남겨두지 않는다.
도움말 페이지를 보려면 실행하자 :
user@ubuntu:~/caliper-benchmarks$ npx caliper unbind --help
Usage:
caliper unbind --caliper-bind-sut fabric:1.4.1 --caliper-bind-cwd ./ --caliper-bind-args="-g"
Options:
--help, -h Show usage information [boolean]
--version Show version information [boolean]
--caliper-bind-sut The name and version of the platform and its SDK to unbind [string] //언바인드하는 플랫폼 및 SDK의 이름과 버전
--caliper-bind-cwd The working directory for performing the SDK removal [string] //SDK 제거를 수행할 워킹디렉토리
--caliper-bind-args Additional arguments to pass to "npm remove". Use the "=" notation when setting this parameter [string] //추가 인수 (npm remove에 전달하는). 파라미터 설정을 위해 "=" 표기를 사용해라
--caliper-bind-file Yaml file to override default (supported) package versions when unbinding an SDK [string] //SDK를 언바인딩할때 디폴트 패키지를 오버라이딩하는 yaml 파일
참고
글로벌하게 bind/unbind를 실행하거나(캘리퍼 도커 이미지에 의해 수행되는 것과 같은 방식이다), binding/unbinding 수행 시
--caliper-bind-args="--save-dev"
인자를 사용하는 것을 추천한다.
이것은npm
이 패키지를 올바르게 제거할 것을 보장한다.
캘리퍼는 워크로드를 생성하기 위해 워커 프로세스를 사용해 벤치마크를 구동한다. 또한 워커 프로세스 간 서로 다른 벤치마크 라운드를 조정하기 위해 매니저 프로세스를 사용한다. 따라서, CLI는 매니저와 워커 프로세스를 런칭하기 위한 명령어를 제공한다.
도움말 페이지를 보기 위해 실행해라 :
user@ubuntu:~/caliper-benchmarks$ npx caliper launch --help
caliper launch <subcommand>
Launch a Caliper process either in a manager or worker role.
//매니저 또는 워커의 역할로 캘리퍼 프로세스를 런칭한다.
Commands:
// 벤치마크 구동을 조정하기 위한 매니저 프로세스를 런칭한다
caliper launch manager [options] Launch a Caliper manager process to coordinate the benchmark run
// 벤치마크 워크로드를 생산하기 위한 워커 프로세스를 런칭한다
caliper launch worker [options] Launch a Caliper worker process to generate the benchmark workload
Options:
--help, -h Show usage information [boolean]
--version Show version information [boolean]
캘리퍼 매니저 프로세스는 분산된 벤치마크 실행 시작점으로 간주될 수 있다. 이것은 벤치마크 실행 동안 워커 프로세스를 조정(그리고 선택적으로 생성)한다.
도움말 페이지를 보기 위해서는 실행해라:
user@ubuntu:~/caliper-benchmarks$ npx caliper launch manager --help
Usage:
caliper launch manager --caliper-bind-sut fabric:1.4.1 [other options]
Options:
--help, -h Show usage information [boolean]
--version Show version information [boolean]
--caliper-bind-sut The name and version of the platform to bind to [string]
--caliper-bind-cwd The working directory for performing the SDK install [string]
--caliper-bind-args Additional arguments to pass to "npm install". Use the "=" notation when setting this parameter [string]
--caliper-bind-file Yaml file to override default (supported) package versions when binding an SDK [string]
launch manager
프로세스는 bind
커맨드의 파라미터 또한 처리할 수 있다. 바인딩과 벤치마크 실행을 한번에 수행할 때 사용한다.
하지만 이 커맨드는 아래 설정들을 반드시 설정해야 한다 :
캘리퍼 워커 프로세스는 벤치마크가 실행되는 동안 워크로드를 생성한다. 일반적으로 둘 이상의 워커 프로세스가 작동하고 단일 매니저 프로세스에 의해 조정된다.
도움말 페이지를 보기 위해 실행해라:
user@ubuntu:~/caliper-benchmarks$ npx caliper launch worker --help
Usage:
caliper launch manager --caliper-bind-sut fabric:1.4.1 [other options]
Options:
--help, -h Show usage information [boolean]
--version Show version information [boolean]
--caliper-bind-sut The name and version of the platform to bind to [string]
--caliper-bind-cwd The working directory for performing the SDK install [string]
--caliper-bind-args Additional arguments to pass to "npm install". Use the "=" notation when setting this parameter [string]
--caliper-bind-file Yaml file to override default (supported) package versions when binding an SDK [string]
매니저 프로세스와 같은 방법으로 워커 프로세스를 구성할 수 있다. 추가 바인딩 스텝을 포함하고 앞선 세션에서 설명한 세 가지 필수 파라미터를 요구한다.
캘리퍼 커맨드는 모든 런타임 구성 설정을 전달할 수 있다. 이 커맨드들의 하위 집합은 흐름 제어(플로우 컨트롤; 아래 나열된 캘리퍼 페이즈를 직접 제어하기 위함)을 위한 것이다:
정확한 플래그 사용을 통해 위 페이즈를 뛰어넘거나 한 페이즈만을 수행할 수 있다. 예를 들어, --caliper-flow-only-test
플래그를 사용함으로써 캘리퍼 타겟이 될 수 있는 기존 네트워크를 가지는 것이 일반적이다.
캘리퍼는 @hyperledger/caliper-cli NPM package로 퍼블리싱되었다. 이것은 모든 지원되는 어댑터를 한번에 설치하는 기능을 지원한다.
캘리퍼 설치 설명 전에 CLI 패키지의 Versions
페이지를 보자. 태그 및 버전의 목록을 볼 수 있을 것이다. NPM이 낯설다면 버전을 소스 코드의 특정한 버전(duh)의 불변하는 포인터로 생각하자.
태그는 특정 버전에 대한 변화가능한 포인터이다. 그래서 태그는 가리키는 곳을 바꿀 수 있다.
하지만 이것이 왜 중요할까? 캘리퍼가 아직 릴리즈 전 라이프 사이클에 머물러 있기 때문이다(< v.1.0.0). 이것은 사소한 버전 범프조차 브레이킹 체인지를 만들 수 있다는 것을 뜻한다. 그리고 프로젝트에 캘리퍼를 사용하는 경우 캘리퍼를 설치하는 방법에 따라 놀라움을 겪을 수 있다는 것을 뜻한다.
참고
캘리퍼가 v.1.0.0에 도달할 때 까지 NPM으로 설치를 할 때 명시적인 버전 넘버를 사용해라. 즉, 지금은 NPM의 필수 방해일 뿐인
latest
와unstable
플래그는 잊어버리자.
나중에 볼 수 있듯, 도커 이미지를 위한 이런 플래그를 제공하지 않는다.
이제 플래그를 무시하고 마주칠 두 종류의 버전 넘버를 보자 :
0.2.0
: 이 형식의 버전 넘버는 해당 릴리즈가 관리자에 의해 안정적인 것으로 여겨진다는 것을 의미한다. 이런 버전은 caliper
와 caliper-benchmarks
리포지토리 양쪽 모두에 관련된 깃헙 태그를 가진다. 더해서, 문서 페이지의 매칭 버전을 통해 마지막 안정적 버전이 게시된다. 그러므로 이슈가 생길 때는 다른 버전을 정렬했는지 확인하길 바란다.0.4.0-unstable-20200206065953
: 이런 버전 "넘버"는 모든 merged pull request에 대해 게시되는 불안정한 릴리즈이고, 궁극적으로는 안정적인 버전이 될 것이다(예: 0.4.0). 이 방법으로 언제나 저장소의 마스터 브랜치와 관련된 NPM(그리고 도커)에 접근할 수 있다. 안정적인 릴리즈가 되기 전에 버그를 찾고 수정해 보자!참고
가장 최신 unstable 릴리즈는 언제나 관련 리포지토리의 최신 버전과 문서 페이지의
vNext
에 해당된다.
NPM에서 CLI를 설치하기 위해 아래 도구가 필요하다 :
참고
이것은 프로젝트에 캘리퍼를 설치하는 추천 방법이다. 프로젝트 의존성을 로컬로 유지하는 것은 여러 캘리퍼 프로젝트 설정을 쉽게 만든다. 글로벌 의존성은 새 벤치마크를 실행할 때마다 리빌딩되어야 한다(올바른 글로벌 의존성인지 확실히 하기 위해서이다).
npm init
(또는 npm init -y
)로 설정한다. 설정은 워크스페이스에서 한다(package.json
파일 등을 아직 갖고 있지 않다면).@hyperledger/caliper-cli@0.4.0
)한번에 적으면 다음과 같다:
user@ubuntu:~/caliper-benchmarks$ npm init -y
user@ubuntu:~/caliper-benchmarks$ npm install --only=prod \
@hyperledger/caliper-cli@0.4.0
user@ubuntu:~/caliper-benchmarks$ npx caliper bind \
--caliper-bind-sut fabric:1.4.0
user@ubuntu:~/caliper-benchmarks$ npx caliper launch manager \
--caliper-workspace . \
--caliper-benchconfig benchmarks/scenario/simple/config.yaml \
--caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml
매니저 프로세스를 런칭할 때 자동으로 바인딩이 수행되도록 할 수 있다(캘리퍼 런처 매니저의 추가 파라미터에 참고하자) :
user@ubuntu:~/caliper-benchmarks$ npm init -y
user@ubuntu:~/caliper-benchmarks$ npm install --only=prod \
@hyperledger/caliper-cli@0.4.0
user@ubuntu:~/caliper-benchmarks$ npx caliper launch manager \
--caliper-bind-sut fabric:1.4.0 \
--caliper-workspace . \
--caliper-benchconfig benchmarks/scenario/simple/config.yaml \
--caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml
참고
--only=prod
파라미터를 2단계에서 지정하는 것은 모든 플랫폼에 대한 디폴트 최신 SDK 의존성이 설치되지 않게 하기 위해서이다. 명시적인 바인딩을 수행하기 때문에(그리고 단일 플랫폼만을 위해서 수행하는 것이기 때문에), 이 방법은 추천되는 접근방식이고 저장공간과 시간을 절약할 수 있다.
참고
언제나 SUT버전, 바운드 SDK, 사용하는 아티팩트가 일치하는지 확인해라.
참고
캘리퍼 CLI를 글로벌로 설치하는 이유가 있는지 확인하자. 추천되는 접근 방식은 로컬 설치이다. 그렇게 하면 프로젝트가 독립적이고, 각각 다른 SUT(또는 다른 SUT 버전)을 타겟으로 삼는 여러 프로젝트를 (여러 디렉토리에) 쉽게 설정할 수 있다. 의존성을 글로벌 설치 또는 리빌딩하는 것은 까다로울 수 있다.
로컬 설치와 비교해 몇몇 마이너한 차이가 있다:
1. package.json
파일이 필요하지 않다.
2. 설치, 바인딩, 구현 단계를 어디서든 수행할 수 있다(즉, 작업공간만 지정하면 된다).
3. CLI를 글로벌하게 설치할 필요가 있다(-g
플래그).
4. 바인딩 단계에서 패키지를 글로벌하게 설치해야 한다(--caliper-bind-args
파라미터).
5. npx
커맨드를 생략할 수 있다. caliper
가 PATH
에 포함될 것이기 때문이다.
user@ubuntu:~$ npm install -g --only=prod @hyperledger/caliper-cli@0.4.0
user@ubuntu:~$ caliper bind \
--caliper-bind-sut fabric:1.4.0 \
--caliper-bind-args=-g
user@ubuntu:~$ caliper launch manager \
--caliper-workspace ~/caliper-benchmarks \
--caliper-benchconfig benchmarks/scenario/simple/config.yaml \
--caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml
참고
글로벌 설치를 위해서는 디렉토리를 작업공간으로 바꿀 필요가 없다. 단순히
--caliper-workspace ~/caliper-benchmarks
를 지정할 수 있다. 하지만 이 방법으로는 아티팩트의 상대 경로에 대한 커맨드라인의 자동 완성 기능을 활용할 수 없다.
NPM 설정에 따라, 사용자가 home
디렉토리 이외 공간에 대한 쓰기 권한이 필요할 수 있다. 이는 종종 접근 거부 에러를 일으킨다. 이 문제를 우회하기 위해서 여기를 참고할 수 있다.
캘리퍼는 hyperledger/caliper 도커 이미지로 퍼블리싱되었다. 이것은 모든 지원되는 어댑터에 단일 포인트 사용을 제공한다. 이 이미지는 가능한 작은 이미지 사이즈를 유지하기 위해 node:10.16-alpine 이미지를 기반으로 한다.
이미지의 중요한 properties는 다음과 같다:
/hyperledger/caliper/workspace
node
사용자에 의해 실행된다.CALIPER_WORKSPACE
는 /hyperledger/caliper/workspace
로 설정된다.caliper
라이브러리다.CALIPER_BIND_ARGS
는 -g
로 설정된다. 그래서 바인딩 단계도 글로벌하게 이루어진다.--version
으로 설정된다. 이것은 이미지를 사용할 때 오버라이딩된다. 이는 다음과 같은 의미를 갖는다:
1. 로컬 워크스페이스를 /hyperledger/caliper/workspace
컨테이너 디렉토리에 마운트하는 것을 추천한다. 기본 CALIPER_WORKSPACE
환경변수 값이 이 위치를 가리키고 있으므로, 이것을 명시적으로 설정할 필요가 없어 수정해야 하는 설정이 하나 줄어든다.
2. launch manager
와 launch worker
중 실행할 커맨드를 선택해야 한다. 정확한 구문은 도커 및 Docker-compose 예제를 확인하자.
3. NPM 설치 바인딩 단계는 여전히 필요하다. 어떤 커맨드를 사용하든, 필요한 바인딩 파라미터만 설정하면 된다. 이를 수행하는 가장 쉬운 방법은 CALIPER_BIND_SUT
환경변수를 통하는 것이다.
4. 런칭된 매니저 또는 워커에 필요한 파라미터를 설정해야 한다. 가장 쉬운 방법은 CALIPER_BENCHCONFI
와 CALIPER_NETWORKCONFIG
환경변수를 사용하는 것이다.
(위에서 추천한 방법에 따라) 캘리퍼 컨테이너를 실행하는 방법은 다음과 같다:
1. 필요한 이미지 버전을 선택한다.
2. 로컬 워킹 디렉토리를 컨테이너 디렉토리로 마운트한다.
3. 필요한 바인딩 및 구동 파라미터를 설정한다.
참고
최신(또는 기타) 태그는 지원되지 않는다. 즉, 명시적으로 원하는 이미지 버전을 지정해야한다:
hyperledger/caliper:0.4.0
. 이것은 NPM 패키지 설정에 추천되는 접근 방식과 같다.
이를 함께 모아서, 명확성을 위해 여러 줄로 나누고 컨테이너 이름을 caliper
로 지정하면 다음과 같다:
user@ubuntu:~/caliper-benchmarks$ docker run \
-v $PWD:/hyperledger/caliper/workspace \
-e CALIPER_BIND_SUT=fabric:1.4.0 \
-e CALIPER_BENCHCONFIG=benchmarks/scenario/simple/config.yaml \
-e CALIPER_NETWORKCONFIG=networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml \
--name caliper hyperledger/caliper:0.4.0 launch manager
참고
위 네트워크 구성 파일은 로컬 도커 기반 패브릭 네트워크를 스핀업하기 위한 시작 스크립트를 포함하고 있는데, 이 형식에서는 동작하지 않는다. 따라서 시작 및 종료 스크립트를 확실히 제거하고 노드 엔드포인트를 원격 주소로 바꿔야 한다.
위 커맨드는 docker-compose.yaml
파일로 변환했을 때 더 읽기 쉽다:
version: '2'
services:
caliper:
container_name: caliper
image: hyperledger/caliper:0.4.0
command: launch manager
environment:
- CALIPER_BIND_SUT=fabric:1.4.0
- CALIPER_BENCHCONFIG=benchmarks/scenario/simple/config.yaml
- CALIPER_NETWORKCONFIG=networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml
volumes:
- ~/caliper-benchmarks:/hyperledger/caliper/workspace
docker-compose.yaml
파일이 위치한 디렉토리로 이동하고 단순히 실행하면 된다:
docker-compose up
참고
이 섹션은 pull request 이전에 캘리퍼 코드베이스를 수정하고 변경 사항을 로컬에서 실험하려는 개발자를 위한 것이다. 변화를 올바르게 전파하려면 테스트하고 싶은 수정 작업을 수행할 때마다 아래 단계를 수행해야 한다.
캘리퍼 코드베이스를 수정하는 워크플로우는 일반적으로 다음 단계들로 구성된다:
1. 리포지토리 부트스트래핑
2. 코드 수정 및 테스트
3. 패키지 변화를 로컬에 퍼블리싱
4. 도커 이미지 빌드
리포지토리의 기본 의존성을 설치하고 다른 패키지 간 cross-reference를 해결하기 위해, 반드시 아래 커맨드들을 리포지토리 디렉토리 루트에서 실행해야 한다:
1. npm i
: Lerna와 라이선스 체킹 패키지같은 development-time dependencies를 설치한다.
2. npm run repoclean
: 리포지토리에 있는 모든 패키지의 node_modules
디렉토리를 정리한다. 새로 복사된 리포지토리에는 필요하지 않다.
3. npm run bootstrap
: 리포지토리에 있는 모든 패키지의 dependencies를 설치하고, 모든 패키지 간 cross-dependencies를 연결시킨다. 설치를 마칠 때 까지 시간이 걸릴 것이다. ctrl+c
로 중단할 경우 package.json
파일을 먼저 복원시킨 후 npm run bootstrap
을 다시 실행한다.
또는 한 줄로 실행한다:
user@ubuntu:~/caliper$ npm i && npm run repoclean -- --yes && npm run bootstrap
주의
위 커맨드 중 어떤 것이든
sudo
로 실행하지 말아야 한다. 부트스트랩 프로세스가 실패한다.
변경사항을 테스트하는 가장 쉬운 방법은 CI 프로세스를 로컬에서 구동시키는 것이다. 현재 CI 프로세스는 특정 어댑터들의 벤치마크를 동작시킨다. BENCHMARK
환경변수를 플랫폼 이름으로 설정하고 리포지토리 루트 디렉토리에서 아래 스크립트를 작동시킴으로써 테스트들을 일으킬 수 있다:
user@ubuntu:~/caliper$ BENCHMARK=fabric ./.travis/benchmark-integration-test-direct.sh
아래 플랫폼 테스트가 가능하다(즉, 아래 값들이 유효한 BENCHMARK
값이다):
스크립트는 다음 테스트들을 수행한다 (그리고 성공적인 pull request에도 필수적이다):
다른 예시를 작동시키고 싶을 경우, 어떤 로컬 퍼블리싱 없이 packages/caliper-cli 디렉토리에서 CLI에 직접 접근할 수 있다.
참고
이 케이스에서 SDK 의존성은 고정되어 있다 (바인딩 단계가 이 접근방식에서는 지원되지 않는다). 그리고 그것들을 해당 패키지의
package.json
파일에서 확인 및 변화시킬 수 있다. 이 경우 리포지토리는 다시 부트스트랩되어야 한다.
user@ubuntu:~/caliper$ node ./packages/caliper-cli/caliper.js launch manager \
--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를 통해 테스트할 수 있다. 이를 수행하기 위한 단계는 다음과 같다:
1. 퍼블리싱을 위한 로컬 Verdaccio 서버를 시작한다.
2. 로컬 및 수정 가능한 캘리퍼 리포지토리에서 Verdaccio 서버로 패키지를 퍼블리싱한다.
3. Verdaccio 서버로부터 CLI를 설치하고 바인딩한다.
4. 통합 테스트 또는 샘플 벤치마크를 구동한다.
packages/caliper-publish
디렉토리는 다음 단계들을 쉽게 관리하기 위한 내부 CLI를 가지고 있다. 그러므로 아래 섹션의 커멘드들은 반드시 packages/caliper-publish
디렉토리에서 실행되어야 한다:
user@ubuntu:~/caliper$ cd ./packages/caliper-publish
주의
아래 CLI 커맨드들과 서브커맨드들에 대한 더 자세한 내용을 알아보려면
--help
플래그를 사용하자.
로컬 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
를 리스닝한다.
Verdaccio가 구동되면 아래 커맨드를 실행해 모든 캘리퍼 패키지를 로컬로 퍼블리싱할 수 있다:
user@ubuntu:~/caliper/packages/caliper-publish$ ./publish.js npm --registry "http://localhost:4873"
...
+ @hyperledger/caliper-core@0.4.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-core@0.4.0-unstable-20200206065953
...
+ @hyperledger/caliper-fabric@0.4.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-fabric@0.4.0-unstable-20200206065953
...
+ @hyperledger/caliper-cli@0.4.0-unstable-20200206065953
[PUBLISH] Published package @hyperledger/caliper-cli@0.4.0-unstable-20200206065953
로그에 보이는 동적 버전 번호를 기록해 두어야 한다. Verdaccio로부터 수정된 캘리퍼 버전을 설치하기 위해 필요하다 (unstable
태그 또한 NPM에 존재하므로, Verdaccio가 로컬 버전 대신 해당 버전을 가져올 수 있다).
퍼블리시된 패키지는 버전에 초-정밀(second-precision) 타임스탬프를 가지고 있기 때문에, Verdaccio 서버를 재시작하거나 패키지 충돌을 걱정할 필요 없이 즉시 변경사항을 리퍼블리싱할 수 있다.
패키지가 로컬 Verdaccio 서버에 퍼블리싱되고 나면 일반적인 NPM 설치 접근 방식을 사용할 수 있다. 유일한 차이점은 기본 퍼블릭 NPM 레지스트리 대신 로컬 Verdaccio 레지스트리를 설치 소스로 지정한다는 것이다.
user@ubuntu:~/caliper-benchmarks$ npm init -y
user@ubuntu:~/caliper-benchmarks$ npm install --registry=http://localhost:4873 --only=prod \
@hyperledger/caliper-cli@0.4.0-unstable-20200206065953
user@ubuntu:~/caliper-benchmarks$ npx caliper bind --caliper-bind-sut fabric:1.4.0
user@ubuntu:~/caliper-benchmarks$ npx caliper launch manager \
--caliper-workspace . \
--caliper-benchconfig benchmarks/scenario/simple/config.yaml \
--caliper-networkconfig networks/fabric/fabric-v1.4.1/2org1peergoleveldb/fabric-go.yaml
주의
캘리퍼 패키지에 대해서만 로컬 레지스트리를 사용했다. 바인딩은 퍼블릭 NPM 레지스트리를 통해 일어난다. 더해서, npx와 새로 설치된 CLI 바이너리를 통해 명령을 수행했다(즉, CLI 코드 파일을 직접 호출하지 않는다).
수정된 패키지가 로컬 Verdaccio 서버에 퍼블리싱되면 도커 이미지를 리빌딩할 수 있다. Dockerfile
은 packages/caliper-publish
디렉토리에 있다.
도커 이미지 리빌딩을 위해 아래를 실행한다:
user@ubuntu:~/caliper/packages/caliper-publish$ ./publish.js docker
...
Successfully tagged hyperledger/caliper:manager-unstable-20200206065953
[BUILD] Built Docker image "hyperledger/caliper:manager-unstable-20200206065953"
이제 이전 섹션에서 설명한 대로 도커 기반 벤치마킹을 진행할 수 있다.
주의
로컬로 퍼블리싱한 패키지 작업이 끝나면 아래 방법을 통해 정리할 수 있다:
user@ubuntu:~/caliper/packages/caliper-publish$ ./publish.js verdaccio stop
The Caliper codebase is released under the Apache 2.0 license. Any documentation developed by the Caliper Project is licensed under the Creative Commons Attribution 4.0 International License. You may obtain a copy of the license, titled CC-BY-4.0, at http://creativecommons.org/licenses/by/4.0/.