diff options
Diffstat (limited to 'Jenkinsfile')
| -rw-r--r-- | Jenkinsfile | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/Jenkinsfile b/Jenkinsfile index f7f3f28..3b197f4 100644 --- a/Jenkinsfile +++ b/Jenkinsfile | |||
| @@ -10,19 +10,40 @@ pipeline { | |||
| 10 | steps { | 10 | steps { |
| 11 | script { | 11 | script { |
| 12 | def base = env.CHANGE_TARGET ? "origin/${env.CHANGE_TARGET}" : "HEAD~1" | 12 | def base = env.CHANGE_TARGET ? "origin/${env.CHANGE_TARGET}" : "HEAD~1" |
| 13 | def changed = sh( | 13 | |
| 14 | script: "git diff --name-only ${base} HEAD | cut -d/ -f1 | sort -u", | 14 | // returnStdout gives a String. Trim, split, and FORCE to a List. |
| 15 | def diffOutput = sh( | ||
| 16 | script: "git diff --name-only ${base} HEAD || true", | ||
| 15 | returnStdout: true | 17 | returnStdout: true |
| 16 | ).trim().split('\n') | 18 | ).trim() |
| 19 | |||
| 20 | // 'as List' avoids the non-serializable String[] array | ||
| 21 | def changedFiles = diffOutput ? (diffOutput.split('\n') as List) : [] | ||
| 22 | |||
| 23 | // Build a plain List of unique top-level dirs (Strings only) | ||
| 24 | def candidates = [] | ||
| 25 | for (String f : changedFiles) { | ||
| 26 | def top = f.split('/')[0] | ||
| 27 | if (top && !candidates.contains(top)) { | ||
| 28 | candidates.add(top) | ||
| 29 | } | ||
| 30 | } | ||
| 17 | 31 | ||
| 18 | // keep only dirs containing a Dockerfile | 32 | // fileExists is a pipeline STEP, so it must stay in CPS land |
| 19 | env.IMAGES_TO_BUILD = changed.findAll { | 33 | // (i.e. a normal for-loop, NOT inside @NonCPS or a findAll closure) |
| 20 | fileExists("${it}/Dockerfile") | 34 | def toBuild = [] |
| 21 | }.join(',') | 35 | for (String dir : candidates) { |
| 36 | if (fileExists("${dir}/Dockerfile")) { | ||
| 37 | toBuild.add(dir) | ||
| 38 | } | ||
| 39 | } | ||
| 40 | |||
| 41 | // Store only a plain String in env | ||
| 42 | env.IMAGES_TO_BUILD = toBuild.join(',') | ||
| 43 | echo "Images to build: ${env.IMAGES_TO_BUILD ?: '(none)'}" | ||
| 22 | } | 44 | } |
| 23 | } | 45 | } |
| 24 | } | 46 | } |
| 25 | |||
| 26 | stage('Build & push') { | 47 | stage('Build & push') { |
| 27 | when { expression { env.IMAGES_TO_BUILD } } | 48 | when { expression { env.IMAGES_TO_BUILD } } |
| 28 | steps { | 49 | steps { |
| @@ -49,4 +70,4 @@ pipeline { | |||
| 49 | } | 70 | } |
| 50 | } | 71 | } |
| 51 | } | 72 | } |
| 52 | } \ No newline at end of file | 73 | } |
