git 针对特定存储库的Jenkins PollScm

kwvwclae  于 5个月前  发布在  Git
关注(0)|答案(3)|浏览(66)

我想使用两个Git仓库构建一个项目。其中一个包含源代码,而另一个包含构建和部署脚本。
我正在使用Jenkins pipeline构建我的项目。pipeline脚本在Jenkins-pipeline存储库中,源代码在middleware存储库中。由于我的pipeline脚本在Jenkins-pipeline存储库中,因此我正在使用Jenkins-pipeline存储库中的Jenkinsfile配置我的pipeline。
下面是我使用的Jenkins文件:

pipeline {
agent any
parameters {
    string(name: 'repo_branch', defaultValue: 'development', description: 'The branch to be checked out')
    string(name: 'git_repo',  defaultValue: 'ssh://[email protected]/middleware.git' description: 'Git repository from where we are going to checkout the code')

}
options {

    buildDiscarder(logRotator(numToKeepStr: '5'))
    disableConcurrentBuilds()
    timeout(time: 10, unit: 'MINUTES')
}
triggers {
    pollSCM('* * * * *')
}
stages {
    stage('Checkout git repo') {
        steps {
            git branch: "${params.repo_branch}", url: "${params.git_repo}", credentialsId: 'git-credentials'
        }
    }
    stage('Build binary') {
        steps {
            sh "./gradlew clean build -x test"
        }
    }
}
}

字符串
现在,正如我们所看到的,我在Jenkinsfile中克隆的存储库是不同的,我保存jenkinsfile的存储库也是不同的。

现在的问题是:

在Jenkins文件中,我使用pollScm来触发我的Jenkins作业,只要仓库中有新的提交,但我有两个仓库,我已经为作业配置了,所以
1.源代码仓库(middleware.git)
1.管道脚本库(Jenkins-pipeline.git)
因此,无论何时,只要在这两个仓库中有一个提交,我的Jenkins作业就会被触发,这是我不希望的!**我只想在我的源代码仓库中有新提交时触发My Jenkins构建,而不应该在Jenkins管道仓库中有提交时触发构建。

更新

我在Jenkinsfile中使用共享库,这些库也在另一个仓库中。当我在共享库仓库中提交一些东西时,Jenkins作业也会被触发,我在多个作业中使用共享库,因此所有作业都会被触发,这是我不希望的。
P.S.我不能使用webhooks来触发我的Jenkins构建,因为我的Jenkins在私有网络中!

7vhp5slm

7vhp5slm1#

对于不包含在更改检查中的库,请在相关库的“系统配置”页面中取消选中“在作业最近更改中包含@Library更改”复选框,或在Pipeline“@Library”指令中设置新的可能参数“changelog=false”。
对于管道本身不包含在“pull scm”中,这有点棘手。一种选择是将Jenkinsfile包含在代码库中,但如果Jenkinsfile本身将被更改,则也会触发构建,并且实际上并不需要。
另一种选择是在Pipeline的开始检查触发作业的更改是在源代码库中还是在Pipeline库中,如果不在源代码库中,则停止构建。

ryevplcw

ryevplcw2#

答案很简单,Jenkinsfile总是属于源代码仓库的根目录,你必须将Jenkins文件签入到中间件仓库中。
Pipeline支持两种语法,Declarative(在Pipeline 2.5中引入)和Scripted Pipeline。这两种语法都支持构建持续交付管道。这两种语法都可用于在Web UI中或使用Jenkins文件定义Pipeline,但通常认为最佳做法是创建Jenkins文件并将文件签入源代码控制存储库

更新-跳过共享库触发器

这种禁用更改日志的选项自Pipeline Shared Groovy Libraries Plugin 2.9版本以来就存在:

@Library(value="mylib", changelog=false)

字符串

ee7vknir

ee7vknir3#

有类似的问题(不是库部分),但在我的情况下,所有3个repos都在Jenkinsfile中声明,我想只轮询1个。也许如果像下面的片段那样将管道repos添加到SCM列表中,它也可以被排除在轮询之外?这里对我有用,请注意'poll'和'changelog'指令:

stage('Checkout') {
            steps {
                checkout changelog: true, poll: true, scm: scmGit(
                    userRemoteConfigs: [[url: 'ssh://[email protected]/middleware.git']]
                )
                checkout changelog: false, poll: false, scm: scmGit(
                    userRemoteConfigs: [[url: 'ssh://[email protected]/pipelines.git']]
                )
            }
        }

字符串
在一次构建之后,jenkins应用poll指令,只开始轮询middleware.git仓库。

相关问题