powershell - 逐行分割字符串并进行变量化,即将其分配给 GITHUB_OUTPUT - 工作流程

标签 powershell github environment-variables github-actions strsplit

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 的环境。

  1. 使用 $env:GITHUB_ENV,而不是 $env:GITHUB_OUTPUT
  2. env. 范围传递给 PowerShell 任务的环境
  3. (可选)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 }}

对于输出,步骤非常相似:

  1. id: 添加到生成输出变量的步骤。
  2. 将输出变量存储在 $env:GITHUB_OUTPUT
  3. 将上一步的输出传递到下一步的 env: 部分。
  4. 再次,可选 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

您可以传递varsenvgithubmatrixsteps.X.outputs 等到 toJson 函数,将上下文转储到控制台。

关于powershell - 逐行分割字符串并进行变量化,即将其分配给 GITHUB_OUTPUT - 工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76317160/

相关文章:

混帐客户端 : get user info from username

environment-variables - 期望遵守 PATH 环境变量

php - getenv ("PHP_SELF")返回 false

regex - 如何用动态变量替换 sed 反向引用

powershell - 在后台打开网站

batch-file - 在命令行/批处理文件中运行 Powershell 命令

git - 即使在 git add 之后,更改也不会提交

.net - 从 PowerShell 暂停或休眠

PowerShell TrimStart 并不总是有效

linux - 在没有 root 权限的情况下检查 github 企业中的备份状态?