我在 Gitlab-CI.yaml 文件中创建了一个脚本部分。格式如下。
script:
- powershell -File script.ps1 folderpath="$env:${CI_PROJECT_DIR}" CommitID="$env:${CI_COMMIT_SHORT_SHA}"
Run Code Online (Sandbox Code Playgroud)
这些变量在我的 PowerShell 脚本中调用,如下所示。下面给出了脚本。
$Files = Get-ChildItem $folderpath
foreach($eachFile in $Files)
{
if($eachFile.Name.Contains("myapp"))
{
Rename-Item -Path $eachFile.FullName -NewName "myapp-$CommitID.zip" -Force
}
}
Run Code Online (Sandbox Code Playgroud)
该脚本用于更改 zip 文件的名称。通过 gitlab 执行此操作后,我收到这样的错误。
Variable reference is not valid. ':' was not followed by a valid variable name
character. Consider using ${} to delimit the name.
Run Code Online (Sandbox Code Playgroud)
将 GitLab 环境变量传递给 PowerShell 脚本的格式是否正确?您能就此提出一些建议吗?
假设这${CI_PROJECT_DIR}是GitLab 的(环境)变量的值CI_PROJECT_DIR,您可以在命令行中按原样使用它 - 不需要间接$env:,(a)需要环境变量的名称,(b)无论如何都不起作用使用 PowerShell 的-FileCLI 参数。
假设您的目标脚本使用常规 PowerShell 参数声明(例如,param($FolderPath, $CommitId)大小写无关),则必须使用
-<param> <value>或-<param>:<value>语法传递值。
把它们放在一起:
script:
- powershell -File script.ps1 -FolderPath "${CI_PROJECT_DIR}" -CommitID="${CI_COMMIT_SHORT_SHA}"
Run Code Online (Sandbox Code Playgroud)
另一种方法是根本不使用参数,而是使用 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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6851 次 |
| 最近记录: |