我想使用两个Git存储库构建一个项目。其中一个包含源代码,而另一个包含构建和部署脚本。
我正在使用詹金斯管道来构建我的项目。管道脚本在Jenkins管道存储库中,源代码在中间件储存库中。由于我的管道脚本在Jenkins管道存储库中,我正在使用Jenkins管道库中的Jenkinsfile配置我的管道。
这是我正在使用的Jenkins文件:
pipeline {
agent any
parameters {
string(name: 'repo_branch', defaultValue: 'development', description: 'The branch to be checked out')
string(name: 'git_repo', defaultValue: 'ssh://git@my-server.com/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中克隆的存储库是不同的,我保存Jenkinsfle的存储库也是不同的。
现在这里的问题是:
在Jenkins文件中,每当存储库中有新的提交时,我都会使用pollScm来触发我的Jenkins作业,但我有两个为该作业配置的存储库,因此
- 源代码库(middleware.git(
- 管道脚本库(Jenkins Pipeline.git(
所以每当在这两个存储库中有提交时,我的Jenkins作业就会被触发,这是我不想要的我只想在我的源代码存储库中有新提交时触发我的Jenkins构建,而不应该在Jenkins管道存储库中存在提交时触发构建我该怎么做?
更新
我在Jenkinsfile中使用共享库,这些库也在另一个存储库中。当我在共享库存储库中提交一些东西时,Jenkins作业也会被触发,我在多个作业中使用共享库,因此所有的作业都会被触发——这是我不希望的。
附言:我不能使用webhook来触发我的Jenkins构建,因为我的Jen金斯在私人网络中!
对于不包含在更改检查中的库,请取消选中相关库的"系统配置"页面中的"在作业最近的更改中包含@library更改"复选框,或在管道"@library"指令中设置新的可能参数"changelog=false"。
对于管道本身来说,不包括在"拉动供应链管理"中有点棘手。一种选择是将Jenkinsfile包含在代码存储库中,但如果Jenkinsfle本身发生更改,则也会触发构建,而这并不是真正需要的。
另一个选项是在管道的开始时检查触发作业的更改是在源存储库中还是在管道存储库中,如果不在源存储库中,则停止生成。
答案很简单。Jenkinsfile始终属于源代码存储库的根目录。您必须将Jenkinsfile签入中间件存储库。
Pipeline支持两种语法,Declarative(在Pipeline 2.5中引入(和Scripted Pipeline。两者都支持构建连续输送管道。两者都可以用于在web UI或Jenkinsfile中定义管道,尽管通常认为创建Jenkinsfle并将文件检入源代码管理存储库是最佳实践
更新-跳过共享库触发器
这样的禁用变更日志的选项自管道共享Groovy库插件的2.9版本以来就存在:
@Library(value="mylib", changelog=false)