Go제 도구를 GiitHub Contaainer Registry에 배치하여 GiitHub Action으로 공개

개요


GiitHub Action으로 Go가 만든 도구를 활용하고 싶을 때 Docker 컨테이너 Action으로 공개하고 사용 전 프로세스를 정리했다.
그나저나 지트 허브 액션을 직접 만들고 싶은 동기라면 일부러 Go로 쓰고 Docker를 컨테이너화하는 것보다 자바스크립트로 직접 액션을 만드는 것이 빠르고 수월하다.
동작에 이미 있는 Go 자제 도구를 사용한다면 탓하지 마세요.

물줄기


기본 절차는 다음과 같다.
  • Go 제조 도구 Docker화
  • GiitHub Container Registry에 Docker 설치
  • 공개 용기
  • 동작화
  • Go 제조 도구 Docker화


    https://zenn.dev/kyoh86/articles/0561dd14d9dc1e572427
    에서 이미 설명했으니 자세한 상황은 놓치지 마세요.
    FROM golang:alpine AS build-stage
    ADD . /work
    WORKDIR /work
    RUN go build -o entrypoint .
    
    FROM alpine:latest
    COPY --from=build-stage /work/entrypoint /usr/local/bin/entrypoint
    ENTRYPOINT ["/usr/local/bin/entrypoint"]
    
    이런 Docker를 배치하면 docker build -t hogedocker run hoge의 Docker 이미지를 만들 수 있다.

    GiitHub Container Registry에 Docker 배치


    Docker Hub에 올릴 수도 있지만 Docker Hub은 트래픽 제한이 커졌으니 어쨌든 최근 공개된 GiitHub Contaainer Registry는 GiitHub Actions를 통해 올리도록 하겠습니다.
    다음 동작을 쓰면 됩니다.
          - name: Set up Docker Buildx
            uses: docker/setup-buildx-action@v1
          - name: Login to GitHub Container Registry
            uses: docker/login-action@v1
            with:
              registry: ghcr.io
              username: ${{ github.repository_owner }}
              password: ${{ secrets.CR_PAT }}
          - name: Build and push
            uses: docker/build-push-action@v2
            with:
              context: .
              push: true
              tags: |
                ghcr.io/${{ github.repository }}:latest
                ghcr.io/${{ github.repository }}:${{ steps.get_tag.outputs.TAG }}
    
    Docker Build를 위한 준비Set up Docker Buildx와 GiitHub Container RegistryLogin to GitHub Docker Container Registry에 로그인하여 Build &Push를 진행할 뿐입니다.[1]
    지금 GiitHub Contaainer Registry에 로그인하려면 특별한 Private Access Token, https://github.com/settings/tokens이 Token을 준비하고 이 창고의 Secrets에 "CR_PAT"라는 이름으로 등록해야 한다.
    사용 권한
  • write:packages Upload packages to github package registry
  • read:packages Download packages from github package registry
  • delete:packages Delete packages from github package registry
    세 개가 필요합니다.
  • 마지막delete:packages은 필요 없을 것 같은데 왜 푸시 때 권한 부족으로 실패했는지(11월 8일 현재) 몰라서 지금 쓰고 있어요.

    공개 용기


    (이 절차는 상황에 따라 필요하지 않을 수 있습니다.)
    이어 액션 쪽에서 사용하기 위해 이 컨테이너를 공개한다.
    다만, GiitHub Container Registry가 아직 Public Beta에 불과하기 때문에 이 방법은 좀 불안정하다.
    매뉴얼'컨테이너 이미지의 액세스 제어 및 가시성 설정에도 이미지 누락, 오류 등이 있어 이상하다.
    메뉴판 어디를 클릭하면 이런 도선이 자주 변한다.
    그래서 지금 아래처럼 URL을 직접 지정하는 것이 매우 빠르다.https://github.com/users/<OWNER>/packages/container/package/<REPO-NAME>/settings
    여기Make Public면 공개할 수 있다.

    동작화


    이렇게 되면 콘테이너 자체는 잘하지만, 액션에 올리기까지는 시간이 조금 더 걸린다.
    액션으로 공개되면 이런 리포지토리를 차단하는 게 좋다.
    필요한 물건이 많지 않다.
    자세한 내용은 관영 매뉴얼을 보면 된다.
    컨테이너 작업 작성
    그리고 앞서 Docker file에 공개된 GiitHub Contaainer Registry 이미지를 참조하면 됩니다.
    FROM ghcr.io/<OWNER>/<REPO-NAME>:v*.*.*
    ADD ./entrypoint.sh /entrypoint.sh
    ENTRYPOINT ["/entrypoint.sh"]
    

    최후


    이런 형태로 졸작git-vertag을 액션화했다.
    git-vertag-action
    예를 들어 보세요.
    각주
    그나저나 GiitHub Contaainer Registry와 일반 Repository는 분리된 것 같아서 필요 없을 것 같다${{ github.repository }}, 적당한 이름↩︎

    좋은 웹페이지 즐겨찾기