前のステップが失敗してもジョブが失敗したまま github-actions ステップを実行する方法 質問する

前のステップが失敗してもジョブが失敗したまま github-actions ステップを実行する方法 質問する

私は、Github アクションを使用してビルドをテストし、テスト結果を圧縮してアーティファクトとしてアップロードするという Github の例に従おうとしています。https://help.github.com/en/actions/automating-your-workflow-with-github-actions/persisting-workflow-data-using-artifacts#uploading-build-and-test-artifacts

しかし、テストが失敗した場合の対処法に困っています。これが私の行動です。テストが成功すると、すべてがうまくいき、結果は圧縮されてアーティファクトとしてエクスポートされますが、テストが失敗すると、ジョブの残りのステップが停止するため、結果が公開されることはありません。
github-ci-結果
continue-on-error: trueを追加してみましたhttps://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#jobsjob_idstepscontinue-on-error
これにより、失敗後も続行され、テスト結果がアップロードされます。ただし、テスト ステップが失敗した場合でも、ジョブは合格としてマークされます。ステップが失敗しても、ジョブ全体を失敗としてマークしたまま、成果物をアップロードする方法はありますか?

name: CI
on:
  pull_request:
    branches:
    - master
  push:
    branches:
      - master

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1    
    - name: Test App
      run: ./gradlew test

    - name: Archive Rest Results
      uses: actions/upload-artifact@v1
      with:
        name: test-results
        path: app/build/reports/tests

ベストアンサー1

あなたは付け加えられます

if: always()

前のステップが失敗した場合でも、ステップを実行するようにするhttps://docs.github.com/en/actions/learn-github-actions/expressions#ステータスチェック関数

つまり、1 つのステップでは次のようになります。

steps:
- name: Build App
  run: ./build.sh

- name: Archive Test Results
  if: always()
  uses: actions/upload-artifact@v1
  with:
    name: test-results
    path: app/build

または、ジョブに追加することもできます。

jobs:
  job1:
  job2:
    needs: job1
  job3:
    if: always()
    needs: [job1, job2]

さらに、以下で指摘されているように、 put を実行するalways()と、ビルドがキャンセルされた場合でも関数が実行されます。 ジョブを手動でキャンセルしたときに関数を実行したくない場合は、代わりに以下を実行できます。

if: success() || failure()

または

if: '!cancelled()'

!cancelled()( YAML タグとして解釈されないように引用符が必要です。)

同様に、何かが失敗したときのみ関数を実行したい場合は、次のように記述します。

if: failure()

また、コメントにもあるように、ステータスチェック関数が使用されていない場合if

if: true

結果は(おそらく混乱を招くが)次のように動作する。

if: success() && true

これは文書化されている式 - GitHub ドキュメント:

ステータスチェック機能

次のステータス チェック関数を if 条件の式として使用できます。これらの関数のいずれかを含めない限り、デフォルトのステータス チェックがsuccess()適用されます。

おすすめ記事