Closed9
Goでプライベートリポジトリをimportしたプロジェクトをビルドする
色々と調べてみた結果としては以下のような感じでできそうなだけどうまくいかない。
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
どんなエラーが出ているとかというと以下の通り。
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ビルドをしようとしている
TOKENにはGithubで取得したPersonal Access Tokenを指定している。
Personal Access Tokens(classic)を使い権限はrepoをつけている。
docker build . -t hello-world --build-arg TOKEN=xxxxxxxxxxxxx
ローカル環境でgo get
する分にはGOPRIVATE=github.com/y16ra/*
だけ環境変数入れとけばできるのにな
どうも${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/
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
Dockerムズカシイ
これらを試したリポジトリはこちらです
はい。DockerfileのARGのスコープ理解していませんでした。。
このスクラップは2023/05/09にクローズされました