如何从多个代码库触发Jenkins流水线

5
我对Jenkins相对较新,正在处理一个从多个仓库拉取代码进行构建的大型项目。我编写了一个使用shell命令的声明性流水线,用于拉取所需的代码并构建项目,一切都正常运行。但是我希望将这个流水线与所有这些仓库连接起来,以便每次有新的提交或拉取请求时,都能触发一个Jenkins作业,并将构建结果返回以标记git提交。我知道如何为一个仓库实现这一点,但不知道如何为多个仓库实现。
2个回答

4
因为我们的网络基础设施问题,我无法使用Webhook来触发Jenkins。但是现在我使用的解决方案是为每个repo创建了一个runner,并编写了一个curl命令来触发Jenkins。因此,每当这些repo中有新的提交时,runner都会启动一个新的任务,执行curl命令并触发我的Jenkins任务。
以下是我使用的curl命令:
curl -i -X POST --user [JENKINS_USERNAME]:[JENKINS_PASSWORD] 'http://[JENKINS_IP]:[JENKINS_PORT]/job/[JENKINS_JOB_NAME]/build?token=[TOKEN_GENERATED_INSIDE_JENKINS]&cause=[ADDITIONAL_INFORMATION_THAT_YOU_WANT_TO_PRINT]'

请您添加这些关键细节:我们应该把那个curl命令放在哪里?如何安全地存储Jenkins凭据和Webhook令牌? - mirekphd
1
这些问题超出了本问题的范围,它们的答案在很大程度上取决于您的基础设施。我们使用GitLab,在GitLab中,您可以编写一个在特定条件下(推送、合并等)执行的Runner,我在那里编写了curl命令。同样,在Gitlab的groups/settings/CI/CD中,您可以定义仅对具有该组访问权限的存储库和人员可见的变量(包括Runner),我就将凭据存储在那里。 - AVarf

4
如果您有多个存储库需要触发Jenkins构建,则相应的存储库需要放置Jenkinsfiles。
关键是每个存储库都应调用一个JenkinsSharedLibrary,这使您能够在一个中央源中维护Jenkins构建,而不是每个存储库都有多个“硬编码”的Jenkinsfile。
本文描述了共享库的使用情况以及如何在多个git存储库中使用Jenkins: https://bjurr.se/managing-1000-repos-in-jenkins-with-a-breeze/

1
谢谢提供链接。目前我有其他工作正在处理,而我们只是手动运行流水线,但是我也发现了这个使用插件的东西(多个SCMs:https://www.javacodegeeks.com/2015/04/jenkins-how-to-build-a-project-from-multiple-git-repositories.html),它似乎非常有前途,并且设置也很简单。 - AVarf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接