我面临一个非常奇怪的问题。
首先,我的设置是: 我有一个私人的Gitlab服务器,该服务器在Kubernetes上使用Gitlab CI Runners构建Docker映像。为此,我使用了Kaniko图像。 跑步者由Gitlab本身使用内置的Kubernetes管理进行配置。一切都在PFSense服务器后面运行。
由于我的问题: 有时,Kaniko Pods无法解析GitLab服务器的主机名。 这会导致git pull失败,从而导致构建失败。 我认为失败的机会高达60%,这对我们来说太高了。 重试该构建几次后,它将成功运行。
在Gentlab 7上设置了运行Gitlab CI的Kubernetes集群。 SELinux和FirewallD被禁用。所有主机都可以解析GitLab服务器。它也与导致问题的特定主机服务器无关。我已经看到它在所有5台服务器(包括Manager服务器)上均失败。我也没有看到这个问题出现在其他豆荚。但是群集中的其他部署实际上并没有通过DNS进行连接。我确信Runner完全可以访问DNS,因为它是从gcr.io中提取Kaniko映像的。
有人见过这个问题或知道解决方法吗?
这是我的CI配置:
build:
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- echo $REGISTRY_AUTH > /kaniko/.docker/config.json
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $REGISTRY_URL/$REGISTRY_IMAGE:$CI_JOB_ID
only:
- master
发生以下错误:
Initialized empty Git repository in /builds/MYPROJECT/.git/
Fetching changes...
Created fresh repository.
fatal: unable to access 'https://gitlab-ci-token:[MASKED]@git.mydomain.com/MYPROJECT.git/': Could not resolve host: git.mydomain.com
答案 0 :(得分:2)
几天来我们遇到了同样的问题。我们尝试更改CoreDNS配置,将跑步者移动到不同的k8s集群,依此类推。终于在今天,我检查了我的个人跑步者,发现我使用的是其他版本。集群中的跑步者拥有gitlab/gitlab-runner:alpine-v12.3.0
,而我的拥有gitlab/gitlab-runner:alpine-v12.0.1
。我们添加了
image: gitlab/gitlab-runner:alpine-v12.1.0
在values.yaml
中,这为我们解决了问题
答案 1 :(得分:0)
有一个gitlab-runner环境可以解决此问题
- name: RUNNER_PRE_CLONE_SCRIPT
value: "exec command before git fetch ..."
例如:
编辑/etc/hosts
echo '127.0.0.1 git.demo.xxxx' >> /etc/hosts
或编辑/etc/resolv.conf
echo 'nameserver 8.8.8.8' > /etc/resolv.conf
希望它对您有用