Closed9

Goでプライベートリポジトリをimportしたプロジェクトをビルドする

u1u1

色々と調べてみた結果としては以下のような感じでできそうなだけどうまくいかない。

ARG TOKEN

ENV GOPRIVATE=github.com/y16ra/*
RUN git config --global url."https://${TOKEN}:x-oauth-basic@github.com/".insteadOf "https://github.com/"
RUN go mod download
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o /app ./main.go
u1u1

どんなエラーが出ているとかというと以下の通り。

Step 10/15 : RUN go mod download
 ---> Running in 33716f32c154
go: github.com/y16ra/go-private-lib@v0.0.0-20230509002855-925480f1ff98: invalid version: git ls-remote -q origin in /go/pkg/mod/cache/vcs/cef9697f4e4465fecb937919957f172ffb05cfb24b2c263bf6f95b0e27b2f25c: exit status 128:
        remote: Repository not found.
        fatal: Authentication failed for 'https://github.com/y16ra/go-private-lib/'

go-private-lib というモジュールをプライベートリポジトリして用意して、それを利用したプロジェクトのDockerビルドをしようとしている

u1u1

TOKENにはGithubで取得したPersonal Access Tokenを指定している。
Personal Access Tokens(classic)を使い権限はrepoをつけている。

docker build . -t hello-world --build-arg TOKEN=xxxxxxxxxxxxx
u1u1

ローカル環境でgo getする分にはGOPRIVATE=github.com/y16ra/*だけ環境変数入れとけばできるのにな

u1u1

どうも${TOKEN}のところが--build-argで指定した値に置き換えられていなくて

RUN git config --global url."https://${TOKEN}:x-oauth-basic@github.com/".insteadOf "https://github.com/"

.gitconfigが以下のようになっていることがわかったがそれはなぜか

[url "https://:x-oauth-basic@github.com/"]
        insteadOf = https://github.com/

u1u1

ARGを宣言する位置の問題だった

ダメな例

ARG GO_VERSION=1.20
ARG GITHUB_PAT

# First stage: build the executable.
FROM amd64/golang:${GO_VERSION}-alpine AS builder

ENV GOPRIVATE=github.com/y16ra/*
RUN git config --global url."https://${GITHUB_PAT}:x-oauth-basic@github.com/".insteadOf "https://github.com/"
RUN go mod download
RUN go build -o /app ./main.go

通った例

ARG GO_VERSION=1.20

# First stage: build the executable.
FROM amd64/golang:${GO_VERSION}-alpine AS builder

ARG GITHUB_PAT
ENV GOPRIVATE=github.com/y16ra/*
RUN git config --global url."https://${GITHUB_PAT}:x-oauth-basic@github.com/".insteadOf "https://github.com/"
RUN go mod download
RUN go build -o /app ./main.go
このスクラップは2023/05/09にクローズされました