0

我正在尝试设置 Gitea 和 Jenkins 在单独的 Docker 容器中运行并设置一个简单的管道。

我遇到的问题是将 Jenkins 连接到 Gitea。在我的设置中,Gitea 在容器的 22 端口上侦听 SSH,我将其映射到本地主机上的 3001 端口(目前用于测试目的)。

在创建新的管道接口中,我被要求将 SSH url 提供给 Gitea 存储库。我确实提供了这个:

git@localhost:3001/repo/project.git

但似乎 Jenkins 无法连接说我需要一个有效的 URL。我已经将 Jenkins 生成的密钥添加到我的 Git 用户配置文件中。

然后我尝试从我的本地主机进行 git clone,所以我生成了一对密钥,将公钥添加到同一个 Git 配置文件中,然后执行命令

git clone ssh://git@localhost:3001/repo/project.git

然而结果是:

Cloning into 'project'...
ssh_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

所以我不确定我错过了什么。我确实将本地机器生成的密钥添加到了 GitHub,并且能够从那里很好地克隆,所以我很确定这与 Docker 环境中的 Gitea 有关。

我已经验证了 Jenkins 容器可以看到 Gitea 容器并且它们加入了同一个网络。

我在这里缺少什么,以便我可以从在 Docker 中运行的 Gitea 进行 git clone ?我相信这也是解决詹金斯问题的关键。

谢谢

4

1 回答 1

1

看起来你给 Jenkins 的 URL (git@localhost:3001/repo/project.git) 暗示了Jenkins 的localhost,即它运行的容器,而不是docker 主机localhost,即端口 3001 被转发到 Gitea 的服务器集装箱港口 22.

首先尝试使用基于 HTTP 的 git repo URL,例如 http://:3000/username/mypetproject,前提是您还将 Gitea 的 UI 端口 3000 转发到 docker 主机上的同一端口。

我有一个类似的设置工作:Gitea 和 Jenkins 都在同一个网络上的自己的容器中运行,整个事情都由 docker-compose 管理。Gitea 容器将端口 3000 导出为主机端口 3000,将端口 22 导出为 22022。此外,Gitea 托管在子路径中/gitea/:我在 compose 文件中有很多其他内容,并且希望避免显式指定端口,所以我添加了一个 nginx 实例作为反向代理,将/jenkins/*请求路由到 Jenkins 的容器,并将/gitea/*请求路由到 Gitea 的。

在 Jenkins 作业设置中,我将http://<hostname>/gitea/username/repo.git其用作 repo URL。<hostname>显然是 docker host的名称。

最后一件事:尝试docker exec进入正在运行的 Gitea 容器并使用端口 22 在本地克隆 repo(基本上与您从 localhost 尝试的相同)。如果此操作成功,您可以合理地确定 Gitea 没有故障,您应该检查您的网络/端口转发设置。

于 2018-05-09T12:11:58.810 回答