パイプの記述の高度なテクニック
パイプ変数での特殊文字の引用とエスケープ
Variables that are used in pipes get passed between lots of different systems, and if you are not careful this can lead to unexpected results. For example, if someone using your pipe writes: MY_VARIABLE: "\\\\" then the value of MY_VARIABLE your pipe receives is '\'!
(You can read more about issues escaping characters, on Community).
この種の問題を回避するのに役立ついくつかのベスト プラクティスがあります。
複数の変数を持つコマンドを使用する必要がある場合、変数を別々に使用し、1 つにまとめないでください。
シェル スクリプトでは常に二重引用符を使用して変数を参照します。
推奨:command --option1 "$VAR1" --option2 "$VAR2" --option3 "$VAR3"
非推奨:ARGS="--option1 $VAR1 --option2 $VAR2 --option3 $VAR3"command $ARGS
値のリスト (追加の引数のリストなど) や配列を含む変数を使用する必要がある場合、yaml で直接定義できます。例:
variables:
EXTRA_ARGS: ['--description', 'text containing spaces', '--verbose']パイプ内では、これにより次の変数が生成されます。
EXTRA_ARGS_COUNT: 3
EXTRA_ARGS_0: --description
EXTRA_ARGS_1: text containing spaces
EXTRA_ARGS_2: --verboseこの一連の変数をパイプ内で配列型の変数に変換する必要がある場合、関数を定義する次の bash スクリプトなどを使用できます。
init_array_var() {
local array_var=${1}
local count_var=${array_var}_COUNT
for (( i = 0; i < ${!count_var:=0}; i++ ))
do
eval ${array_var}[$i]='$'${array_var}_${i}
done
}関数を使用するには、次のように記述します。
init_array_var 'EXTRA_ARGS'
command --option1 "$VAR1" --option2 "$VAR2" --option3 "$VAR3" "${EXTRA_ARGS[@]}"パイプ間での情報の共有
パイプ間でステータスやその他の情報を共有できるようにしたい場合、パイプラインが有効な間のみ存在する 2 つの組み込み変数があります。
BITBUCKET_PIPE_STORAGE_DIRこのディレクトリを使用して、以降の実行パイプ間で情報やアーティファクトを渡すことができます。BITBUCKET_PIPE_SHARED_STORAGE_DIR別のパイプから情報を取得する必要がある場合は、このディレクトリから読み取ることができます。
そのため、パイプラインの後のステップで自身のパイプを使用したデータを保存したい場合、次のようなスクリプトを作成できます。
#!/bin/sh
set -e
echo "{'key': 'value'}" >> $BITBUCKET_PIPE_STORAGE_DIR/<filename>このデータをあとのステップで読み取るには、次の手順を実行します。
#!/bin/sh
set -e
cat $BITBUCKET_PIPE_STORAGE_DIR/<filename>別のパイプのデータを読み取ることもできます。
これを行うには、使用するパイプのキーと、それを所有するアカウントを知っておく必要があります。
#!/bin/sh
set -e
cat $BITBUCKET_PIPE_SHARED_STORAGE_DIR/<pipeAccount>/<pipeName>/metadata.jsonFor example: To access the aws-lambda-deploy-env file from the aws-lambda-deploy pipe you would write:
#!/bin/sh
set -e
cat $BITBUCKET_PIPE_SHARED_STORAGE_DIR/atlassian/aws-lambda-deploy/aws-lamda-deploy-env
この内容はお役に立ちましたか?