이 글은 나처럼 공식 문서를 전체적으로 파악하지 않은 상태에서 GitHub Actions으로 GitHub Packages에 push 하는 사람들의 삽질을 방지하기 위한 글이다.


어떤 테스크를 해결하기 위해 도커라이징 한 파일을 GitHub Packages에 올릴 일이 생겼다.

매번 이미지를 빌드 할 때 마다 푸시하기 귀찮았고, 이미 GitHub Actions을 CI 용으로 쓰고 있기 때문에 GitHub Actions로 docker 이미지를 푸시 하는 것을 구현하였다.

GitHub Actions에서 docker 레지스트리에 로그인하고 빌드한 뒤 푸시하는 예제는 공식 문서에 아주 잘 나와 있어 구현하기 편했다.

예제를 비슷하게 따라 친 다음 workflow를 올렸는데, Build and push Docker image 단계에서 계속 아래와 같은 오류가 발생 했다.

Error: buildx call failed with: error: denied: permission_denied: write_package

바로 yaml 파일의 permission이 선언 되어 있는 부분에 대해서 찾아보았다. 이 부분은 GITHUB_TOKEN 관련 된 권한이고, 문서에 나온 내용이 맞다면 잘못 된 부분은 없었다.

jobs:
  build-and-push-image:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

결국, 20~30분 동안 삽질하다가 원인과 해결법을 알려줄 문서를 찾았다. 해결법은 레포지토리의 설정 탭에서 GitHub Actions의 workflow에 권한을 주기만 할 정도로 간단 했다. 스크린샷과 자세한 방법은 앞에 링크 걸어 놓은 페이지를 확인하면 된다.

(아니 세팅이 필요하면 예제가 나와 있는 Publishing images to GitHub Packages 문서에 링크라도 걸어줘야 하는거 아닌가?)


Reference