Самостоятельные бегуны на Github на каждую ветку
Я пытаюсь реализовать самодостаточный раннер на Github, но сильно ударился о стену
Я хочу, чтобы для моих серверов prod и dev были разные бегуны
Насколько я понимаю, можно установить метки в зависимости от среды, но оба моих сервера dev и prod по существу одинаковы (оба являются сервером Windows 20012 R2 с аналогичным оборудованием)
У меня есть два файла yml, указывающих на dev и master соответственно, но могу ли я указать бегуну на правильное действие?
Я пробовал добавить к бегунам такой ярлык:
Но когда я публикую в мастере, запускается топ-раннер.
Файл yml для prod выглядит примерно так:
name: SSR-Prod
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
build:
runs-on: self-hosted
steps:
- uses: actions/checkout@v2
- name: Restore dependencies
run: npm install
- name: Build and publish
run: npm run build:ssr
2 ответа
Вам нужно указать достаточно меток, чтобы выбрать правильный бегун, например:
runs-on: [ self-hosted, master ]
Это гарантирует, что ваш рабочий процесс будет запущен на втором бегуне.
На самом деле я обнаружил, что ответ @frennky нам не подходит; потратил много времени на вырывание волос (к счастью, у меня их много). Что сработало, так это:
На самом деле это легко сделать, но выяснить, как это странно сложно.
Документация прекрасно рассказывает вам обо всех вариантах, но не всегда хороша для того, чтобы давать примеры.
Для нас сработало следующее:
setup-dns:
name: Setup dynamic DNS
runs-on: prod
Предполагая, конечно, что ваш лейбл — «производство». (Кстати, не заставляйте Prod использовать динамический DNS). Согласно документам и здравому смыслу, это должно работать:
setup-dns:
name: Setup dynamic DNS
runs-on: [self-hosted, prod]
Но это не так; бегун никогда не бежит. У меня был разговор со службой поддержки GitHub, но я потерял ссылку. До тех пор, пока вы не создадите автономный бегун с меткой (не именем) '
ubuntu-latest
' (или другие версии O/S исполнителя, размещенные на GitHub), у вас не возникнет проблем!
Если подумать логически, то для размещения собственного ярлыка требуется , чтобы это был автономный бегун, поэтому два значения для «runs-on» несколько избыточны. Я предполагаю, что вы все еще можете использовать две самостоятельные метки исполнителя, и подпрограмма будет работать на любой доступной. Мы не пошли по этому пути, так как нам нужно было, чтобы исправления запускались на нескольких производственных серверах детерминировано, поэтому у нас буквально есть prod1, prod2, prod2 и т. д.
Теперь вот где это становится интересным. Допустим, у вас есть вызываемый рабочий процесс, более известный как «подпрограмма». В этом случае вы не можете использовать "
runs-on
" в вызывающем; только вызываемый.
Итак, вот что вы делаете в вызываемом рабочем процессе:
on:
workflow_call:
inputs:
target_runner_label:
type: string
description: 'Target GitHub Runner'
required: true
# not strictly needed, but great for testing your callable workflow
workflow_dispatch:
inputs:
target_runner_label:
type: string
description: 'Target GitHub Runner'
required: true
jobs:
report_settings:
name: Report Settings
runs-on: ${{ inputs.target_runner_label || github.event.inputs.target_runner_label }}
Теперь - вы можете удивиться
||
заявление посередине. Оказывается, синтаксис обращения к
workflow_call
входы и
workflow_dispatch
входы совершенно разные.
Еще одна загвоздка: «имя» бегуна совершенно лишнее, потому что это метка, а не имя, которое рабочий процесс использует для его запуска. В приведенном ниже примере вы не будете использовать «erpnext_erpdev» для запуска рабочего процесса, вы будете использовать «erp_fix».