Source: How start second github action after success first
← Renderedmarkdown source:
---
description: Github action - как запускать экшены последовательно
tags: cicd github
title: How start second github action after success first
---
## Тот же workflow, отдельный job с needs ключом
В одном воркфлоу можно определить дополнительный job через need - в этом случае экшен будет выполнен, только если успешно выполнен экшен в need
```yml
name: CI build and notify
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy Docker image to Google Cloud Run
run: ...
notify:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Notify Slack and send eMail
run: ...
```
## Отдельный workflow, использующий workflow_run эвент в качестве триггера
Можно разделить события на два воркфлоу и запускать второй только, если успешен первый.
```yml
# build.yml
name: CI build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy Docker image to Google Cloud Run
run: ...
```
```yml
# notify.yml
name: CI notify
# Only trigger, when the build workflow succeeded
on:
workflow_run:
workflows: ["CI build"]
types:
- completed
jobs:
notify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Notify Slack and send eMail
run: ...
```
Чтобы проверить, успешно или нет выполнен предыдущий workflow, можно запросить его статус ([подробнее тут](https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#workflow_run)):
```yaml
on:
workflow_run:
workflows: ["Build"]
types: [completed]
jobs:
on-success:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
...
on-failure:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
...
```
Важным недостатком второго подхода является то, что оба экшена должны быть реализованы в ветке по умолчанию длят ого, чтобы второй исполнился. Плюс, очевидно, заключается в том, что можно отключить второй экшен из админки github, не влезая в код.
[Ссылка на оверфло](https://stackoverflow.com/a/65698892/15966204)
- [[github-action]]
- [[cl]]
[github-action]: github-action "Githunb action"
[cl]: cl "ci/cd - непрервыная интеграция"