用于特定存储库的 Jenkins PollScm
Jenkins PollScm for specific repository
我想使用两个 Git 存储库构建一个项目。其中一个包含源代码,而另一个包含构建和部署脚本。
我正在使用 Jenkins 管道构建我的项目。管道脚本在 Jenkins-pipeline 存储库中,源代码在 middleware 存储库中。由于我的管道脚本在 Jenkins-pipeline 存储库中,我正在使用 Jenkins-pipeline 存储库中的 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 作业,但我有两个存储库已为该作业配置,所以
- 源代码库(middleware.git)
- 管道脚本存储库 (Jenkins-pipeline.git)
因此,只要在这些存储库中的任何一个中有提交,我的 Jenkins 作业就会被触发,这是我不想要的! 我只想在我的源代码存储库中有新提交时触发我的 Jenkins 构建,而不应在 Jenkins 管道存储库中有提交时触发构建。 我该怎么做?
更新
我在 Jenkinsfile 中使用共享库,这些库也在另一个存储库中。当我在共享库存储库中提交某些内容时,也会触发 Jenkins 作业,并且我在多个作业中使用共享库,因此所有作业都会被触发,这是我不想要的。
P.S。我无法使用 webhooks 触发我的 Jenkins 构建,因为我的 Jenkins 在私有网络中!
答案很简单。 A Jenkinsfile 始终属于源代码存储库的根目录。您必须将 Jenkinsfile 签入中间件存储库。
Pipeline supports two syntaxes, Declarative (introduced in Pipeline 2.5) and Scripted Pipeline. Both of which support building continuous delivery pipelines. Both may be used to define a Pipeline in either the web UI or with a Jenkinsfile, though it’s generally considered a best practice to create a Jenkinsfile and check the file into the source control repository
更新 - 跳过共享库触发器
自 Pipeline Shared Groovy 库插件的 2.9 版以来就存在这种禁用更改日志的选项:
@Library(value="mylib", changelog=false)
对于不包含在更改检查中的库,取消选中相关库 'system configuration' 页面中的 'Include @Library changes in job recent changes' 复选框,或设置新的可能参数 'changelog=false'在管道“@Library”指令中。
为了不将管道本身包含在 'pull scm' 中,这有点棘手。
一种选择是将 Jenkinsfile 包含在代码存储库中,但如果 Jenkinsfile 本身被更改,也会触发构建,这并不是真正需要的。
另一种选择是在流水线的开头包括检查触发作业的更改是在源存储库中还是在流水线存储库中,如果不在源存储库中则停止构建。
我想使用两个 Git 存储库构建一个项目。其中一个包含源代码,而另一个包含构建和部署脚本。
我正在使用 Jenkins 管道构建我的项目。管道脚本在 Jenkins-pipeline 存储库中,源代码在 middleware 存储库中。由于我的管道脚本在 Jenkins-pipeline 存储库中,我正在使用 Jenkins-pipeline 存储库中的 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 作业,但我有两个存储库已为该作业配置,所以
- 源代码库(middleware.git)
- 管道脚本存储库 (Jenkins-pipeline.git)
因此,只要在这些存储库中的任何一个中有提交,我的 Jenkins 作业就会被触发,这是我不想要的! 我只想在我的源代码存储库中有新提交时触发我的 Jenkins 构建,而不应在 Jenkins 管道存储库中有提交时触发构建。 我该怎么做?
更新
我在 Jenkinsfile 中使用共享库,这些库也在另一个存储库中。当我在共享库存储库中提交某些内容时,也会触发 Jenkins 作业,并且我在多个作业中使用共享库,因此所有作业都会被触发,这是我不想要的。
P.S。我无法使用 webhooks 触发我的 Jenkins 构建,因为我的 Jenkins 在私有网络中!
答案很简单。 A Jenkinsfile 始终属于源代码存储库的根目录。您必须将 Jenkinsfile 签入中间件存储库。
Pipeline supports two syntaxes, Declarative (introduced in Pipeline 2.5) and Scripted Pipeline. Both of which support building continuous delivery pipelines. Both may be used to define a Pipeline in either the web UI or with a Jenkinsfile, though it’s generally considered a best practice to create a Jenkinsfile and check the file into the source control repository
更新 - 跳过共享库触发器
自 Pipeline Shared Groovy 库插件的 2.9 版以来就存在这种禁用更改日志的选项:
@Library(value="mylib", changelog=false)
对于不包含在更改检查中的库,取消选中相关库 'system configuration' 页面中的 'Include @Library changes in job recent changes' 复选框,或设置新的可能参数 'changelog=false'在管道“@Library”指令中。
为了不将管道本身包含在 'pull scm' 中,这有点棘手。 一种选择是将 Jenkinsfile 包含在代码存储库中,但如果 Jenkinsfile 本身被更改,也会触发构建,这并不是真正需要的。
另一种选择是在流水线的开头包括检查触发作业的更改是在源存储库中还是在流水线存储库中,如果不在源存储库中则停止构建。