Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы, возможно, еще выполняется. Актуальные сведения см. в документации на английском языке.

Устранение неполадок с обязательными проверками состояния

Вы можете проверить наличие распространенных ошибок и устранить проблемы с помощью обязательных проверок состояния.

Защищенные ветви доступны в общедоступных репозиториях при использовании GitHub Free и GitHub Free для организаций, а также в общедоступных и частных репозиториях при использовании GitHub Pro, GitHub Team, GitHub Enterprise Cloud и GitHub Enterprise Server.

Если у вас есть проверка и состояние с одинаковыми именами и вы выбираете это имя в качестве обязательной проверки состояния, обязательными будут и проверка, и состояние. Дополнительные сведения см. в разделе Проверки.

После включения обязательных проверок состояния личную ветвь может потребоваться синхронизировать с базовой перед слиянием. Это гарантирует, что ваша ветвь была протестирована с использованием последнего кода из базовой ветви. Если ваша ветвь устарела, необходимо выполнить слияние базовой ветви с ней. Дополнительные сведения см. в разделе Сведения о защищенных ветвях.

Примечание. Синхронизировать личную ветвь с базовой можно также путем перемещения изменений из одной ветви в другую в GIT. Дополнительные сведения см. в разделе Сведения о перемещении изменения из одной ветви в другую в GIT.

Вы не сможете отправить локальные изменения в защищенную ветвь, пока не будут пройдены все необходимые проверки состояния. Вместо этого вы получите сообщение об ошибке, аналогичное указанному ниже.

remote: error: GH006: Protected branch update failed for refs/heads/main.
remote: error: Required status check "ci-build" is failing

Примечание. Запросы на вытягивание, которые являются актуальными и прошли необходимые проверки состояния, допускают слияние и отправку в защищенную ветвь. Это можно сделать без проверок состояния для самой фиксации слияния.

Конфликты между головной фиксацией и тестовой фиксацией слияния

Иногда результаты проверок состояния для тестовой фиксации слияния и головной фиксации противоречат друг другу. Если тестовая фиксация слияния имеет состояние, то она должна проходить проверки. В противном случае состояние головной фиксации должно проходить проверки, прежде чем можно будет выполнить слияние ветви. Дополнительные сведения о тестовых фиксациях слияния см. в разделе Вытягивание.

Ветвь с конфликтующими фиксациями слияния

Обработка пропущенных, но обязательных проверок

Примечание. Если рабочий процесс пропускается из-за фильтрации путей, фильтрации ветви или сообщения фиксации, проверки, связанные с этим рабочим процессом, останутся в состоянии ожидания. Запрос на вытягивание, требующий успешной проверки, будет заблокирован при слиянии.

Если задание в рабочем процессе пропущено из-за условий, оно сообщит о своем состоянии: "Успешно". Дополнительные сведения см. в разделах Пропуск выполнения рабочего процесса и Использование условий для управления выполнением задания.

Пример

В следующем примере показан рабочий процесс, требующий состояния завершения "Успешно" для задания build, но рабочий процесс будет пропущен, если запрос на вытягивание не изменяет файлы в каталоге scripts.

name: ci
on:
  pull_request:
    paths:
      - 'scripts/**'
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x]
    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v3
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test

Из-за фильтрации путей запрос на вытягивание, который изменяет только файл в корне репозитория, не активирует этот рабочий процесс и блокируется от слияния. В запросе на вытягивание отобразится следующее состояние:

Обязательная проверка пропущена, но отображается как ожидающая

Эту проблему можно исправить, создав универсальный рабочий процесс с тем же именем, который будет возвращать значение true в любом случае, как в следующем случае:

name: ci
on:
  pull_request:
    paths-ignore:
      - 'scripts/**'
      - 'middleware/**'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: 'echo "No build required"'

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

Проверка пропущена, но пройдена вследствие использования универсального рабочего процесса

Примечания.

  • Убедитесь в том, что ключ name и обязательное имя задания в обоих файлах рабочего процесса одинаковы. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.
  • В приведенном выше примере используется GitHub Actions, но это обходное решение также применимо к другим поставщикам CI/CD, которые интегрируются с GitHub.

Обязательные проверки состояния из непредвиденных источников

Кроме того, для защищенной ветви может потребоваться проверка состояния из определенного GitHub App. Если отображается сообщение наподобие приведенного ниже, убедитесь в том, что проверка, указанная в поле слияния, была задана соответствующим приложением.

Required status check "build" was not set by the expected GitHub App.