繁体   English   中英

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

[英]How do I pass the Gitlab {CI_COMMIT_SHORT_SHA} variable to powershell script

我在 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 环境变量传递给 PowerShell 脚本的格式是否正确? 您能否就此提出一些建议?

  • 假设${CI_PROJECT_DIR}是 GitLab 的CI_PROJECT_DIR (环境)变量的,您可以在命令行中按原样使用它 - 不需要$env:间接,它 (a) 需要环境变量的名称和(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
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM