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

如何将Gitlab{CI_COMMIT_SHORT_SHA}变量传递给powershell脚本,powershell,gitlab,Powershell,Gitlab,我在Gitlab-CI.yaml文件中创建了一个脚本部分。格式如下所示 script: - powershell -File script.ps1 folderpath="$env:${CI_PROJECT_DIR}" CommitID="$env:${CI_COMMIT_SHORT_SHA}" $Files = Get-ChildItem $folderpath foreach($eachFile in $Files) { if($e

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

script:
   - powershell -File script.ps1 folderpath="$env:${CI_PROJECT_DIR}" CommitID="$env:${CI_COMMIT_SHORT_SHA}"  
$Files = Get-ChildItem $folderpath
foreach($eachFile in $Files)
{
    if($eachFile.Name.Contains("myapp"))
    {
        Rename-Item -Path $eachFile.FullName -NewName "myapp-$CommitID.zip" -Force
    }
}
这些变量正在调用我的PowerShell脚本,如下所示。下面给出了脚本

script:
   - powershell -File script.ps1 folderpath="$env:${CI_PROJECT_DIR}" CommitID="$env:${CI_COMMIT_SHORT_SHA}"  
$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脚本的格式是否正确?你能就此提出一些建议吗?

  • 假设
    ${CI_PROJECT_DIR}
    是GitLab的
    CI_PROJECT_DIR
    (环境)变量的值,您可以像在命令行中一样使用它-不需要
    $env:
    间接寻址,它(a)需要环境变量的名称,并且(b)无论如何,使用PowerShell的
    -File
    CLI参数都无法工作

  • 假设目标脚本使用常规PowerShell参数声明(例如,
    param($FolderPath,$CommitId)
    ,大小写不重要),则必须使用
    传递值
    -
    -:
    语法

总而言之:

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

另一种方法是根本不使用参数,而是使用PowerShell的
$env:
符号直接从脚本内部访问环境变量:

$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
  }
}

很高兴听到这个消息,@NavajyothMS;我的荣幸。