我有一个 gitlab ci/cd 管道,其中包含以下内容::
my_script:
stage: stage
script:
- cd dir
- ls -d */ > lines.txt
- while read line; do cd $line; pwd; cd ..; done < lines.txt
“dir”中可以有一个或多个目录,我希望能够动态地通过 CD 进入它们。这里的问题是cd $line
。我相信它一直在尝试读取 $line 的 CI/CD 变量,但该变量不存在。但我希望它读取在 while 循环中设置的 $line 的本地 shell 变量。
我也尝试用 '$line'
包围它,但没有成功。
最佳答案
变量 $line 在传递到运行器的实际 shell 之前会被评估(为空字符串)。
您可以用引号将整个命令括起来,作为参数传递给 shell 解释器:
- sh -c 'while read line; do cd $line; pwd; cd ..; done < lines.txt'
无论如何,用Gitlab的yaml编程是一个坏习惯。最好在您的项目中创建一个脚本。它更具可读性、可移植性和防错性。
关于shell - 在 Gitlab CI/CD 管道脚本中使用 shell 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70384187/