Skip to main content
Skip to content

워크플로 종속성 락파일

잠금 파일은 워크플로가 의존하는 모든 작업을 확인된 커밋에 고정하므로 검토한 코드가 바로 실행되는 코드입니다.

참고

워크플로 종속성 잠금 파일은 공개 미리 보기에 있으며 변경될 수 있습니다.

워크플로 종속성을 잠그는 이유는 무엇인가요?

워크플로가 태그 또는 분기(예: uses: octo-org/deploy-action@v3 또는 uses: octo-org/deploy-action@main)로 작업을 참조하는 경우, GitHub Actions는 런타임에 해당 참조를 태그 또는 분기가 가리키는 커밋으로 확인합니다.

태그 및 분기가 이동할 수 있으므로 실행되는 코드가 워크플로 작성자가 원래 검토한 코드가 아닐 수 있습니다. 업스트림 유지 관리자의 계정이 손상되고 태그를 다시 지정하면 리포지토리가 악성 코드를 실행할 수 있습니다.

워크플로 종속성 잠금 파일은 커밋 SHA를 모든 작업(전이적 종속성 포함)과 사용자의 워크플로가 종속되는 재사용 가능한 워크플로에 고정합니다. 이렇게 하면 다음을 수행할 수 있습니다.

  • 재현 가능한 빌드
  • 검토 가능한 종속성 변경 및 Dependabot 버전 업데이트
  • CI/CD 시스템의 종속성에 대한 감사 가능한 인벤토리

잠금 파일은 어떻게 작동하나요?

lockfile은 .github/workflows/actions.lock에 있는 리포지토리에서 정의됩니다. gh actions-lock은(는) GitHub CLI 확장 프로그램에 의해 생성되며 수동으로 직접 편집해서는 안 됩니다.

리포지토리의 워크플로를 하나씩 또는 한꺼번에 잠금 파일에 온보딩할 수 있습니다. 워크플로가 온보딩된 후:

  • 워크플로에서 사용하는 모든 작업 종속성은 잠금 파일에 있어야 합니다.
  • 잠긴 커밋은 워크플로가 실행될 때 실행되는 항목이며, 허용된 작업 정책이 확인하는 대상입니다. 이 커밋은 원본 리포지토리의 분기 내에 있어야 합니다.

잠금 파일은 자체 리포지토리의 워크플로에 적용됩니다. 이는 전이적 종속성(즉, 사용자 작업의 종속성이 사용하는 작업)까지 확장되며, 재사용 가능한 워크플로 호출의 종속성은 제외하고 적용됩니다. 재사용 가능한 워크플로는 정의된 리포지토리의 잠금 파일이 적용됩니다.

lockfile에는 무엇이 기록되나요?

lockfile에는 두 개의 섹션이 있습니다. workflows는 온보딩된 각 워크플로에서 사용하는 종속성을 기록하고, dependencies는 이러한 각 참조가 확인되는 커밋을 기록합니다.

# This file is machine-generated by `gh actions-lock`.
# Do not edit by hand; run `gh actions-lock` to update.
version: 'v0.0.2'
workflows:
    '.github/workflows/ci.yml':
        - 'octo-org/[email protected]'
dependencies:
    'octo-org/[email protected]':
        ref: 'v3.1.0'
        commit: 'sha1-...'
        owner_id: 44036562
        repo_id: 197814629

각 종속성은 다음을 기록합니다:

  • ref: 워크플로에서 사용하는 참조(예: 태그 또는 브랜치)입니다.
  • commit: 참조가 가리키는 정확한 커밋입니다. 실행할 코드입니다.
  • owner_id 및 repo_id: 원본 리포지토리의 숫자 ID입니다. GitHub Actions에서는 이러한 값을 사용하여 런타임에 이름에 해당하는 리포지토리가 여전히 잠근 리포지토리와 동일한지 확인합니다.

잠금 파일은 SHA 고정과 비교하면 어떻습니까?

GitHub는 지금까지 워크플로 파일에서 타사 작업을 전체 길이 커밋 SHA에 고정하도록 권장해 왔습니다. 잠금 파일을 채택하는 리포지토리의 경우 워크플로 파일 내에서 SHA 고정이 더 이상 필요하지 않습니다. 잠금 파일은 전이적 종속성을 지원하고, 워크플로 파일을 더 쉽게 읽을 수 있게 하며, 원본 리포지토리의 ID를 기록하기 때문에 더 나은 옵션입니다.

다음 단계

리포지토리에 대한 잠금 파일을 만들려면 리포지토리의 워크플로에서 액션 종속성 잠금을 참조하세요.