Bitbucket is getting a new navigation

We’re rolling out these changes, so the documentation may not match your experience in the Bitbucket Cloud app. Read about the new Bitbucket navigation

パイプの記述の高度なテクニック

パイプ変数での特殊文字の引用とエスケープ

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.json

For 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

 

 

さらにヘルプが必要ですか?

アトラシアン コミュニティをご利用ください。