참고: 이 기능을 사용하려면 먼저 사이트 관리자가 your GitHub Enterprise Server instance에 대해 Dependabot updates을(를) 설정해야 합니다. 자세한 내용은 “엔터프라이즈에 Dependabot 사용”을 참조하세요.
Dependabot 및 GitHub Actions 정보
Dependabot은 종속성을 최신 상태로 유지하기 위해 끌어오기 요청을 만들고, 해당 끌어오기 요청이 생성될 때 GitHub Actions를 사용하여 자동화된 작업을 수행할 수 있습니다. 예를 들어 추가 아티팩트 가져오기, 레이블 추가, 테스트 실행 또는 끌어오기 요청 수정 등이 있습니다.
이벤트에 응답
Dependabot은 끌어오기 요청 및 댓글에서 GitHub Actions 워크플로를 트리거할 수 있지만 다른 방식으로 처리되는 이벤트도 있습니다.
GITHUB_TOKEN에는 관리자가 제한을 제거하지 않는 한 읽기 전용 권한이 있습니다.- 관리자가 제한을 해제하지 않으면 비밀에 액세스할 수 없습니다.
자세한 내용은 “GitHub Actions 및 워크플로 보안 유지: pwn 요청 방지”를 참조하세요.
참고: 사이트 관리자는 your GitHub Enterprise Server instance에 대한 이러한 제한을 재정의할 수 있습니다. 자세한 내용은 “엔터프라이즈의 GitHub Actions 문제 해결”을 참조하세요.
제한 사항이 제거되는 경우 Dependabot에서 워크플로가 트리거되면 GitHub Actions 비밀에 액세스할 수 있으며 permissions 조건을 사용하여 읽기 전용 액세스에서 GITHUB_TOKEN의 기본 범위를 확대할 수 있습니다. “pull_request 이벤트 처리” 및 “push 이벤트 처리” 섹션의 특정 단계는 더 이상 적용되지 않으므로 무시할 수 있습니다.
pull_request 이벤트 처리
워크플로에서 비밀 또는 쓰기 권한이 있는 GITHUB_TOKEN에 대한 액세스 권한이 필요한 경우 두 가지 옵션(pull_request_target 사용 또는 두 개의 별도 워크플로 사용)이 있습니다. 이 섹션에서는 pull_request_target과 “push이벤트 처리”에서 아래의 두 워크플로를 사용하는 방법에 대해 자세히 설명합니다.
다음은 현재 실패할 수 있는 pull_request 워크플로의 간단한 예시입니다.
### This workflow now has no secrets and a read-only token
name: Dependabot Workflow
on:
pull_request
jobs:
dependabot:
runs-on: ubuntu-latest
# Always check the actor is Dependabot to prevent your workflow from failing on non-Dependabot PRs
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v2
pull_request를 포크에서 끌어오기 요청에 사용되는 pull_request_target으로 바꾸고 끌어오기 요청 HEAD를 명시적으로 체크 아웃할 수 있습니다.
경고: pull_request대신 pull_request_target을 사용하면 안전하지 않은 동작에 노출됩니다. 아래 “push 이벤트 처리”에 설명된 대로 두 워크플로 메서드를 사용하는 것이 좋습니다.
### This workflow has access to secrets and a read-write token
name: Dependabot Workflow
on:
pull_request_target
permissions:
# Downscope as necessary, since you now have a read-write token
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v2
with:
# Check out the pull request HEAD
ref: ${{ github.event.pull_request.head.sha }}
github-token: ${{ secrets.GITHUB_TOKEN }}
또한 필요한 것보다 더 많은 권한이 있는 토큰이 유출되지 않도록, GITHUB_TOKEN에 부여된 액세스 권한을 축소하는 것이 좋습니다. 자세한 내용은 “GITHUB_TOKEN에 대한 권한”을 참조하세요.
push 이벤트 처리
push 이벤트에 해당하는 pull_request_target이 없으므로 아티팩트 업로드로 끝나는 신뢰할 수 없는 워크플로 1개와 아티팩트를 다운로드하고 계속해서 처리하는 신뢰할 수 있는 두 번째 워크플로, 총 2개의 워크플로를 사용해야 합니다.
첫 번째 워크플로는 신뢰할 수 없는 작업을 수행합니다.
### This workflow doesn't have access to secrets and has a read-only token
name: Dependabot Untrusted Workflow
on:
push
jobs:
check-dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: ...
두 번째 워크플로는 첫 번째 워크플로가 성공적으로 완료된 후 신뢰할 수 있는 작업을 수행합니다.
### This workflow has access to secrets and a read-write token
name: Dependabot Trusted Workflow
on:
workflow_run:
workflows: ["Dependabot Untrusted Workflow"]
types:
- completed
permissions:
# Downscope as necessary, since you now have a read-write token
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- uses: ...
수동으로 워크플로 다시 실행
실패한 Dependabot 워크플로를 수동으로 다시 실행할 수도 있으며, 이 워크플로는 읽기-쓰기 토큰과 비밀에 대한 액세스 권한을 통해 실행됩니다. 실패한 워크플로를 수동으로 다시 실행하기 전에 업데이트되는 종속성을 확인하여 변경 사항으로 인해 악의적이거나 의도하지 않은 동작이 발생하지 않도록 해야 합니다.
일반적인 Dependabot 자동화
다음은 GitHub Actions를 사용하여 자동화할 수 있는 일반적인 시나리오입니다.
참고: 사이트 관리자가 your GitHub Enterprise Server instance에서 Dependabot에 대한 제한을 재정의 pull_request_target 한 경우 다음 워크플로 대신 를 사용할 pull_request 수 있습니다.
끌어오기 요청에 대한 메타데이터 가져오기
대량의 자동화를 사용하려면 끌어오기 요청의 내용에 대한 정보, 즉 종속성 이름이 무엇인지, 프로덕션 종속성인지, 주요 업데이트인지, 사소한 업데이트인지 또는 패치 업데이트인지를 알고 있어야 합니다.
dependabot/fetch-metadata 작업은 사용자에게 모든 정보를 제공합니다.
name: Dependabot fetch metadata
on: pull_request_target
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
# The following properties are now available:
# - steps.dependabot-metadata.outputs.dependency-names
# - steps.dependabot-metadata.outputs.dependency-type
# - steps.dependabot-metadata.outputs.update-type
자세한 내용은 dependabot/fetch-metadata 리포지토리를 참조하세요.
끌어오기 요청에 레이블 지정
GitHub 레이블을 기반으로 하는 다른 자동화 또는 심사 워크플로가 있는 경우 제공된 메타데이터에 따라 레이블을 할당하도록 작업을 구성할 수 있습니다.
예를 들어 레이블을 사용하여 모든 프로덕션 종속성 업데이트에 플래그를 지정하려는 경우:
name: Dependabot auto-label
on: pull_request_target
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Add a label for all production dependencies
if: ${{ steps.dependabot-metadata.outputs.dependency-type == 'direct:production' }}
run: gh pr edit "$PR_URL" --add-label "production"
env:
PR_URL: ${{github.event.pull_request.html_url}}
끌어오기 요청 승인
Dependabot 끌어오기 요청을 자동으로 승인하려면 워크플로에서 GitHub CLI를 사용할 수 있습니다.
name: Dependabot auto-approve
on: pull_request_target
permissions:
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Approve a PR
run: gh pr review --approve "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
끌어오기 요청에서 자동 병합 사용
유지 관리자가 자동 병합에 대한 특정 끌어오기 요청을 표시하도록 허용하려면 GitHub의 자동 병합 기능을 사용할 수 있습니다. 이렇게 하면 분기 보호 규칙에 필요한 테스트 및 승인이 성공적으로 충족될 때 끌어오기 요청을 병합할 수 있습니다. 자세한 내용은 "끌어오기 요청 자동 병합" 및 "분기 보호 규칙 관리"를 참조하세요.
참고: 상태 검사를 사용하여 끌어오기 요청을 테스트하는 경우 Dependabot 끌어오기 요청에 대한 대상 분기 를 병합하기 전에 상태 검사 필요를 통과하도록 설정해야 합니다. 이 분기 보호 규칙은 필요한 모든 상태 검사가 통과하지 않는 한 끌어오기 요청이 병합되지 않도록 합니다. 자세한 내용은 “분기 보호 규칙 관리”를 참조하세요.
대신 GitHub Actions 및 GitHub CLI를 사용할 수 있습니다. 다음은 my-dependency에 대한 모든 패치 업데이트를 자동으로 병합하는 예제입니다.
name: Dependabot auto-merge
on: pull_request_target
permissions:
contents: write
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Enable auto-merge for Dependabot PRs
if: ${{contains(steps.dependabot-metadata.outputs.dependency-names, 'my-dependency') && steps.dependabot-metadata.outputs.update-type == 'version-update:semver-patch'}}
run: gh pr merge --auto --merge "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
실패한 워크플로 실행 문제 해결
워크플로 실행이 실패하면 다음을 확인합니다.
- 올바른 작업자가 워크플로를 트리거하는 경우에만 워크플로를 실행합니다.
pull_request에 대해 올바른ref를 체크 아웃합니다.- Dependabot이 트리거하는
pull_request,pull_request_review,pull_request_review_comment또는push이벤트 내에서 비밀에 대한 액세스를 시도하지 않습니다. - Dependabot이 트리거하는
pull_request,pull_request_review,pull_request_review_comment또는push이벤트 내에서write작업을 시도하지 않습니다.
GitHub Actions를 작성하고 디버깅하는 방법에 대한 자세한 내용은 “GitHub Actions에 대해 알아보기”을 참조하세요.