Skip to main content

필수 상태 검사 문제 해결

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

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

보호된 분기는 조직의 GitHub Free 및 GitHub Free이(가) 있는 퍼블릭 리포지토리와 GitHub Pro, GitHub Team, GitHub Enterprise Cloud 및 GitHub Enterprise Server이(가) 있는 퍼블릭 및 프라이빗 리포지토리에서 사용할 수 있습니다. 자세한 내용은 “GitHub의 플랜”를 참조하세요.

동일한 이름의 확인 및 상태가 있고 해당 이름을 필수 상태 확인으로 선택하는 경우 확인과 상태가 모두 필요합니다. 자세한 내용은 "검사에 대한 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를 사용하여 트리거된 검사는 필수 검사의 일부로 사용되지 않습니다.

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

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

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

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

경고: 경로 필터링, 분기 필터링 또는 커밋 메시지로 인해 워크플로를 건너뛰는 경우 해당 워크플로와 연결된 검사는 “보류 중” 상태로 유지됩니다. 이러한 검사가 성공해야 하는 끌어오기 요청은 병합에서 차단됩니다.

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

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

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

예시

다음 예제에서는 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@v4
    - 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

경로 필터링으로 인해 리포지토리의 루트에 있는 파일만 변경하는 끌어오기 요청은 이 워크플로를 트리거하지 않으며 병합에서 차단됩니다. 끌어오기 요청에 "상태가 보고될 때까지 대기 중"이라고 표시됩니다.

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

데이터 변수 GitHub Actions 및 병합 큐를 사용한 상태 확인

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

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

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

on:
  pull_request:
  merge_group:

merge_group 이벤트의 자세한 내용은 "워크플로를 트리거하는 이벤트"을(를) 참조하세요.

예기치 않은 원본의 상태 검사 요구

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

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