我想使用两个Git存储库构建一个项目。其中一个包含源代码,而另一个包含构建和部署脚本。
我正在使用Jenkins管道来构建我的项目。管道脚本位于 Jenkins-pipeline 存储库中,源代码位于 Middleware 存储库中。由于我的管道脚本位于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中克隆的存储库是不同的,而我保留jenkinsfile的存储库是不同的。
现在这里的问题是:
在Jenkins文件中,只要存储库中有新的提交,我就使用 pollScm触发我的Jenkins作业,但是我已经为该作业配置了两个存储库,因此
因此,只要这些存储库中的任何一个提交,我的Jenkins工作都会被触发,这是我不希望的! 我只想在源代码存储库中有新提交时才触发我的Jenkins构建,而在Jenkins-管道存储库中有提交时不应该触发构建。我该怎么做?
我在Jenkinsfile中使用共享库,这些库也位于另一个存储库中。当我在共享库存储库中提交某些内容时,也会触发Jenkins作业,并且我在多个作业中使用共享库,因此,所有的作业都被触发了,我不想这样做。
P.S。由于我的Jenkins在私有网络中,因此我无法使用Webhook来触发我的Jenkins构建!
答案 0 :(得分:0)
答案很简单。 Jenkinsfile始终属于源代码存储库的根目录。您必须将Jenkins文件检入到中间件存储库中。
管道支持两种语法,即声明性(在管道2.5中引入)和脚本化管道。两者都支持建立连续的交付管道。两者都可以用于在Web UI或Jenkinsfile中定义管道,尽管通常认为创建Jenkinsfile并将文件检入源代码控制存储库是最佳做法
更新-跳过共享库触发器
自2.9版的管道共享Groovy库插件开始,存在禁用更改日志的选项:
@Library(value="mylib", changelog=false)
答案 1 :(得分:0)
要使库不包含在更改检查中,请取消选中相关库的“系统配置”页面中的“在作业最新更改中包括@库更改”复选框,或设置新的可能参数'changelog =管道'@Library'指令中的“ false”。
要使管道本身不包含在“ pull scm”中,就比较棘手。 一种选择是将Jenkinsfile包含在代码存储库中,但是如果Jenkinsfile本身将被更改,则也会触发构建,因此并不需要它。
另一种选择是,在管道的开始部分中检查触发该作业的更改是在源存储库中还是在管道存储库中,并且如果不在源存储库中,则停止构建