gitea和jenkins webhook

问题描述 投票:2回答:4

我正在测试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

我认为应该发生的顺序如下:

  1. Gitea看到推送活动并将信息发布到Jenkins webhook
  2. Jenkins Gitea webhook看到POST并使用该信息从Gitea获取新的源代码。

问题是gitea插件如何知道要执行哪个工作?你怎么指定这个?现在我可以看到gitea正在上面的URL向Jenkins发送POST,但没有发生任何事情,Jenkins日志也没有任何信息可以理解它失败的原因。

编辑:

我遇到了一个问题,在将生成的公共SSH密钥复制到Gitea用户帐户后,Jenkins仍然无法访问存储库以使用管道编辑器。不知道我在这里缺少什么,因为我能够从localhost(在Docker环境之外)完美地推/拉并检查容器确实可以完美地看到对方....

谢谢

jenkins jenkins-plugins jenkins-blueocean gitea
4个回答
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中:在repo - > Settings - > 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
投票

当我最初在Jenkins中安装Gitea插件并尝试在Gitea中配置webhook以触发Jenkins Pipeline项目(全部在本地完成)时,然后正如上面提到的@PhilW(假设你在http://localhost:8080上运行Jenkins),从Gitea触发http://localhost:8080/gitea-webhook/?job=job_name也不适合我。

话虽如此,我然后在Jenkins中安装了Gogs插件,在Gitea http://localhost:8080/gogs-webhook/?job=job_name中重新配置了我的webhook(注意区别),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,所以我怀疑(只是预感)这个插件可能有一两个bug。


1
投票

我在Jenkins上使用Gitea Plugin 1.0.4,我对webhooks没有任何问题。我没有安装Gog插件。

从Gitea UI(存储库 - >设置 - > webhooks)我可以手动定义我的webhook指示URL:https://my-jenkins/gitea-webhook/post

这可以手动测试,运行“测试交付”,如下图所示:

enter image description here

Jenkins方面我为Gitea配置了凭据。当Jenkins找到一个带有Jenkins文件的项目(我使用管道)时,它会自动为存储库(Gitea方面)配置webhook(如果不存在)。

Gitea将通过一个包含大量JSON格式信息的POST通知Jenkins。

Jenkins必须能够访问GIT存储库,因此您需要为他创建Git凭据。


0
投票

你可以使用Generic Webhook Trigger Plugin

使用令牌功能并为每个作业使用不同的令牌。

© www.soinside.com 2019 - 2024. All rights reserved.