在 Gitlab CI/CD 管道脚本中使用 shell 变量?

Using shell variables within a Gitlab CI/CD pipeline script?

我有一个 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

“目录”中可以有一个或多个目录,我希望能够动态地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中编程是个坏习惯。最好在您的项目中创建一个脚本。它更具可读性、可移植性和错误安全性。