[英]How do I use PowerShell with Gitlab CI in Gitlab Pages?
[英]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.