当前位置: 首页 > 知识库问答 >
问题:

如何制作由拉取请求触发的Jenkins管道以构建Github项目中的所有存储库

高才
2023-03-14

我想建立一个管道,由GitHub项目的pull请求自动触发,然后在其中构建所有存储库。我找到了这篇文章并遵循了说明,因为它与我所需要的内容类似,但我目前正陷于让管道在同一GitHub项目中触发并构建多个存储库,每次对其中一个存储库进行PR时。

我附上这张图表是为了使我的问题更加清楚。

因此,目标是当在存储库1的分支3上发出请求时,将触发管道,该管道按指定顺序构建该分支和所有其他存储库,即工作项目的存储库2、存储库3等。

非常感谢您的帮助,我认为解决这一问题的方法将对CI DevOps社区非常有益。谢谢

共有1个答案

葛玉堂
2023-03-14

试试下面的方法——不能保证下面的方法是准确的,但应该会让你朝着正确的方向前进。

您要做的第一件事是在每个存储库中都有一个一致的Jenkinsfile,现在您可以通过多种不同的方式来实现,但实现这一点的一种方法是使用外部groovy管道,以便逻辑可以在整个repo中保持一致。这里有一个例子。。跨每个存储库复制Jenkinsfile也会起作用,但是单一真相来源通常是更好的方法。

node{
    deleteDir()

    git env.flowScm
    def flow = load 'pipeline.groovy'
    stash includes: '**', name: 'flowFiles'

    stage 'Checkout'
    checkout scm // short hand for checking out the "from scm repository"

    flow.runFlow()
}

管道在哪里。groovy文件将包含如下实际管道:

def runFlow() {
    // your pipeline code

} 

// Has to exit with 'return this;' in order to be used as library
return this;

使用相同的管道逻辑获得每个触发器后,可以利用dir命令克隆并使用不是触发生成的存储库。这里有一个例子。

node('ATLAS && Linux') {
    dir('CalibrationResults') {
        git url: 'https://github.com/AtlasBID/CalibrationResults.git'
    }
    dir('Combination') {
        git url: 'https://github.com/AtlasBID/Combination.git'
    }
    dir('CombinationBuilder') {
        git url: 'https://github.com/AtlasBID/CombinationBuilder.git'
    }

    sh('ls')
    sh('. CombinationBuilder/build.sh')
}

将这两个步骤放在一起应该可以实现您在本例中所追求的目标。

 类似资料:
  • 我有一个不包含Jenkinsfile的存储库——我没有办法影响存储库本身。这意味着我既不能在存储库中添加也不能更改任何文件(在本例中,它是Qt-repo)。 我想做的是创建多个jenkinsfile,每个文件都为不同的目标配置和构建Qt库,或者运行不同的附加脚本<所有这些Jenkins文件将收集在不同的存储库中。 现在,我的问题是如何创建一个管道作业,一旦Qt存储库中发生更改,就会触发该作业,但使

  • 问题内容: 看起来GitHubPullRequestBuilder与Jenkins v2.0管道作业不兼容。 如何配置要从GitHub拉取请求事件触发的管道作业? 关于此主题的文档很少,我找不到任何示例。还是在GitHub中创建一个网络挂钩来触发PR事件上的管道作业更好? 问题答案: 将管道与GitHub拉取请求结合使用的最直接方法是将脚本以该名称命名到存储库中,然后安装 GitHub Branc

  • 我有一个Jenkins管道作业(不是多分支管道),管道内的逻辑之一是,当gitlab scm上有一个合并请求时,我想基于触发此生成的合并请求的源分支构建一些东西。 我的问题是,在Jenkinsfile中,我如何动态地获取这个源分支,签出代码,并创建一个工作区,以便在这个分支上运行构建?

  • 问题内容: 我的Jenkins Continuous Integration Server在Ubuntu主机上运行,​​其配置如下: 詹金斯v 1.463 github-api 1.23 Jenkins GIT插件1.1.18 GitHub插件1.2 轮询SCM工作。 要说这一点很重要,因为我希望您知道我的其他与jenkins相关的配置工作正常,除了此发布构建触发废话之外。 我想配置Jenkins

  • 问题内容: 标题大多是这样说的。如何从远程git存储库触发Jenkins多分支管道项目构建? “ Trigger远程构建”构建触发器选项似乎不起作用,因为没有保存您设置的令牌。 问题答案: 目前(Jenkins 2.22),“触发触发器远程构建”构建触发选项在多分支管道作业配置中可见,但不起作用(如果您检查并指定了令牌,则无论如何保存后都会重置)。根据这个,这是故意的触发器不能确定,但一个错误,它

  • 我希望在我的Jenkinsfile中添加一个条件阶段,该阶段根据构建的触发方式运行。目前,我们设置为构建由以下方式触发: 对 git 存储库的更改,这些更改是在分支索引中选取的 用户使用 UI 中的“立即生成”按钮手动触发生成。 是否有任何方法可以根据这些操作中的哪些操作触发了构建来运行不同的管道步骤?