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

在jenkinsfile中指定多个回购时触发特定的Jenkins作业

相高谊
2023-03-14

我为三个github存储库(app1、app2和app3)中的每一个创建了单独的Jenkins作业。然后是部署和测试存储库。

app1 repo(with webhook enabled) => app1 JenkinsJob
app2 repo(with webhook enabled) => app2 JenkinsJob
app3 repo(with webhook enabled) => app3 JenkinsJob
deployment repo(webhook NOT enabled)
test repo(webhook NOT enabled)

下面是app1的jenkinsfile。(对于app2,只有GIT\u REPO\u URL1不同

pipeline {
    environment {
        GIT_REPO_URL1 = 'https://github.com/app1.git'
        GIT_REPO_URL2 = 'https://github.com/deployment.git'
        GIT_REPO_URL3 = 'https://github.com/test.git'
        GIT_REPO_AUTH_CRED = 'abcdefg-123123-321123-qwead-asdqwe123'
    }   agent any
    stages {
        stage('GitClone1') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: 'refs/heads/master']], extensions: [[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: false, reference: '', trackingSubmodules: false]], userRemoteConfigs: [[credentialsId: "${GIT_REPO_AUTH_CRED}", url: "${GIT_REPO_URL1}"]]])
                echo '========++++++++ GitClone Completed ========++++++++'
            }
        }
        stage('GitClone2') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: 'refs/heads/master']], extensions: [[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: false, reference: '', trackingSubmodules: false]], userRemoteConfigs: [[credentialsId: "${GIT_REPO_AUTH_CRED}", url: "${GIT_REPO_URL2}"]]])
                echo '========++++++++ GitClone Completed ========++++++++'
            }
        }
        stage('GitClone3') {
            steps {
                checkout([$class: 'GitSCM', branches: [[name: 'refs/heads/master']], extensions: [[$class: 'SubmoduleOption', disableSubmodules: false, parentCredentials: true, recursiveSubmodules: false, reference: '', trackingSubmodules: false]], userRemoteConfigs: [[credentialsId: "${GIT_REPO_AUTH_CRED}", url: "${GIT_REPO_URL3}"]]])
                echo '========++++++++ GitClone Completed ========++++++++'
            }
        }
    } }

app1/app2/app3上的代码传递分别触发app1/app2/app3 jenkins作业。

现在的问题是,当我把代码更改推到https://github.com/deployment.git或https://github.com/test.git自动触发app1、app2和app3的存储库、Jenkins管道。

预期修复:应用程序jenkins作业应仅通过将代码传递到应用程序存储库来触发。

共有2个答案

郎飞航
2023-03-14

我在代码中添加了changelog:false和poll:false。

完整列表如下所示。有人可能会发现这是有益的。

checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: "${GIT_CRED}", url: "${GIT_REPO_URL2}"]]]
端木令雪
2023-03-14

签出步骤中的GitSCM类有一个专用的附加行为,用于禁用已配置存储库的触发器:

不要触发基于提交通知的构建

如果选中,则无论存储库是否匹配,在访问notifyCommit URL时都将忽略此存储库。

可以通过使用带有classIgnoreNotifyCommit的扩展在管道中配置此属性。
因此,要实现您想要的,只需将此配置添加到不应触发作业的每个存储库的签出选项中即可。
例如:

 checkout([$class: 'GitSCM', branches: [[...]], extensions: [[$class: 'IgnoreNotifyCommit'],[$class: 'SubmoduleOption',...]], userRemoteConfigs: [[...]]])
 类似资料:
  • 在具有两个git存储库的Jenkinsfile中,这是一个在单个Jenkins作业中使用多个git存储库的示例: 如何配置此作业以跟踪这两个存储库的SCM更改,以便每次至少有一个存储库更新时触发此作业? 更新1:以下是我真正使用但不起作用的管道脚本:

  • 问题内容: 我在线阅读了詹金斯自1.448版本以来发布的内容,使您可以为每个执行者指定一个Maven存储库。但是如何做到这一点呢? 问题答案: 一张图片胜过千言万语

  • 使用Jenkins进行多平台多分支构建。 我有多个多分支管道项目(每个平台一个,因为每个平台需要显着不同的构建步骤)。我有一个具有多个分支的代码存储库(这就是为什么多分支管道项目有意义)。 我希望每个多分支管道项目引用不同的Jenkinsfile,而不是所有人都试图使用文件名为“Jenkinsfile”的文件,该文件位于存储库的根目录中。 这个已解决的错误表明我应该能够做到这一点,但我找不到任何概

  • 我的Jenkinsfile由几个阶段构建而成,可以由调度程序或通过推送到Gitlab来触发。我想使用触发器源来跳过触发器的几个阶段。我如何识别哪个事件触发了作业?

  • 我试图用gradle设置工件(APK/AAR文件)构建过程,类似于我使用Maven时所使用的方法。 build.gradle文件: gradle.properties文件:

  • 问题内容: 看来现在,使用Multibranch类型时,您只能在项目中的单个位置拥有一个Jenkinsfile。 有没有一种配置方法,所以我可以将Jenkinsfile放置在项目根目录下的其他位置,而不是Jenkinsfile。希望,因为有固定配置选项,也许这是将来的功能,但我非常感谢该选项,因为在当前情况下,由于没有这样的选项,我无法选择将所有内容作为一个经过良好编译的管道运行回购的大小。我正在