7

我有一个不包含Jenkinsfile的存储库- 我无法影响存储库本身。这意味着我不能在存储库中添加或更改任何文件(在这种情况下,它是Qt repo)。

我想要做的是创建多个 Jenkinsfile,每个都为不同的目标配置和构建 Qt 库,或者运行不同的附加脚本。
所有这些 Jenkinsfile 将被收集在不同的存储库中。

现在,我的问题是如何创建一个管道作业,一旦 Qt 存储库中有更改,它就会被触发,但使用来自另一个存储库的 Jenkinsfile。

研究给我留下了 - 据我所见并根据这些 帖子 -有两个选择:

  • 将两个存储库添加到定义部分 - 类似于以下内容:
    在此处输入图像描述 不幸的是,这对我不起作用,因为两个存储库仍然需要一个 Jenkinsfile。此外,我无法为每个存储库指定不同的分支,因此我无法监听特定的 Qt 版本分支。

  • 我看到的第二个(嗯,可能是唯一的)选项是创建一个自由式 Jenkins 作业,它只监听 Qt 存储库并在更改时触发管道作业的构建作为其唯一操作。

我认为,第二种方法对我有用,但我想知道的是,是否有任何插件、配置选项或我错过的任何东西可以以更清洁的方式解决这个问题,或者上述是否是解决问题的方法做。

4

3 回答 3

5

为什么不创建一个使用常规“轮询 SCM”方法监控 QT 存储库的 Jenkins Freestyle 作业?

然后让 Freestyle 工作启动一个或多个 Jenkins 管道工作。

您将让管道作业指向管道“jenkinsFile”groovy 脚本所在的 SCM(您控制的存储库)。

在管道代码中,您可以使用管道 SCM DSL 步骤从 Qt 存储库(不受您控制的存储库)中提取代码,然后执行所有构建、测试或其他操作。

您可以将 Qt 存储库的 URL 和修订作为轮询作业的参数传递到管道中。

于 2016-12-13T16:07:23.487 回答
2

您是否考虑过从您的 Git 服务器触发 Jenkins 作业的 webhook?通过这种方式,您可以让任意 repos 触发您的构建并减少由 Jenkins 定期轮询引起的 Git 服务器上的流量。

其背后的原理是 Jenkins为您的构建作业(例如http://your-jenkins.domain/job/JOBNAME/build?token=TOKEN)提供一个 URL,以启动您的作业。另一方面,Git 可以注册一个所谓的钩子,每当推送到存储库时就会触发该钩子。每次有人推送到您的存储库时,向您的 Git 挂钩添加 HTTP 请求都会触发 Jenkins 作业。

这篇SO Post解释了如何在任何 Git 服务器上设置这样的钩子。还有GitlabGithub的教程。

于 2017-01-03T12:33:30.980 回答
-3

您可以配置构建触发器,以检查存储库中是否有更改:构建触发器 -> 轮询 SCM。在那里你可以配置一个时间表:

例如* * * * *,每分钟检查一次或H * * * *每小时检查一次。

于 2016-12-13T08:20:54.417 回答