我想使用两个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在私有网络中!
3条答案
按热度按时间7vhp5slm1#
对于不包含在更改检查中的库,请在相关库的“系统配置”页面中取消选中“在作业最近更改中包含@Library更改”复选框,或在Pipeline“@Library”指令中设置新的可能参数“changelog=false”。
对于管道本身不包含在“pull scm”中,这有点棘手。一种选择是将Jenkinsfile包含在代码库中,但如果Jenkinsfile本身将被更改,则也会触发构建,并且实际上并不需要。
另一种选择是在Pipeline的开始检查触发作业的更改是在源代码库中还是在Pipeline库中,如果不在源代码库中,则停止构建。
ryevplcw2#
答案很简单,Jenkinsfile总是属于源代码仓库的根目录,你必须将Jenkins文件签入到中间件仓库中。
Pipeline支持两种语法,Declarative(在Pipeline 2.5中引入)和Scripted Pipeline。这两种语法都支持构建持续交付管道。这两种语法都可用于在Web UI中或使用Jenkins文件定义Pipeline,但通常认为最佳做法是创建Jenkins文件并将文件签入源代码控制存储库
更新-跳过共享库触发器
这种禁用更改日志的选项自Pipeline Shared Groovy Libraries Plugin 2.9版本以来就存在:
字符串
ee7vknir3#
有类似的问题(不是库部分),但在我的情况下,所有3个repos都在Jenkinsfile中声明,我想只轮询1个。也许如果像下面的片段那样将管道repos添加到SCM列表中,它也可以被排除在轮询之外?这里对我有用,请注意'poll'和'changelog'指令:
字符串
在一次构建之后,jenkins应用poll指令,只开始轮询middleware.git仓库。