如何将Gitlab {CI_COMMIT_SHORT_SHA}变量传递给Powershell脚本

时间:2020-06-27 11:57:03

标签: powershell gitlab

我在Gitlab-CI.yaml文件中创建了一个脚本部分。格式如下。

script:
   - powershell -File script.ps1 folderpath="$env:${CI_PROJECT_DIR}" CommitID="$env:${CI_COMMIT_SHORT_SHA}"  

,这些变量在我的PowerShell脚本中调用,如下所示。脚本如下。

$Files = Get-ChildItem $folderpath
foreach($eachFile in $Files)
{
    if($eachFile.Name.Contains("myapp"))
    {
        Rename-Item -Path $eachFile.FullName -NewName "myapp-$CommitID.zip" -Force
    }
}

此脚本用于更改zip文件的名称。通过gitlab执行此操作后,出现了这样的错误。

 Variable reference is not valid. ':' was not followed by a valid variable name 
 character. Consider using ${} to delimit the name.

将GitLab env变量传递到PowerShell脚本是否正确?您能提出一些建议吗?

1 个答案:

答案 0 :(得分:2)

  • 假设${CI_PROJECT_DIR}是GitLab的CI_PROJECT_DIR(环境)变量的 value ,则可以在命令行中按原样使用它-无需$env:间接寻址,(a)要求环境变量的 name ,而(b)不能与PowerShell的-File CLI参数一起使用。

  • 假设目标脚本使用常规的PowerShell参数声明(例如param($FolderPath, $CommitId),大小写无关紧要),则必须使用
    传递值 -<param> <value>-<param>:<value>语法。

将它们放在一起:

script:
   - powershell -File script.ps1 -FolderPath "${CI_PROJECT_DIR}" -CommitID="${CI_COMMIT_SHORT_SHA}"  

另一种选择是根本不使用参数,而是使用PowerShell的$env:<var_name>表示法从脚本内部直接访问环境变量

$Files = Get-ChildItem $env:CI_PROJECT_DIR
foreach($eachFile in $Files)
{
  if($eachFile.Name.Contains("myapp"))
  {
     Rename-Item $eachFile.FullName -NewName "myapp-$env:CI_COMMIT_SHORT_SHA.zip" -Force
  }
}