Один из способов сделать это - иметь центральный репозиторий действий CICD / GitHub с общими рабочими процессами, которые запускаются при repository_dispatch
событиях.
on:
repository_dispatch:
types:
- your_event
jobs:
job1:
name: Do something
runs-on: ubuntu-latest
env:
SOURCE_BRANCH: ${{ github.event.client_payload.source_branch }}
SOURCE_REPO: ${{ github.event.client_payload.source_repo }}
# do all your stuff
Затем в каждом репозитории github вы пишете небольшой файл рабочего процесса, который обрисовывает в общих чертах триггеры для локального репо, подталкивая к мастеру / открывая PR et c. Это действие просто отправляет событие repository_dispatch в ваш центральный репозиторий CICD с указанием репо и отраслевого имени, из которого оно получено.
name: Trigger external CICD
on:
push:
branches:
- master
jobs:
trigger_cicd:
name: Trigger external CICD
runs-on: ubuntu-latest
steps:
- name: Send repository_dispatch event
uses: peter-evans/repository-dispatch@v1
with:
token: ${{ secrets.CICD_GITHUB_TOKEN }}
repository: yourorg/centralcicdrepo
event-type: ${{ env.EVENT_TYPE }}
client-payload: '{"source_branch": "${{ github.ref }}", "source_repo": "${{ github.repository }}" }'
Одна проблема заключается в том, что вам нужен токен доступа для общения между репозиториями, в приведенном выше примере он добавлен как секрет под названием CICD_GITHUB_TOKEN
. Проще всего просто использовать свою учетную запись, но при этом все ваши центральные запуски CICD будут помечены как «инициированные вами». Вы также можете создать учетную запись бота или попросить каждого разработчика добавить свои токены доступа в качестве секретов, а затем сопоставить правильного автора с правильным токеном доступа.