Github 操作 run
调用 powershell,返回如下:
Powershell返回函数:
return "$($psitem.Key)=$($psitem.Value)"
返回被分配给github操作变量 returnvalue
返回包含由“”[单个空格键]分隔的key=value
对列表
我希望将每个返回的键值
对分配为github变量=值,然后打印它。
我使用以下工作流程运行逻辑来实现此目的:
- name: Powershell to split
run: |
"${{ needs.READ_VARS_FROM_XML.outputs.key_value_x }}" -split " " | ForEach-Object {
echo $_
echo "$_" >> $env:GITHUB_OUTPUT
}
- name: Print single key-value attemp 2
run: |
echo "PORT NUMBER: ${{ env.port }} and {{ port }}"
输出:
Powershell to split
Run "deploy_path=C:\\inetpub\\wwwroot\\tss.qa port=8814 app_name=Signup-qa debug=true deploy_password=password deploy_user=" -split " " | ForEach-Object {
deploy_path=C:\\inetpub\\wwwroot\\tss.qa
port=8814
app_name=Signup-qa
debug=true
deploy_password=password
deploy_user=
Print single key-value attemp 2
Run echo "PORT NUMBER: and {{ port }}"
PORT NUMBER: and {{ port }}
我期望为变量 port
打印端口号 8814
,但它似乎没有任何值。
更新:按照建议发布答案我打印了环境变量
steps:
- name: Print Environment Variables
run: |
Get-ChildItem Env:
不幸的是,我在环境变量的输出中没有看到任何key=value
,即port=8814
。请提出可能出现什么问题?
你能告诉我我错过了什么吗?
最佳答案
您正在通过附加到 $env:GITHUB_OUTPUT
来创建输出变量,而不是环境变量。您需要进行一些更改才能使用 env.
范围和 shell 的环境。
- 使用
$env:GITHUB_ENV
,而不是$env:GITHUB_OUTPUT
。 - 将
env.
范围传递给 PowerShell 任务的环境 - (可选)mask passwords
适合我的工作流程如下:
jobs:
init:
env:
key_value: "deploy_path=C:\\inetpub\\wwwroot\\tss.qa port=8814 app_name=Signup-qa debug=true deploy_password=FHSGDSJJD deploy_user="
runs-on: ubuntu-latest
steps:
- run: |
$values = $env:key_value -split " "
foreach ($value in $values)
{
if ($value -like "*password*")
{
$secret = ($value.split("=",2))[1]
echo "::add-mask::$secret"
}
echo $value
echo $value >> $env:GITHUB_ENV
}
id: split
shell: pwsh
env:
key_value: ${{ env.key_value }}
- run: |
echo "PORT NUMBER: ${{ env.port }} and $($env:port)"
shell: pwsh
env: ${{ env }}
对于输出,步骤非常相似:
- 将
id:
添加到生成输出变量的步骤。 - 将输出变量存储在
$env:GITHUB_OUTPUT
- 将上一步的输出传递到下一步的
env:
部分。 - 再次,可选 mask the passwords
jobs:
init:
env:
key_value: "deploy_path=C:\\inetpub\\wwwroot\\tss.qa port=8814 app_name=Signup-qa debug=true deploy_password=FHSGDSJJD deploy_user="
runs-on: ubuntu-latest
steps:
- run: |
$values = $env:key_value -split " "
foreach ($value in $values)
{
if ($value -like "*password*")
{
$secret = ($value.split("=",2))[1]
echo "::add-mask::$secret"
}
echo $value
echo $value >> $env:GITHUB_OUTPUT
}
id: split
shell: pwsh
env:
key_value: ${{ env.key_value }}
- run: |
echo "PORT NUMBER: ${{ steps.split.outputs.port }} and $($env:port)"
shell: pwsh
env: ${{ steps.split.outputs }}
要将范围的内容转储到日志,您可以使用:
- name: Dump the env scope
run: |
echo $env:scope
env:
scope: ${{ toJson(env) }}
shell: pwsh
您可以传递vars
、env
、github
、matrix
、steps.X.outputs
等到 toJson
函数,将上下文转储到控制台。
关于powershell - 逐行分割字符串并进行变量化,即将其分配给 GITHUB_OUTPUT - 工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76317160/