Как использовать фрагменты в файле рабочего процесса действий Github, чтобы избежать дублирования?

Проблема: мы используем рабочий процесс действий github для CI, и у нас есть много репозиториев github. Мне нужно изменить все, что можно повторить для каждого репозитория сразу.

Можно ли использовать в файле yml рабочего процесса действий github какой-либо фрагмент, который размещает mb в другом репозитории.


person V. F.    schedule 05.03.2020    source источник


Ответы (3)


Вы можете включить в рабочий процесс другие общедоступные и локальные действия, что позволит вам повторно использовать общие шаги. Использование версионных действий с {owner}/{repo}@{ref}:

steps:    
  - uses: actions/setup-node@74bc508 # Reference a specific commit
  - uses: actions/setup-node@v1      # Reference the major version of a release   
  - uses: actions/[email protected]    # Reference a minor version of a release  
  - uses: actions/setup-node@master  # Reference a branch

..или локальные действия с ./path/to/dir:

jobs:
  my_first_job:
    steps:
      - name: Check out repository
        uses: actions/checkout@v2
      - name: Use local my-action
        uses: ./.github/actions/my-action

https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsuses

person dabo248    schedule 10.03.2020
comment
Вопрос касается фрагментов / файлов рабочего процесса, находящихся в другом репозитории. В этом ответе повторно используются действия, которые находятся в разных репозиториях, но не фрагменты рабочего процесса. - person Cole Bittel; 03.02.2021

Один из способов сделать это - создать центральный репозиторий действий 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 и т.д.

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 как «инициированные вами». Вы также можете создать учетную запись бота или попросить каждого разработчика добавить свои токены доступа в качестве секретов, а затем сопоставить правильного автора с правильным токеном доступа.

person Michael Parker    schedule 02.05.2020
comment
Это пытается ответить на вопрос более прямо, тогда как в ответе, получившем наибольшее количество голосов, используются шаги, а не рабочие процессы. - person Cole Bittel; 03.02.2021
comment
Это работает. Единственная проблема в том, что выполнение рабочего процесса отображается в центральном репо. Поэтому, если у вас есть несколько репозиториев, имеющих общий рабочий процесс, то рабочий процесс будет выполняться в нескольких репозиториях, а также несколько запусков в общем репо. - person Rohit; 18.05.2021

В настоящее время (3 февраля 2021 г.) нет поддерживаемого метода для повторного использования рабочих процессов или фрагментов из централизованного репозитория. Есть хаки, как умно продемонстрировал Майкл Паркер, но они имеют существенные недостатки (например, наблюдаемость, непрозрачность и т. Д. ).

Я написал это сообщение в блоге, в котором описывается проблема у вас более подробно, а также решение с открытым исходным кодом.

––

Похожие темы:

Обращаем внимание GH на этот вопрос:

person Cole Bittel    schedule 03.02.2021