Dependabot이 이벤트를 트리거하는 경우의 제한 사항
Dependabot은 끌어오기 요청 및 댓글에서 GitHub Actions 워크플로를 트리거할 수 있지만 다른 방식으로 처리되는 이벤트도 있습니다.
pull_request
, pull_request_review
, pull_request_review_comment
, push
, create
, deployment
및 deployment_status
이벤트를 사용하여 Dependabot(github.actor == 'dependabot[bot]'
)에서 시작된 워크플로의 경우 다음 제한이 적용됩니다.
GITHUB_TOKEN
에는 기본적으로 읽기 권한만이 부여되어 있습니다.- 비밀은 Dependabot의 비밀에서 채워집니다. GitHub Actions 비밀을 사용할 수 없습니다.
Dependabot(github.actor == 'dependabot[bot]'
)에서 pull_request_target
이벤트를 사용하여 시작한 워크플로의 경우 끌어오기 요청의 기본 참조가 Dependabot(github.event.pull_request.user.login == 'dependabot[bot]'
)에 의해 만들어졌다면 GITHUB_TOKEN
은 읽기 전용이며 비밀을 사용할 수 없습니다.
이러한 제한은 다른 행위자가 워크플로를 다시 실행하는 경우에도 적용됩니다.
자세한 내용은 GitHub Actions 및 워크플로 보안 유지: pwn 요청 방지를 참조하세요.
Dependabot이 기존 워크플로를 트리거할 때 발생하는 오류 문제 해결
GitHub.com에서 Dependabot 업데이트를 설정한 후 Dependabot 이벤트로 기존 워크플로가 트리거될 때 오류가 표시될 수 있습니다.
기본적으로 Dependabot의 push
, pull_request
, pull_request_review
또는 pull_request_review_comment
이벤트에서 트리거된 GitHub Actions 워크플로 실행은 리포지토리 포크에서 열린 것처럼 처리됩니다. 이 경우 다른 작업자에서 트리거된 워크플로와 달리, 읽기 전용 GITHUB_TOKEN
을 받게 되며 일반적으로 사용할 수 있는 비밀에 액세스할 수 없습니다. 따라서 리포지토리에 쓰려는 워크플로가 Dependabot에서 트리거된 경우 실패합니다.
문제를 해결하는 방법에는 다음 세 가지가 있습니다.
if: github.actor != 'dependabot[bot]'
과 같은 식을 사용하여 더 이상 Dependabot에서 트리거되지 않도록 워크플로를 업데이트할 수 있습니다. 자세한 내용은 워크플로 및 작업에서 식 평가을(를) 참조하세요.pull_request_target
이 포함되어 이 제한 사항이 없는 2단계 프로세스를 사용하도록 워크플로를 수정할 수 있습니다. 자세한 내용은 GitHub Actions의 Dependabot 문제 해결을(를) 참조하세요.- 비밀에 대한 Dependabot 액세스로 트리거되는 워크플로를 제공하고
permissions
용어가GITHUB_TOKEN
의 기본 범위를 늘리도록 허용할 수 있습니다.
이 문서에서는 몇 가지 문제 해결 조언을 제공합니다. GitHub Actions에 대한 워크플로 구문도 볼 수 있습니다.
비밀에 액세스
Dependabot 이벤트가 워크플로를 트리거하는 경우 워크플로에서 사용할 수 있는 유일한 비밀은 Dependabot 비밀뿐입니다. GitHub Actions 비밀을 사용할 수 없습니다. 따라서 Dependabot 이벤트에 의해 트리거되는 워크플로에서 사용되는 모든 비밀을 Dependabot 비밀로 저장해야 합니다. 자세한 내용은 Dependabot에 대한 개인 레지스트리 액세스 구성을(를) 참조하세요.
Dependabot 비밀은 secrets
컨텍스트에 추가되고 GitHub Actions에 대한 비밀과 정확히 동일한 구문을 사용하여 참조됩니다. 자세한 내용은 GitHub Actions에서 비밀 사용을(를) 참조하세요.
Dependabot 및 다른 행위자가 트리거하는 워크플로가 있는 경우 가장 간단한 해결 방법은 작업에 필요한 권한과 이름이 동일한 Dependabot 비밀에 토큰을 저장하는 것입니다. 그러면 워크플로는 해당 비밀에 대한 단일 호출을 포함할 수 있습니다. Dependabot의 비밀 이름이 다른 경우 조건을 사용하여 여러 작업자가 사용할 올바른 비밀을 지정합니다.
조건을 사용하는 예제는 GitHub Actions를 통한 Dependabot 자동화을(를) 참조하세요.
사용자 이름 및 암호를 사용하여 AWS의 프라이빗 컨테이너 레지스트리에 액세스하려면 워크플로에 username
및 password
에 대한 비밀이 포함되어 있어야 합니다.
이 예제에서 Dependabot가 워크플로를 트리거하면 이름이 READONLY_AWS_ACCESS_KEY_ID
및 READONLY_AWS_ACCESS_KEY
인 Dependabot 비밀이 사용됩니다. 다른 작업자가 워크플로를 트리거하는 경우 해당 이름의 작업 비밀이 사용됩니다.
name: CI on: pull_request: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Login to private container registry for dependencies uses: docker/login-action@3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c with: registry: https://1234567890.dkr.ecr.us-east-1.amazonaws.com username: ${{ secrets.READONLY_AWS_ACCESS_KEY_ID }} password: ${{ secrets.READONLY_AWS_ACCESS_KEY }} - name: Build the Docker image run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
name: CI
on:
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Login to private container registry for dependencies
uses: docker/login-action@3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c
with:
registry: https://1234567890.dkr.ecr.us-east-1.amazonaws.com
username: ${{ secrets.READONLY_AWS_ACCESS_KEY_ID }}
password: ${{ secrets.READONLY_AWS_ACCESS_KEY }}
- name: Build the Docker image
run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
GITHUB_TOKEN
권한 변경
기본적으로 Dependabot로 트리거된 GitHub Actions 워크플로에는 GITHUB_TOKEN
과 읽기 전용 권한이 제공됩니다. 워크플로의 permissions
키를 사용하여 토큰에 대한 액세스를 늘릴 수 있습니다.
name: CI on: pull_request # Set the access for individual scopes, or use permissions: write-all permissions: pull-requests: write issues: write repository-projects: write ... jobs: ...
name: CI
on: pull_request
# Set the access for individual scopes, or use permissions: write-all
permissions:
pull-requests: write
issues: write
repository-projects: write
...
jobs:
...
자세한 내용은 자동 토큰 인증을(를) 참조하세요.
수동으로 워크플로 다시 실행
Dependabot 워크플로를 수동으로 다시 실행하는 경우, 다시 실행을 시작한 사용자의 권한이 다르더라도 이전과 동일한 권한으로 실행됩니다. 자세한 내용은 워크플로 및 작업 다시 실행을(를) 참조하세요.