yaml gitlab ciのbashで変数を失う

yaml gitlab ciのbashで変数を失う

助けが必要です

bashとgitlabを学んでいます。

操作できません

gitlab パイプライン.gitlab-ci.yml

variables:
    var1: test1
    var2: test2

stages:
  - build


build-job:   
  stage: build   
  script: 
    - |
      bash -s << EOF
      #!/bin/bash
      test1 () {
        echo $var1
        test3=$var1
      }
      test2 () {
        test1
        echo $var2
        echo $test3
      }
      
      test2
      EOF

「」

間違った答えを得た

「」

ジョブスクリプトの「step_script」ステップの実行00:00

$bash -s << EOF # 複数行のコマンドの折りたたみ

テスト1

テスト2

仕事の成功

不足している変数のテスト3

「」

同じbashスクリプトtest.sh

#!/bin/bash
test1 () {
echo $var1
test3=$var1
   }
test2 () {
test1
echo $var2
echo $test3
     }

test2

「」

$export var1 = テスト 1 $ エクスポート var2 = テスト 2

$sh テスト.sh

正しい答えを得ました。

テスト1テスト2テスト1

しかし、yamlコンストラクタは関数間でtest3変数を失いました。

gitlab ciでtest.shを実行する方法を知っていますが、yamlでテキストとして実行する必要がありますが、どうすればよいですか?

ありがとう

答え1

で述べたように私の答え前の質問については、ここに文書を引用する必要があります。そうでない場合、bash -c呼び出しシェルはスクリプトが実行される前に変数拡張(他の拡張を含む)を実行します。

スクリプトの各拡張子の周りに二重引用符を入れるのが最善ですbash -c

だから:

bash -s <<'END_SCRIPT'
test1 () {
    echo "$var1"
    test3=$var1
}
test2 () {
    test1
    echo "$var2"
    echo "$test3"
}
  
test2
END_SCRIPT

bash(スクリプトを明示的に実行しているので#!- 行は必要ありません。)

here 文書の先頭に here 文書区切り文字を引用しない場合、スクリプトのbash -c実行を開始したシェルはすべての変数を置き換えます。var1と値が環境に存在すると仮定すると、var2実行されるスクリプトは次のようになります。test1test2

bash -s <<END_SCRIPT
test1 () {
    echo "test1"
    test3=test1
}
test2 () {
    test1
    echo "test2"
    echo ""
}
  
test2
END_SCRIPT

関連情報