需要帮忙
我正在学习 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
作业成功
丢失变量 test3
'''
相同的 bash 脚本 test.sh
#!/bin/bash
test1 () {
echo $var1
test3=$var1
}
test2 () {
test1
echo $var2
echo $test3
}
test2
'''
$export var1=test1 $export var2=test2
$sh 测试.sh
得到了很好的答案这是正确的:
测试1 测试2 测试1
但是yaml构造在函数之间丢失了变量test3
我知道从 gitlab ci 运行 test.sh,但我需要在 yaml 中以文本形式运行它我该怎么做?
谢谢
正如我对您上一个问题的回答中提到的,需要引用此处的文档。如果不是,则变量的扩展(以及任何其他扩展)将在
bash -c
脚本运行之前由调用 shell 执行。如果您还双引号在
bash -c
脚本中的每个扩展,那将是最好的。所以:
(请注意,由于您
bash
显式运行脚本,因此不需要#!
-line。)如果您没有在 here-document 的开头引用 here-document 分隔符,则为运行
bash -c
脚本而启动的 shell 将替换所有变量。假设var1
和var2
存在于环境中作为值test1
和test2
,将执行的脚本将等效于以下内容: