Как нам фрагменты в файле рабочего процесса действия GitHub, чтобы избежать дубликатов? - PullRequest
3 голосов
/ 05 марта 2020

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

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

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

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

0 голосов
/ 10 марта 2020

Вы можете включить в свой рабочий процесс другие публичные c и локальные действия, которые позволяют повторно использовать общие шаги. Использование версионных действий с {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/setup-node@v1.2    # 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

...