I'm using Jenkins declarative pipeline and I'm trying to execute a specific build stage only if changes were made ONLY in a specified directory.
So my directory hierarchy looks something like this:
root
├─ some-directory
| ├─ sub-directory
| | └─ file-1
| ├─ file-1
| └─ file-2
├─ another-directory
| ├─ file-1
| └─ file-2
├─ file-x
└─ file-y
This is the current code:
stage ("Deploy branches") {
agent any
when {
allOf {
not { branch 'master' }
changeset "some-directory/**"
}
}
steps {
// do stuff
}
}
This deploys whenever something was changed in "some-directory" but also when something outside of "some-directory" was changed. I would like this step to run if nothing else but the contents of "some-directory" were changed.
This is what the Jenkins docs say about the "changeset" directive:
changeset
Execute the stage if the build’s SCM changeset contains one or more files matching the given string or glob. Example: when { changeset "**/*.js" }
By default the path matching will be case insensitive, this can be turned off with the caseSensitive parameter, for example: when { changeset glob: "ReadMe.*", caseSensitive: true }
"If the changeset contains one or more files matching the given string or glob." means the pipelines works as designed, but what I nwould eed is
"If the files in the changeset match only the given string or glob."
Unfortunately I couldn't find anything about that in the docs or somewhere else on the internet.
Do you have any suggestions how I could make this possible?
changeset "some-directory/**/*"
– Unfailing