去获取"get"意想不到的EOF



感谢您访问这里。

首先,我为我糟糕的英语道歉,也许有点不对,希望你能帮助我。

然后我在使用Gitlab runner(14.9.0)和dind(docker:dind)在k8s平台(v1.23.5+1)上部署新的CI/CD系统时遇到了一个小问题

在将CI部署到具有https://gitlab.domain.com私有存储库的Golang应用程序时(我进行了go env -w GOPRIVATE配置),go mod tidy命令出现问题。具体得到unexpected EOF错误。我试过go mod tidy -v,但它似乎没有提供更多信息。

我做了很多工作来解决这个问题。具体来说,我已经用我的私人存储库完成了wget和git clone命令,它们仍然能够成功下载。我尝试在go.mod中的https://gitlab.com添加一个私有存储库,它们仍然可以在没有任何错误的情况下检索。实际上,在不使用我的新跑步者的情况下,我仍然可以在另一个vps中使用git clonego mod tidy。所有这些都让我想知道我到底是从哪里得到错误的?是我的gitlab还是我的k8s gitlab runner

这是转轮输出

go: downloading gitlab.domain.com/nood/fountain v0.0.12
unexpected EOF
Cleaning up project directory and file based variables
ERROR: Job failed: command terminated with exit code 1

这是我的.gitlab-ci.yml

image: docker:latest
stages:
- build
- deploy
variables:
GTV_ECR_REPOSITORY_URL: repo.domain.com
PROJECT: nood
APP_NAME: backend-super-system
APP_NAME_ECR: backend-super-system
IMAGE_TAG: $GTV_ECR_REPOSITORY_URL/$PROJECT/$APP_NAME_ECR
DOCKER_HOST: tcp://docker:2375/
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
services:
- name: docker:dind
entrypoint: ["env", "-u", "DOCKER_HOST"]
command: ["dockerd-entrypoint.sh", "--tls=false"]
build:
stage: build
allow_failure: false
script:
- echo "Building image."
- docker pull $IMAGE_TAG || echo "Building runtime from scratch"
- >
docker build
--cache-from $IMAGE_TAG
-t $IMAGE_TAG --network host .
- docker push $IMAGE_TAG

Dockerfile

FROM golang:alpine3.15
LABEL maintainer="NoodExe <nood.pr@gmail.com>"
WORKDIR /app
ENV BIN_DIR=/app/bin
RUN apk add --no-cache gcc build-base git
ADD . .
RUN chmod +x scripts/env.sh scripts/build.sh 
&& ./scripts/env.sh 
&& ./scripts/build.sh
# stage 2
FROM alpine:latest
WORKDIR /app
ENV BIN_DIR=/app/bin
ENV SCRIPTS_DIR=/app/scripts
ENV DATA_DIR=/app/data
# Build Args
ARG LOG_DIR=/var/log/nood
# Create log directory
RUN mkdir -p ${BIN_DIR} 
mkdir -p ${SCRIPTS_DIR} 
mkdir -p ${DATA_DIR} 
mkdir -p ${LOG_DIR} 
&& apk update 
&& addgroup -S nood 
&& adduser -S nood -G nood 
&& chown nood:nood /app 
&& chown nood:nood ${LOG_DIR}
USER nood
COPY --chown=nood:nood --from=0 ${BIN_DIR} /app
COPY --chown=nood:nood --from=0 ${DATA_DIR} ${DATA_DIR}
COPY --chown=nood:nood --from=0 ${SCRIPTS_DIR} ${SCRIPTS_DIR}
RUN chmod +x  ${SCRIPTS_DIR}/startup.sh
ENTRYPOINT ["/app/scripts/startup.sh"]

scripts/env.sh

#!/bin/sh
go env -w GOPRIVATE=gitlab.domain.com/*
git config --global --add url."https://nood_deploy:rvbsosecret_Hizt97zQSn@gitlab.domain.com".insteadOf "https://gitlab.domain.com"

scripts/build.sh

#!/bin/sh
grep -v "replaces.*=>.*" go.mod > tmpfile && mv tmpfile go.mod
go mod tidy
set -e
BIN_DIR=${BIN_DIR:-/app/bin}
mkdir -p "$BIN_DIR"
files=`ls *.go`
echo "****************************************"
echo "******** building applications **********"
echo "****************************************"
for file in $files; do
echo building $file
go build -o "$BIN_DIR"/${file%.go} $file
done

感谢您仍在这里:3

这是从gitlab在嵌套位置安装go模块时已知的问题。该问题描述了几种解决方法/解决方案。一种解决方案描述如下:

  • 创建至少具有read_api和read_repository作用域的gitlab个人访问令牌
  • 创建.netrc文件:
machine gitlab.com  
login yourname@gitlab.com  
password yourpersonalaccesstoken  
  • 使用go get --insecure获取模块
  • 不要使用.gitconfig代替解决方法

对于GitLab的自托管实例,还有使用go代理的额外选项,这就是我解决这个问题的方法。

有关其他上下文,请参阅What';这是";go get"私人存储库?

最新更新