我在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脚本是否正确?您能提出一些建议吗?
答案 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
}
}