Чтобы указать условие выбора runner'а в GitHub Actions в вашем pipeline, можно использовать лейблы (labels), которые ассоциированы с вашими self-hosted runner'ами. В вашем workflow файле `.github/workflows/<название_workflow>.yml`, вы можете добавить `runs-on` ключ с соответствующим лейблом:
```yaml
jobs:
my_job:
runs-on: [self-hosted, linux, x64]
steps:
- name: Checkout
uses: actions/checkout@v2
# Другие шаги...
```
В примере выше, `self-hosted` относится к runner'у, которые вы разместили на своем сервере, а `linux` и `x64` являются дополнительными лейблами, которые помогают точно определить нужный runner.
Чтобы избежать приостановки выполнения pipeline в случае, если self-hosted сервер недоступен, вы можете использовать стратегию матрицы (`matrix`) для определения нескольких типов runner'ов и добавления условия для перехода к следующему шагу. Например, сначала попробовать использовать self-hosted runner, а если он не доступен, то использовать hosted runner от GitHub:
```yaml
jobs:
my_job:
runs-on: ${{ matrix.runner_label }}
strategy:
fail-fast: false
matrix:
runner_label: [self-hosted, ubuntu-latest]
steps:
- name: Checkout
uses: actions/checkout@v2
# Другие шаги...
```
Опция `fail-fast: false` гарантирует, что если один из runner'ов в матрице терпит неудачу, работа не остановится, пока не будут испробованы все варианты.
Также, можно использовать условия `if` в шагах для управления порядком выполнения:
```yaml
jobs:
my_job:
runs-on: self-hosted
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Attempt to Run on Self-Hosted
if: runner.label == 'self-hosted' && runner.isAvailable
run: |
echo "Running on self-hosted runner."
- name: Fallback to GitHub-Hosted if Self-Hosted is Unavailable
if: runner.label == 'self-hosted' && !runner.is_available
uses: actions/checkout@v2
runs-on: ubuntu-latest
```
Обратите внимание, что переменная `runner.isAvailable` не является реальным свойством объекта `runner`; это условное представление для того, как бы вы могли контролировать доступность self-hosted runner'а. Такой функциональности на самом деле нет "из коробки" в GitHub Actions – для имплементации подобного поведения вам может потребоваться написать свой собственный скрипт проверки или использовать сторонние действия, разработанные сообществом.
Для определения реального состояния доступности self-hosted runner'ов может быть необходимо использовать API GitHub или специализированные действия от сообщества, которые помогут управлять и мониторить состояние runner'ов.