-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathJenkinsfile
More file actions
107 lines (88 loc) · 3.76 KB
/
Jenkinsfile
File metadata and controls
107 lines (88 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/env groovy
class Image {
String dockerfileFolder
String baseImageName
String amberImageTag
}
List<Image> dockerImagesToBuild = [
new Image(dockerfileFolder: 'debian-based',
baseImageName: 'ubuntu:22.04',
amberImageTag: 'ambermd/cpu-build'),
new Image(dockerfileFolder: 'debian-based',
baseImageName: 'nvidia/cuda:11.4.3-devel-ubuntu20.04',
amberImageTag: 'ambermd/gpu-build'),
new Image(dockerfileFolder: 'gcc-based',
baseImageName: 'gcc:9.1.0',
amberImageTag: 'ambermd/gcc91-build'),
new Image(dockerfileFolder: 'gcc-based',
baseImageName: 'gcc:10.2',
amberImageTag: 'ambermd/gcc102-build'),
new Image(dockerfileFolder: 'cuda-opencl',
baseImageName: 'nvidia/cuda:11.4.3-devel-ubuntu20.04',
amberImageTag: 'swails/openmm-all'),
new Image(dockerfileFolder: 'openmm-cpu',
baseImageName: 'ubuntu:20.04',
amberImageTag: 'swails/openmm-cpu'),
new Image(dockerfileFolder: 'lyx',
baseImageName: 'ubuntu:18.04',
amberImageTag: 'ambermd/lyx'),
new Image(dockerfileFolder: 'maven',
baseImageName: 'ubuntu:18.04',
amberImageTag: 'swails/maven'),
new Image(dockerfileFolder: 'ansible',
baseImageName: 'ubuntu:18.04',
amberImageTag: 'swails/ansible'),
]
pipeline {
agent none
options {
skipDefaultCheckout()
}
parameters {
choice(choices: ['no', 'yes'], name: 'FORCE_BUILD',
description: 'Should a build be forced for all images?')
}
stages {
stage('Build and push the docker images') {
agent { label 'docker' }
steps {
script {
Map parallelStages = [:]
String tagName = 'test'
if (env.BRANCH_NAME == 'master') {
echo 'Running on master branch, using latest tag'
tagName = 'latest'
}
dockerImagesToBuild.each { dockerImageToBuild ->
String imageTag = "${dockerImageToBuild.amberImageTag}:${tagName}"
String baseImage = dockerImageToBuild.baseImageName
String folder = dockerImageToBuild.dockerfileFolder
boolean doBuild = params.FORCE_BUILD == 'yes' || github.fileChangedIn(path: "${folder}/")
if (doBuild) {
parallelStages["Building ${imageTag}"] = {
node('docker') {
dir('common-dockerfiles') {
checkout scm
def image = docker.build(imageTag, "--build-arg BASEIMAGE=${baseImage} ${folder}")
docker.withRegistry('', 'amber-docker-credentials') {
echo "Pushing ${imageTag} from ${baseImage}"
image.push()
}
}
}
}
} else {
parallelStages["Building ${imageTag}"] = {
stage(imageTag) {
echo "INFO: No changes or force build requires building ${imageTag}"
}
}
}
}
parallel parallelStages
}
}
post { cleanup { deleteDir() } }
}
}
}