私は、Github アクションを使用してビルドをテストし、テスト結果を圧縮してアーティファクトとしてアップロードするという Github の例に従おうとしています。https://help.github.com/en/actions/automating-your-workflow-with-github-actions/persisting-workflow-data-using-artifacts#uploading-build-and-test-artifacts
しかし、テストが失敗した場合の対処法に困っています。これが私の行動です。テストが成功すると、すべてがうまくいき、結果は圧縮されてアーティファクトとしてエクスポートされますが、テストが失敗すると、ジョブの残りのステップが停止するため、結果が公開されることはありません。
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()
適用されます。