gitlab ciとprivate goモジュールの設定
去年話しましたprivate repositories and Gitlab CI 我々の物語と同様に我々migrated to modules , その移行の間(そして、我々が我々のプロジェクトを組織する方法のため)我々は
以下のようになります.
しかし、さらに調査した後に、私は、以下を使用するより良い代替案があるとわかりました:
Gitlab's Personal Access Tokens , and これには4つの変更が必要でした. パーソナルアクセストークンを使用します. 更新 更新 取り外し
具体的には次のスコープを持つ新しいトークンが必要です. セキュリティのために、このトークンは新しいCI/CD environment variable , そのために二つの新しい変数を定義します: 使用する代わりに新しいトークンを定義する理由
置換
dockerfileは次のように変更されます.
最後に最後のステップはそれらを取り除く
.git
プライベートモジュールにはreplace
ディレクティブgo.mod
明示的に、そのリポジトリの正確な位置を示します.以下のようになります.
require (
private.gitlab.instance/project/team/service-name v1.0.0
)
replace (
private.gitlab.instance/project/team/service-name => private.gitlab.instance/project/team/service-name.git v1.0.0
)
そのワークフローは、慣用的ではなく、面倒であり、私たち自身の内部の依存関係を正常よりもアップグレードしました.しかし、さらに調査した後に、私は、以下を使用するより良い代替案があるとわかりました:
Gitlab's Personal Access Tokens , and
.netrc
.gitlab-ci.yml
新しいトークンを適切に使用するにはDockerfile
定義する.netrc
設定、replace
ディレクティブgo.mod
. 個人アクセストークンの使用
具体的には次のスコープを持つ新しいトークンが必要です.
read_api
repository_access
GO_MODULES_USER
gitlabのユーザ名とGO_MODULES_PERSONAL_ACCESS_TOKEN
作成したトークンを表現します.CI_JOB_TOKEN
あれはtoken does not have enough permissions 呼び出し時に正しいリポジトリを決定するのに使用されるGitLab APIにアクセスするにはgo mod <xyz>
舞台裏で.更新。Gitlab CI新しいトークンを正しく使用するには
置換
docker build
新しい変数を渡す命令は、こうするべきです.docker build \
--build-arg CI_JOB_TOKEN
次のように変更できます.docker build \
--build-arg GO_MODULES_USER
--build-arg GO_MODULES_PERSONAL_ACCESS_TOKEN
dockerfileを更新するには.NETRC構成
dockerfileは次のように変更されます.
FROM golang:1.15.0-alpine3.12
ARG GO_MODULES_USER
ARG GO_MODULES_PERSONAL_ACCESS_TOKEN
WORKDIR /project-name/
RUN go env -w GOPRIVATE="private.gitlab.instance" && \
echo -e "machine private.gitlab.instance\nlogin ${GO_MODULES_USER}\npassword ${GO_MODULES_PERSONAL_ACCESS_TOKEN}" > ~/.netrc
COPY ["go.mod", "go.sum", "./"]
RUN go mod download
COPY . .
#-
FROM golang:1.15.0-alpine3.12
WORKDIR /project-name/
ENV PATH=/go/bin/:$PATH
COPY --from=0 /project-name/ /project-name/
COPY --from=0 /go/ /go/
私たちは確かに資格証明書は、最終的なDocker画像に格納されて格納されていない知っている置換ディレクティブをGoで削除します。mod。
最後に最後のステップはそれらを取り除く
.git
replaceディレクティブ:require (
private.gitlab.instance/project/team/service-name v1.0.0
)
そして、我々はよく知られているgo get/mod
ワークフロー!Reference
この問題について(gitlab ciとprivate goモジュールの設定), 我々は、より多くの情報をここで見つけました https://dev.to/mariocarrion/configuring-gitlab-ci-and-private-go-modules-46h7テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol