Переиспользуемые GitHub экшены
Параметр workflow_call позволяет создавать повторно используемые workflows, которые можно вызывать из других workflows в том же или других репозиториях.
Читайте также custom actions
Не буду размусоливать и перейду сразу к примерам.
Создание переиспользуемого workflow
Переиспользуемый workflow, который принимает входные данные и секреты создается следующим образом: (файл .github\workflows\reusable.yml):
name: Reusable Workflow
on:
workflow_call:
inputs:
username:
required: true
type: string
secrets:
secret_token:
required: true
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "Hello, ${{ inputs.username }}!"
- run: echo "Using secret: ${{ secrets.secret_token }}."
Документация по workflow_call
Вызов переиспользуемого workflow
Теперь вызвать созданный workflow из другого workflow с передачей данных и секретов можно так:
name: Call Reusable Workflow
on:
push:
branches:
- main
jobs:
invoke_reusable_workflow:
uses: ./.github/workflows/reusable.yml
with:
username: 'JohnDoe'
secrets:
secret_token: ${{ secrets.MY_SECRET }}
Вызов из другого репозитория
Переиспользуем workflow из другого репозитория:
jobs:
invoke_reusable_workflow:
uses: my-org/my-repo/.github/workflows/reusable.yml@main
with:
username: 'JaneDoe'
secrets:
secret_token: ${{ secrets.MY_SECRET }}
Входные данные и секреты
Определение входных данных и секретов для reusable workflow:
on: workflow_call: inputs: username: required: true type: string secrets: api_token: required: true
Использование выходных данных
Workflow устанавливает выходные данные, которые могут быть использованы вызывающим workflow.
on:
workflow_call:
jobs:
calculate:
runs-on: ubuntu-latest
outputs:
result: ${{ steps.calculate_output.outputs.result }}
steps:
- id: calculate_output
run: echo "::set-output name=result::42"
Вызывающий workflow использует выходные данные reusable workflow.
jobs:
use_output:
uses: ./.github/workflows/reusable.yml
outputs:
result: ${{ steps.calculate_output.outputs.result }}
runs-on: ubuntu-latest
steps:
- run: echo "The result is ${{ result }}"
Заключение
В этой заметке мы рассмотрели использование workflow_call в GitHub Actions для создания переиспользуемых workflows. Использование переиспользуемых workflows позволяет упростить процесс автоматизации, повысить эффективность, сократить дублирование кода и обеспечить соблюдение принципа DRY. Переиспользуемые workflows могут быть определены в одном репозитории и затем вызываться из других workflows в этом же или других репозиториях. Мы также рассмотрели, как передавать входные данные и секреты в такие workflows, а также как использовать выходные данные. Эти примеры и советы помогут вам настроить CI/CD-процессы в GitHub Actions для автоматизации и стандартизации работы над проектами. Использование GitHub Actions и workflow_call — это мощный способ улучшить поддержку и масштабируемость вашего проекта, особенно при управлении большим количеством репозиториев и процессов.