Skip to main content

Enterprise Server 3.20 은(는) 현재 릴리스 후보로 제공됩니다.

필수 상태 검사 문제 해결

일반적인 오류를 확인하고 필수 상태 검사와 관련된 문제를 해결할 수 있습니다.

누가 이 기능을 사용할 수 있나요?

보호된 분기는 조직의 경우 GitHub Free 및 GitHub Free을(를) 사용하여 퍼블릭 리포지토리에서 사용할 수 있습니다. 보호된 분기는 GitHub Pro, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server을(를) 사용하여 퍼블릭 및 프라이빗 리포지토리에서도 사용할 수 있습니다.

동일한 이름의 확인 및 상태가 있고 해당 이름을 필수 상태 확인으로 선택하는 경우 확인과 상태가 모두 필요합니다. 자세한 내용은 검사에 대한 REST API 엔드포인트을(를) 참조하세요.

참고

필수로, 상태 확인이 지난 7일 동안 선택한 리포지토리 내에서 성공적으로 완료되어야 합니다.

필수 상태 검사를 사용하도록 설정하면 병합하기 전에 분기가 기본 분기와 최신 상태여야 할 수 있습니다. 이것은 당신의 브랜치가 기본 브랜치의 최신 코드로 테스트되었음을 확인합니다. 브랜치가 최신 상태가 아닌 경우, 기본 브랜치를 자신의 브랜치에 병합해야 합니다. 자세한 내용은 보호된 분기 정보을(를) 참조하세요.

참고

Git 리베이스를 활용하면 현재 분기를 기준 분기의 최신 변경사항에 맞춰 업데이트할 수 있습니다. 자세한 내용은 Git 리베이스에 대하여을(를) 참조하세요.

모든 필수 상태 검사가 통과될 때까지 보호된 분기에 로컬 변경 내용을 푸시할 수 없습니다. 대신에 다음과 유사한 오류 메시지가 나타납니다.

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

참고

최신 상태이고 필수적인 상태 확인을 통과한 풀 리퀘스트는 로컬에서 병합한 후 보호된 브랜치로 푸시할 수 있습니다. 이 작업은 병합 커밋 자체에서 실행 중인 상태 검사 없이 수행할 수 있습니다.

최신 커밋의 SHA 값에 대해 필수 검사를 통과해야 합니다.

풀 리퀘스트를 병합하려면 최근 커밋의 SHA에 대해 모든 필수 검사를 통과해야 합니다. 그러면 병합하기 전에 최신 변경 내용의 유효성을 검사하고 필요한 표준을 충족할 수 있습니다. 이전 커밋 SHA를 사용하여 트리거된 검사는 필수 검사의 일부로 사용되지 않습니다. 성공적인 확인 상태는 다음과 같습니다. success``skipped``neutral입니다. 자세한 내용은 상태 검사 정보을(를) 참조하세요.

헤드 커밋과 테스트 병합 커밋 간의 충돌

경우에 따라 테스트 병합 커밋 및 헤드 커밋에 대한 상태 검사 결과가 충돌합니다. 테스트 병합 커밋에 상태가 있는 경우, 그 커밋은 반드시 테스트를 통과해야 합니다. 그렇지 않으면 분기를 병합하기 전에 헤드 커밋의 상태가 전달되어야 합니다.

테스트 병합 커밋과 헤드 커밋 간에 충돌이 있는 경우 테스트 병합 커밋에 대한 검사 끌어오기 요청 상태 확인란에 표시됩니다. 끌어오기 요청 상태 상자에 Showing checks for the merge commit으로 시작하는 줄로 표시됩니다. 테스트 병합 커밋에 대한 자세한 내용은 끌어오기 요청에 대한 REST API 엔드포인트을(를) 참조하세요.

건너뛰었으나 필요한 검사 처리

경고

          [경로 필터링](/actions/using-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore), [분기 필터링](/actions/using-workflows/workflow-syntax-for-github-actions#onpull_requestpull_request_targetbranchesbranches-ignore), [커밋 메시지](/actions/managing-workflow-runs/skipping-workflow-runs)로 인해 워크플로를 건너뛰는 경우, 해당 워크플로와 연결된 검사는 “보류” 상태로 유지됩니다. 이러한 검사가 성공해야 하는 끌어오기 요청은 병합에서 차단됩니다.

병합하기 전에 워크플로를 통과해야 하는 경우 경로 또는 분기 필터링을 사용하여 워크플로 실행을 건너뛰지 않아야 합니다. 자세한 내용은 워크플로 실행 건너뛰기규칙 세트에 사용 가능한 규칙을(를) 참조하세요.

단, 조건부로 인해 워크플로 내의 작업을 건너뛰면 해당 상태를 “성공”으로 보고합니다. 자세한 내용은 조건을 사용하여 작업 실행 제어을(를) 참조하세요.

작업이 실패하면 실패한 작업에 종속된 모든 작업을 건너뛰고 실패를 보고하지 않습니다. 검사가 필요한 끌어오기 요청은 차단되지 않을 수 있습니다. 다른 작업에 의존하는 작업에 필요한 검사를 사용하려면 always() 외에 needs 조건식 표현식을 사용하세요(워크플로의 작업 사용을(를) 참조하세요).

예시

다음 예제에서는 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@v5
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - run: npm ci
    - run: npm run build --if-present
    - run: npm test
          [경로 필터링](/actions/using-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore)으로 인해 리포지토리의 루트에 있는 파일만 변경하는 끌어오기 요청은 이 워크플로를 트리거하지 않으며 병합에서 차단됩니다. 끌어오기 요청에 "상태가 보고될 때까지 대기 중"이라고 표시됩니다.

병합하기 전에 워크플로를 통과해야 하는 경우 경로 또는 분기 필터링을 사용하여 워크플로 실행을 건너뛰지 않아야 합니다. 자세한 내용은 워크플로 실행 건너뛰기규칙 세트에 사용 가능한 규칙을(를) 참조하세요.

데이터 변수와 GitHub Actions, 병합 큐를 활용하여 상태를 확인

병합 대기열에 끌어오기 요청이 추가되면, 반드시merge_group 이벤트를 사용하여 GitHub Actions 워크플로를 트리거해야 합니다.

참고

리포지토리에서 GitHub Actions을(를) 사용하여 필요한 검사 를 수행하거나 리포지토리의 끌어오기 요청에 대한 조직 규칙 세트 을(를) 통해 워크플로가 필요한 경우 merge_group 이벤트를 추가 트리거로 포함하도록 워크플로를 업데이트해야 합니다. 그렇지 않으면 병합 큐에 끌어오기 요청을 추가할 때 상태 검사가 트리거되지 않습니다. 상태 확인 필요가 보고되지 않으므로 병합이 실패합니다. merge_group 이벤트는 pull_requestpush 이벤트트와 별개입니다.

대상 분기의 보호에 필요한 검사를 보고하는 워크플로는 다음과 같습니다.

on:
  pull_request:
  merge_group:
          `merge_group` 이벤트의 자세한 내용은 [AUTOTITLE](/actions/using-workflows/events-that-trigger-workflows#merge_group)을(를) 참조하세요.

예기치 않은 출처의 필수 상태 검사

보호된 분기가 특정 GitHub App에서 상태 검사를 요구할 수도 있습니다. 다음과 유사한 메시지가 표시되는 경우 병합 상자에 나열된 확인란이 예상된 앱에 의해 설정되었는지 확인해야 합니다.

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