我正在测试Gitea,并希望它能触发Jenkins构建,非常基本的用例。我知道现有的GOG可以使用webhook插件,但最近也发现Jenkins也有一个Gitea插件。
在GOGS案例中,您可以通过以下方式致电Jenkins: http://localhost:8080/gogs-webhook/?job=job_name
在上面的示例中,显然需要根据需要更新Jenkins位置和作业名称。
问题是没有Gitea插件的文档,但根据源代码,URL应为:
http://jenkins-url/gitea-webhook/post
我认为应该发生的顺序如下:
问题是gitea插件如何知道要执行什么工作?你怎么指定这个?现在我可以看到gitea正在上面的URL向Jenkins发送POST,但没有发生任何事情,Jenkins日志也没有任何信息可以理解它失败的原因。
编辑:
我遇到了一个问题,在将生成的公共SSH密钥复制到Gitea用户帐户后,Jenkins仍然无法访问repo以使用Pipeline Editor。不知道我在这里失踪了什么,因为我能够从localhost(在Docker环境之外)完美地推/拉,并且已经检查过容器确实可以完美地看到对方....
由于
答案 0 :(得分:8)
我已经设法使用相对较新的版本成功配置了Jenkins / Gitea组合(我使用官方的基于alpine的docker容器)。我使用this Gitea issue作为指南。我没有在Jenkins中使用Gogs插件,只使用了Gitea插件。我也不使用Pipeline,只使用经典的手动配置作业。
在Jenkins中:在作业设置页面上将“源代码管理”选项设置为“Git”,为您的仓库提供URL(http://gitea-url.your.org/username/repo.git),在“轮询触发器”部分中选中“轮询SCM”选项没有安排时间表。此设置基本上告诉Jenkins仅在通过webhook请求时轮询您的Gitea仓库。
在Gitea:回购 - >设置 - > Webhooks,添加新的webhook,将URL设置为http://jenkins_url.your.org/gitea-webhook/post,并清除秘密(留空)。
此时点击“测试交付”按钮应该会成功发送传递尝试(绿色复选标记)。
如果测试交付失败,请尝试查看是否可以POST到Jenkins webhook URL(http://jenkins_url.your.org/gitea-webhook/post)。例如。使用Postman或使用curl:
curl -vvv -H "Content-Type: application/json" -H "X-Gitea-Event: push" -X POST http://jenkins.server.example.sk:8080/gitea-webhook/post -d "{}"
正确的响应应该只是简单的“已处理”字符串。如果你得到别的东西,请在这里发布。
关于 Jenkins如何知道要构建什么工作的问题,我的理解是POST request body contains指向repo / branch的链接,而Jenkins在内部查找此内容以查找引用此repo的作业(您在上面的作业设置页面中定义的内容)。 This Jenkins wiki page更多地讲述了通用挂钩,还有this answer还有更多的链接可以解释一下发生了什么。
稍微调试一下,您可以使用gitea存储库(或组织)设置中的“最近交付”(可点击整个帖子请求以及响应!)shown in this answer。请记住,gitea有/etc/gitea/app.ini文件,其中指定了ssh域,gitea服务器域和http url,你在jenkins中指定了gitea srvers。这些网址必须匹配才能正常工作!
答案 1 :(得分:1)
当我最初在Jenkins中安装 Gitea插件并尝试在Gitea中配置webhook来触发Jenkins Pipeline项目(全部在本地完成)时,就像上面提到的@PhilW(假设你是在http://localhost:8080
处运行Jenkins,从Gitea触发http://localhost:8080/gitea-webhook/?job=job_name
对我来说也不起作用。
话虽如此,我然后在Jenkins中安装了 Gogs插件,在Gitea中重新配置了我的webhook http://localhost:8080/gogs-webhook/?job=job_name
(注意区别)并且Jenkins构建了我的Pipeline项目。
另外值得一提的是,作为一个简单的肮脏技巧,我发现如果您使用适当的webhook附件指定Jenkins服务器的基本URL(在您的Web浏览器中) - 例如。
http://localhost:8080/gogs-webhook/
(在Jenkins中安装 Gogs插件并启用)或http://localhost:8080/bitbucket-hook/
(安装并启用了 Bitbucket插件),你得到的只是一个空白页面,这似乎表明Jenkins中的相关webhook很可能按预期运行。
指定http://localhost:8080/gitea-webhook/
(安装并启用 Gitea插件)会返回HTTP错误404,因此我怀疑(只是预感)此插件可能有一两个错误。
答案 2 :(得分:1)
我在Jenkins上使用Gitea Plugin 1.0.4,我对webhooks没有任何问题。 我没有安装Gog插件。
从Gitea UI(存储库 - >设置 - > webhooks)我可以手动定义指示网址的webhook:https://my-jenkins/gitea-webhook/post
这可以手动测试,运行"测试交付",如下图所示:
Jenkins方面我为Gitea配置了凭据。 当Jenkins找到一个带Jenkins文件的项目(我使用管道)时,它会自动配置存储库(Gitea方面)的webhook(如果不存在)。
Gitea将通过一个包含大量JSON格式信息的POST通知Jenkins。
Jenkins必须能够访问GIT存储库,因此您需要为他创建Git凭证。
答案 3 :(得分:0)
您可以使用Generic Webhook Trigger Plugin。
使用令牌功能,并为每个作业使用不同的令牌。
答案 4 :(得分:0)
在尝试了许多不同的指南来让 webhooks 与 Gitea 插件一起工作后,我发现如果 json 请求中的 Gitea 主机名与 Jenkins 知道的主机名不匹配,它不会触发。
我在连接到同一个桥接网络的单独 Docker 容器中同时运行 Jenkins 和 Gitea,并希望让它们使用内部主机名进行通信。如果有人有类似的设置,尝试在 Jenkins/Gitea 中输入公共网址。 (Jenkins 中还有一个选项,您可以在其中输入 Gitea 网址的别名,但这对我不起作用。)
这不完全是我想要的,但它可以正常工作。
答案 5 :(得分:0)
我在 Jenkins 配置中的 Gitea URL 是
http://192.168.1.105:3000
而 Jenkins 只是忽略了所有的 webhook 触发器。
在 Jenkins/configure/gitea/advanced 中为 Gitea 添加“别名 URL”后,它起作用了:
http://localhost:3000
fugi's answer 为我指明了正确的方向。我在同一台机器上的不同 docker 容器中对 Jenkins 和 Gitea 进行了类似的设置。