一尘不染

gitea和jenkins webhook

jenkins

我正在测试Gitea,并希望它触发Jenkins构建,相当基本的用例。我了解现有的GOGs
webhook插件可以使用,但是最近还发现Jenkins也有一个Gitea插件。

在GOGS情况下,您可以通过以下方式致电Jenkins: http:// localhost:8080 / gogs-webhook /?job =
job_name

在上面的示例中,显然根据需要更新了詹金斯的位置和工作名称。

问题是没有有关Gitea插件的文档,但是根据源代码,URL应该是:

http:// jenkins-url / gitea-webhook / post

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

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

问题是gitea插件如何知道要执行的作业?您如何指定呢?现在,我可以看到gitea正在通过上述URL将POST发送到Jenkins,但没有任何反应,Jenkins日志也没有任何信息来了解其失败原因。

编辑:

我在这里遇到一个问题,在将生成的公共SSH密钥复制到Gitea用户帐户后,Jenkins仍然无法访问回购以便使用Pipeline
Editor。不知道我在这里缺少什么,因为我能够从本地主机(在Docker环境之外)完美地推入/拉出,并检查了容器是否也可以完美地看到彼此…。

谢谢


阅读 1329

收藏
2020-07-25

共1个答案

一尘不染

我已经成功使用相对较新的版本成功配置了Jenkins /Gitea组合(我都使用基于高山的官方Docker容器)。我以这个Gitea问题为指导。我没有在Jenkins中使用Gogs插件,仅在Gitea插件中使用了。我也不使用管道,仅使用经典的手动配置作业。

在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,然后清除秘密(将其保留为空白)。

此时,单击“测试交付”按钮应产生成功的交付尝试(绿色复选标记)。

如果您的测试交付失败,请尝试查看是否可以发布到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请求正文包含到仓库/分支的链接,并且Jenkins在内部查找此内容以查找引用此仓库的工作(您在上方的“作业设置”页面)。这个JenkinsWiki页面介绍了更多有关通用钩子的信息,此外,此答案还有其他链接,可能会更详细地解释幕后情况。

稍微 调试
一下,您可以从gitea存储库(或组织)设置中使用“最近的交付”(可单击整个发布请求以及响应!)[,如此答案所示](我在Jenkins上使用Gitea插件1.0.4,并且我对webhooks没问题。我没有安装Gog插件。

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

詹金斯方面,我已经为Gitea配置了凭据。当Jenkins找到带有Jenkinsfile的项目(我使用管道)时,它将自动为存储库(Gitea端)配置webhook(如果不存在)。

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

Jenkins必须有权访问GIT存储库,因此您需要为其创建Git凭据。)。请记住,该gitea具有/etc/gitea/app.ini文件,其中指定了ssh域,gitea服务器域和http
url,并且您在jenkins中指定了gitea srvers。这些网址必须匹配才能正常工作!

2020-07-25