【问题标题】:Github Actions $GITHUB_OUTPUT does not seem to be setting job outputGithub Actions $GITHUB_OUTPUT 似乎没有设置作业输出
【发布时间】:2022-11-02 07:55:54
【问题描述】:

我一直在使用 Github Actions 为数据工程项目部署更改。我收到警告说 set-output 命令已被弃用,并且正在尝试使用 $GITHUB_OUTPUT 但我无法使用它设置作业的输出。

if_merged:
      runs-on: ubuntu-latest
      if: github.event.pull_request.merged == true
      name: check diff changed
      steps:
        - name: Checkout
          uses: actions/checkout@v3
          with:
            # Checkout as many commits as needed for the diff
            fetch-depth: 2
        
        - shell: pwsh
          id: check_file_changed
          run: |
            # Diff HEAD with the previous commit
            # filters out deleted files
            $diff = git diff --name-only --diff-filter=d HEAD^ HEAD
            
            # Check what files were in the diff
            echo $diff
            
            # Check if a file Pipfile.lock or Dockerfile has changed (added, modified, deleted)
            $BuildDiff = $diff | Where-Object { $_ -match 'Pipfile.lock' -or $_ -match 'Dockerfile'}
            $HasBuildDiff = $BuildDiff.Length -gt 0

            # Check if k8s job has changed
            $K8sDiff = $diff | Where-Object { $_ -match 'kubernetes_job.py'}
            $HasK8sDiff = $K8sDiff.Length -gt 0

            # Check if sql file has changed
            $SqlDiff = $diff | Where-Object { $_ -match '.sql'}
            $HasSqlDiff = $SqlDiff.Length -gt 0

            # Check if flow file has changed
            $FlowDiff = $diff | Where-Object { $_ -match 'flow.py'}
            $HasFlowDiff = $FlowDiff.Length -gt 0

            # Check value of matched object
            echo BuildDiff $BuildDiff ---
            echo K8sDiff $K8sDiff ---
            # echo DeploymentDiff $DeploymentDiff ---
            echo FlowDiff $FlowDiff ---

            # Set the outputs
            Write-Host "::set-output name=build_changed::$HasBuildDiff"
            Write-Host "::set-output name=k8s_changed::$HasK8sDiff"
            Write-Host "::set-output name=sql_changed::$HasSqlDiff"
            Write-Host "flow_changed=$HasFlowDiff" >> $GITHUB_OUTPUT
            # Write-Host "::set-output name=flow_changed::$HasFlowDiff"
      outputs:
        build_changed: ${{ steps.check_file_changed.outputs.build_changed }}
        k8s_changed: ${{ steps.check_file_changed.outputs.k8s_changed }}
        sql_changed: ${{ steps.check_file_changed.outputs.sql_changed }}
        flow_changed: ${{ steps.check_file_changed.outputs.flow_changed }}

我注释掉了设置输出步骤的一部分并将其更新为 $GITHUB_OUTPUT。但是,当作业运行时,未设置 flow_changed 输出。我无法发布图片,但如果在操作运行后查看完整的作业部分,$GITHUB_OUTPUT flow_changed 未设置。它是在我使用旧的 set-output 命令时设置的。

【问题讨论】:

    标签: github-actions


    【解决方案1】:

    尝试像这样设置它们:

    echo "build_changed=$HasBuildDiff" >> $GITHUB_OUTPUT
    echo "k8s_changed=$HasK8sDiff" >> $GITHUB_OUTPUT
    echo "sql_changed=$HasSqlDiff" >> $GITHUB_OUTPUT
    echo "flow_changed=$HasFlowDiff" >> $GITHUB_OUTPUT
    

    更多信息在https://docs.github.com/en/actions/using-jobs/defining-outputs-for-jobs

    【讨论】:

    • 感谢您的回复@jwpol。我只是用这些更改测试了操作,我没有从工作中得到任何输出。当我查看完整的作业时,评估和设置作业输出为空。我还在运行部分之后立即移动了输出部分,但这似乎没有任何效果。
    • 经过测试,似乎 $GITHUB_OUTPUT 不适用于 powershell。我能够用 bash 设置输出
    • 如果您找到解决方案,您可以添加并接受您自己的答案
    【解决方案2】:

    测试后,我无法让 powershell 设置作业的输出,所以我用对我有用的 bash 编写了它。

    # Diff HEAD with the previous commit
    # filters out deleted files
    git_diff=$(git diff --name-only --diff-filter=d HEAD^ HEAD)
                
    # Check what files were in the diff
    echo "$git_diff"
    
    # set output variables to false
    flow_changed="False"
    build_changed="False"
    sql_changed="False"
    k8s_changed="False"
                
    for f in ${git_diff[@]};
    do
        if [[ $f =~ "flow.py" ]]; then
             flow_changed="True"
        fi
    
        if [[ $f =~ "Dockerfile" ]] || [[ $f =~ "Pipfile.lock" ]]; then
             build_changed="True"
        fi
    
        if [[ $f =~ ".sql" ]]; then
             sql_changed="True"
        fi
    
        if [[ $f =~ "kubernetes_job.py" ]]; then
             k8s_changed="True"
        fi
    done
    
    # Set the outputs
    echo "build_changed=$build_changed" >> $GITHUB_OUTPUT
    echo "k8s_changed=$k8s_changed" >> $GITHUB_OUTPUT
    echo "sql_changed=$sql_changed" >> $GITHUB_OUTPUT
    echo "flow_changed=$flow_changed" >> $GITHUB_OUTPUT
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-23
      • 2022-12-13
      • 2021-04-03
      • 2013-09-19
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      相关资源
      最近更新 更多