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

Posted

技术标签:

【中文标题】在 Gitlab CI/CD 管道脚本中使用 shell 变量?【英文标题】:Using shell variables within a Gitlab CI/CD pipeline script? 【发布时间】:2022-01-19 20:22:42 【问题描述】:

我有一个 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 变量。但我希望它读取 $line 的本地 shell 变量,它是在 while 循环中设置的。

我也试过用'$line' 包围它,但没有用。

【问题讨论】:

【参考方案1】:

变量 $line 在传递到运行器的实际 shell 之前被评估(到一个空字符串)。

您可以将整个命令用引号括起来,作为参数传递给 shell 解释器:

- sh -c 'while read line; do cd $line; pwd; cd ..; done < lines.txt'

不管怎样,用 Gitlab 的 yaml 编程是个坏习惯。最好在您的项目中创建一个脚本。它更具可读性、可移植性和错误安全性。

【讨论】:

以上是关于在 Gitlab CI/CD 管道脚本中使用 shell 变量?的主要内容,如果未能解决你的问题,请参考以下文章

GitLab CI/CD 运行程序无法执行

为合并请求触发的管道运行应用 GitLab CI/CD 管道更改

GitLab CI/CD 管道在构建 Debian 包时找不到 GCC

Gitlab CI/CD 如何在管道中捕获 curl 响应

如何在 Maven GitLab CI/CD 管道中将 JaCoCo 报告 HTML 转换为 PDF

在哪里指定 GitLab ci/cd 管道的存储库凭据?