gpt4 book ai didi

git - 在 Docker 中使用私有(private) gitlab 模块构建 Go 应用程序

转载 作者:行者123 更新时间:2023-12-03 10:07:41 25 4
gpt4 key购买 nike

我正在尝试在 docker 文件上构建我的 go 应用程序。在我的 go.mod 中有一个需要身份验证/ssh 的私有(private)包。这个问题类似于 Building Go apps with private modules in Docker ,但在我的情况下,我必须从 gitlab pull 包不是来自 github .这是我的 docker 文件:

# builder image
FROM golang:1.14.11-alpine AS builder

# specific directory for build process
WORKDIR /usr/src/build

# copying the source code
# to the current working directory
COPY . .
RUN apk add --no-cache openssh-client
RUN apk add --no-cache git

# create ssh directory
RUN mkdir ~/.ssh
RUN touch ~/.ssh/known_hosts
RUN ssh-keyscan -t rsa gitlab.com >> ~/.ssh/known_hosts

# allow private repo pull
RUN git config --global url."https://my-personal-access-token:token@gitlab.com/".insteadOf "https://gitlab.com/"

ADD . /go/src/gitlab.com/my-repo/backends/backend-structs
CMD cd /go/src/gitlab.com/my-repo/backends/backend-structs; go get /go/src/gitlab.com/my-repo/backends/backend-structs && go build -o /go/bin/backend-structs


# executing build process
RUN GOOS=linux go build -ldflags="-s -w" -o app

# runtime image
FROM golang:1.14.11-alpine AS runtime

# create and use non-root user
# to increase container security
# ref https://pythonspeed.com/articles/root-capabilities-docker-security/
RUN adduser myuser --disabled-password

USER myuser

WORKDIR /home/myuser

# copy the executable binary file from builder directory
# to the current working directory
COPY --from=builder /usr/src/build/app .

# exposing port
EXPOSE 8080

# run the application
CMD ["./app"]
我已尝试遵循本教程 https://divan.dev/posts/go_get_private/ , 通过更改 github.comgitlab.com仍然失败。
以下是错误详情:
#17 5.830       remote: HTTP Basic: Access denied
#17 5.830 fatal: Authentication failed for 'https://gitlab.com/my-repo/backends.git/'
------
executor failed running [/bin/sh -c GOOS=linux go build -ldflags="-s -w" -o app]: exit code: 1
这里的任何人都知道如何使用 golang 私有(private)包创建 dockerfile(repo 托管在 gitlab.com 中)?

最佳答案

根据我的经验,不要使用 git configs 来解决这个问题。仅使用 ~/.netrc .这是专门为此制作的指南:https://gist.github.com/MicahParks/1ba2b19c39d1e5fccc3e892837b10e21
我也会在下面粘贴它的内容。
问题go命令行工具需要能够从您的私有(private) GitLab 中获取依赖项,但需要进行身份验证。
这假设您的私有(private) GitLab 托管在 privategitlab.company.com .
环境变量
推荐使用以下环境变量:

export GO111MODULE=on
export GOPRIVATE=privategitlab.company.com
以上几行可能最适合您的 shell 启动,例如 ~/.bashrc .
解释 GO111MODULE=on告诉 Golang 命令行工具你正在使用模块。我没有用不使用的项目对此进行测试
私有(private) GitLab 上的 Golang 模块。 GOPRIVATE=privategitlab.company.com告诉 Golang 命令行工具不要将公共(public)互联网资源用于主机名
列出(如公共(public)模块代理)。
从您的私有(private) GitLab 获取个人访问 token
为了将来证明这些说明,请遵循 this guide from the GitLab docs .
我知道 read_api范围是 Golang 命令行工具工作所必需的,我可能怀疑 read_repository作为
好吧,但还没有证实这一点。
设置 ~/.netrc为了让 Golang 命令行工具向 GitLab 进行身份验证, ~/.netrc文件最好使用。
如果文件不存在,要创建该文件,请运行以下命令:
touch ~/.netrc
chmod 600 ~/.netrc
现在编辑文件的内容以匹配以下内容:
machine privategitlab.company.com login USERNAME_HERE password TOKEN_HERE
在哪里 USERNAME_HERE替换为您的 GitLab 用户名和 TOKEN_HERE被替换为在
上一节。
常见错误
不是 使用以下内容设置全局 git 配置:
git config --global url."git@privategitlab.company.com:".insteadOf "https://privategitlab.company.com"
我相信在撰写本文时,Golang 命令行工具不完全支持 SSH git,这可能会导致
~/.netrc 冲突.
奖励:SSH 配置文件
定期使用 git工具,而不是 Golang 命令行工具,有一个 ~/.ssh/config 很方便文件设置。
为此,请运行以下命令:
mkdir ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/config
chmod 600 ~/.ssh/config
请注意,以上文件和目录的权限是 SSH 在其默认配置下工作的基本条件
大多数Linux系统。
然后,编辑 ~/.ssh/config文件以匹配以下内容:
Host privategitlab.company.com
Hostname privategitlab.company.com
User USERNAME_HERE
IdentityFile ~/.ssh/id_rsa
请注意上述文件中的间距很重要,如果不正确将使文件无效。
在哪里 USERNAME_HERE是您的 GitLab 用户名和 ~/.ssh/id_rsa是文件系统中 SSH 私钥的路径。
您已经将其公钥上传到 GitLab。这里是 some instructions .

关于git - 在 Docker 中使用私有(private) gitlab 模块构建 Go 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65824786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com