fabric externalbuilders 脚本说明

本文详细介绍了fabric externalbuilders的使用,包括detect、release、build和run四个关键操作,帮助读者理解如何进行外部部署流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/bin/bash

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0

set -euo pipefail   # set -e表示一旦脚本中有命令的返回值为非0,则脚本立即退出,后续命令不再执行;
# set -o pipefail表示在管道连接的命令序列中,只要有任何一个命令返回非0值,则整个管道返回非0值,即使最后一个命令返回0.
#set -u 就可以让脚本遇到错误时停止执行,并指出错误的行数信息。

if [ "$#" -ne 2 ]; then   # if 传参数量不等于两个,则退出
    >&2 echo "Expected 2 directories got $#"
    exit 2
fi

>&2 jq . "$2/metadata.json"

#>&2 也就是把结果输出到和标准错误一样;之前如果有定义标准错误重定向到某file文件,那么标准输出##也重定向到这个file文件。其中&的意思,可以看成是“The same as”、“与...一样”的意思
# jq -r .type 读取json文件中的 type字段的值
# tr [:upper:] [:lower:] 将大写字母全部替换为小写字母
if [ "$(jq -r .type "$2/metadata.json" | tr '[:upper:]' '[:lower:]')" != "golang" ]; then
    >&2 echo "only golang chaincode supported"
    exit 1
fi

if [[ "$(jq -r .label "$2/metadata.json")" != *-external* ]]; then
    >&2 echo "only golang chaincode named with an '-external' suffix is supported"
    exit 1
fi

exit 0

1:这是fabric externalbuilders(外部布署)的detect(检查操作)

2:fabric externalbuilders(外部布署)的release (释放操作)

#!/bin/bash

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0

set -euo pipefail

if [ "$#" -ne 2 ]; then
    >&2 echo "Expected 2 directories got $#"
    exit 2
fi

BLD="$1"
RELEASE="$2"

if [ -d "$BLD/META-INF" ] ; then  #-d是测试给定目录是否存在的运算符.
   cp -a "$BLD/META-INF"/* "$RELEASE" #cp -a 保留原文件属性的前提下复制文件
fi

3:fabric externalbuilders(外部布署)的build(构建操作)

#!/bin/bash

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0

set -euo pipefail

if [ "$#" -ne 3 ]; then
    >&2 echo "Expected 3 directories got $#"
    exit 1
fi

SOURCE=$1
METADATA=$2
OUTPUT=$3

>&2 jq . "$2/metadata.json"

if [[ "$(jq -r .label "$METADATA/metadata.json")" == *fail* ]]; then
    >&2 echo "Exiting with failure..."
    exit 1
fi

GO_PACKAGE_PATH="$(jq -r .path "$METADATA/metadata.json")"
if [ -f "$SOURCE/src/go.mod" ]; then
    cd "$SOURCE/src"
    go build -v -mod=readonly -o "$OUTPUT/chaincode" "$GO_PACKAGE_PATH"
else
    GO111MODULE=off go build -v  -o "$OUTPUT/chaincode" "$GO_PACKAGE_PATH"
fi

# copy index metadata if present
if [ -d "$SOURCE/META-INF" ]; then
    cp -a "$SOURCE/META-INF" "$OUTPUT"
fi

4:fabric externalbuilders(外部布署)的run(执行操作)

#!/bin/bash

# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0

set -euo pipefail

if [ "$#" -ne 2 ]; then
    >&2 echo "Expected 2 directories got $#"
    exit 1
fi

OUTPUT=$1
ARTIFACTS=$2

# shellcheck disable=SC2155
export CORE_CHAINCODE_ID_NAME="$(jq -r .chaincode_id "$ARTIFACTS/chaincode.json")"
export CORE_PEER_TLS_ENABLED="true"
export CORE_TLS_CLIENT_CERT_FILE="$ARTIFACTS/client.crt"
export CORE_TLS_CLIENT_KEY_FILE="$ARTIFACTS/client.key"
export CORE_PEER_TLS_ROOTCERT_FILE="$ARTIFACTS/root.crt"
export CORE_PEER_LOCALMSPID="$(jq -r .mspid "$ARTIFACTS/chaincode.json")"

jq -r .client_cert "$ARTIFACTS/chaincode.json" > "$CORE_TLS_CLIENT_CERT_FILE"   #将读出的流写进新的文件中
jq -r .client_key  "$ARTIFACTS/chaincode.json" > "$CORE_TLS_CLIENT_KEY_FILE"
jq -r .root_cert   "$ARTIFACTS/chaincode.json" > "$CORE_PEER_TLS_ROOTCERT_FILE"

if [ -z "$(jq -r .client_cert "$ARTIFACTS/chaincode.json")" ]; then
    export CORE_PEER_TLS_ENABLED="false"
fi

exec "$OUTPUT/chaincode" -peer.address="$(jq -r .peer_address "$ARTIFACTS/chaincode.json")"
# shell 内部的执行命令不启用新的shell进程。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值