我有一个管道脚本,并且要根据migrations文件夹的更改采取不同的操作。
基本上是这样的工作流程
migrations/
文件夹是否有新的迁移或更改我不确定如何实现此目标,我使用的是2.1版和git插件。此仓库位于私人服务器上
答案 0 :(得分:0)
对于您而言,Git插件的“包含区域”功能应该会有所帮助。有关详细信息,请参见this答案。
因此,对于管道,您可以使用管道语法生成器(在样本步骤:结帐-> SCM:Git->其他行为->轮询忽略)中的http://<JENKINS_IP>:<JENKINS_PORT>/job/<PATH_TO_PIPELINE_JOB>/pipeline-syntax/
作业下生成正确的语法。某些路径)。会是这样的:
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'PathRestriction', excludedRegions: '', includedRegions: 'migrations/.*']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'test', url: 'http://test.com/test.git']]])
查看this文档以了解详细信息(extensions -> includedRegions
)。
对于作业dsl语法,它类似于this:
scm {
git {
remote {
...
}
extensions {
cleanBeforeCheckout()
disableRemotePoll() // this is important for path restrictions to work
configure { git ->
git / 'extensions' / 'hudson.plugins.git.extensions.impl.PathRestriction' {
includedRegions "somepath/.*"
excludedRegions "README.md\n\\.gitignore\npom.xml"
}
}
}
}
}
此外,当将更改推送到存储库时,您可以使用GitHub / GitLab / BitBucket Webhooks来构建项目。 有关Github和BitBucket配置的信息,请参见this示例;有关GitLab配置的信息,请参见this示例。
如果您只想为migrations
文件夹中的更改而不是存储库中的任何更改生成项目,则可以配置注释正则表达式来触发生成并添加此特定注释(例如,“ [文件夹]“),每次您想要触发构建时提交。
答案 1 :(得分:0)
可能有直接通过插件执行此操作的方法,但是如果我添加另一个分支源作为“单个存储库和分支”,则只有包含区域的选项,所以现在我实现了此解决方案:
我将此添加到我的Jenkins文件中,以检查migrations/
文件夹中的更改
script {
env.CONTAINS_MIGRATIONS = sh (
script: 'git diff --name-only --diff-filter=AMDR --cached HEAD^',
returnStdout: true
).trim()
if (env.CONTAINS_MIGRATIONS.contains('migrations')) {
// Do migrations related stuff
}
}
我这样做是考虑到不太可能出现文件名冲突,如果发生这种情况并不重要