我试图让Gitea和Jenkins在单独的Docker容器中运行并设置一个简单的管道。
我遇到的问题是将Jenkins连接到Gitea。在我的设置中,Gitea正在容器中的端口22上侦听SSH,并将其映射到我的localhost上的端口3001(现在用于测试目的)。
在创建新的管道界面中,我要求向Gitea回购提供SSH网址。我确实提供了这个:
git@localhost:3001/repo/project.git
但似乎Jenkins无法连接说我需要一个有效的URL。我已经将Jenkins生成的密钥添加到我的Git用户配置文件中。
然后我尝试从我的localhost做一个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中克隆克隆?我相信这也是解决詹金斯问题的关键。
由于
答案 0 :(得分:1)
看起来你给Jenkins的网址(git @ localhost:3001 / repo / project.git)暗示 Jenkins' localhost,即它运行的容器,但不是 docker host 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 exec
进入正在运行的Gitea容器并使用端口22在本地克隆repo(基本上与您尝试从localhost完成的事情)。如果这项工作成功,你可以合理地确定Gitea没有错,你应该研究你的网络/端口转发设置。