【问题标题】:powershell won't recognize gitlab CI environment variablespowershell 无法识别 gitlab CI 环境变量
【发布时间】:2018-03-10 21:08:24
【问题描述】:

所以我试图从我的 .gitlab-ci.yaml 执行一个 powershell 脚本,我希望将基于环境变量的脚本变量之一作为我的 powershell 脚本的起点。

我有一个 .gitlab-ci.yaml,其中包括以下内容:

job1:
  stage: ps
  script:
    - powershell -File .\psfile.ps1 -var1 lalalal -var2 Solution -var3 '%CI_PROJECT_DIR%'

当使用写输出(或类似)从 powershell 发布 CI_PROJECT_DIR ev 时,我得到一个空字符串。

当我执行常见的 echo '%CI_PROJECT_DIR%' 时,我得到了正确的路径

【问题讨论】:

    标签: powershell gitlab-ci


    【解决方案1】:

    在不知道 GitLab .gitlab-ci.yaml 文件的细节的情况下,我的猜测是 默认情况下它是用于执行命令的主机平台的默认 shell。 p>

    鉴于在 Windowscmd.exe 是默认 shell,您必须使用 语法,这意味着:

    • 您需要使用%...% 来包含环境变量引用(您已经这样做了)

    • 为了引用一个值,你必须使用"..."(双引号);相比之下,'...'(单引号)在cmd.exe 中具有no 句法函数,并且作为参数的一部分传递

    因此,请尝试使用以下行:

        - powershell -File .\psfile.ps1 -var1 lalalal -var2 Solution -var3 "%CI_PROJECT_DIR%"
    

    【讨论】:

      【解决方案2】:

      使用$env:CI_PROJECT_DIR(并在您的示例中删除它周围的单引号,因为单引号是文字字符串常量)。这就是在 PowerShell 中处理环境变量的方式,语法与 cmd.exe 不同。另请参阅 GitLab 文档 here。 如果您希望它在范围方面更详细,那么您也可以调用 .net 方法[System.Environment]::GetEnvironmentVariable(...)

      【讨论】:

      • 您所指的范围不是。它正在访问Env: 驱动器,就像您访问Cert:C:HKLM: 一样。作用域被编号或命名为localprivateglobal(我确定我缺少一个)
      • 什么解释器在 PowerShell 启动之前扩展 %CI_PROJECT_DIR% 变量引用?如果是cmd,那么还是需要用百分号包围而不是$Env:
      • 这非常令人困惑......我假设当我从 cmd 启动 powershell 时 %var% 会起作用(将 %var% 作为输入(在进入 ps 之前))。 ....您使用 $env:varname 的建议不起作用。 powershell 根本无法识别该值。
      • 似乎可以将PowerShell语法中的脚本调用直接放入yaml:powershell.amsterdam/2015/12/04/powershell-and-gitlab-ci-part-3
      • 哇...好像我自己犯了一个愚蠢的错误。通过不喝酒和编码同时吸取的教训。显然我已经复制了powershell脚本并正在修改旧版本以显示/打印输入变量......不用说我在Gitlab中使用的那个没有显示任何输出:\问题解决了。使用它们的正确方法确实是“%var%”。感谢大家的思考:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2016-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      相关资源
      最近更新 更多