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

标签 shell gitlab continuous-integration gitlab-ci gitlab-ci-runner

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

相关文章:

Gitlab:全新安装时克隆(通过 ssh)失败,错误代码为 "The remote end hung up unexpectedly"

git - 使用 `git branch -r` 无法看到推送的分支

.Net:最先进的工具和框架

python-2.7 - 标签未在 ubuntu 上的 python 2.7 中显示命令行输出

php - 如何安装供所有用户全局使用的 Python 包(包括 www-data)

shell - 查找域名并替换——Shell脚本

GitHub 管道/CI 生成文件并将它们推送回存储库

linux - Shell 脚本错误 : No such file or directory

sorting - 更改 Gitlab 问题的默认排序

azure - 将变量传递到 YAML 文件中