Source: How start second github action after success first

← Rendered

markdown 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 - непрервыная интеграция"