3
3
4
4
compare_base_dockerfiles :
5
5
docker :
6
- - image : docker:17.09 .0-ce-git
6
+ - image : docker:17.10 .0-ce-git
7
7
steps :
8
8
- checkout :
9
9
path : /home/circleci/nipype
@@ -15,32 +15,28 @@ jobs:
15
15
# Use the sha256 sum of the pruned Dockerfile as the cache key.
16
16
ash prune_dockerfile.sh Dockerfile.base > /tmp/docker/Dockerfile.base-pruned
17
17
- restore_cache :
18
- # TODO: change this to 'master' after we are sure this works.
19
- key : dftest-v5-enh/circleci-neurodocker-{{ checksum "/tmp/docker/Dockerfile.base-pruned" }}
18
+ key : dockerfile-cache-v1-master-{{ checksum "/tmp/docker/Dockerfile.base-pruned" }}
20
19
- run :
21
20
name : Determine how to get base image
22
21
command : |
23
- GET_BASE="/tmp/docker/get_base_image.sh"
24
-
25
- # This directory comes from the cache.
26
- if [ -d /cache/base-dockerfile ]; then
27
- echo "echo Pulling base image ..." > "$GET_BASE"
28
- echo "docker pull kaczmarj/nipype:base" >> "$GET_BASE"
22
+ if [ -f /tmp/docker/cache/Dockerfile.base-pruned ]; then
23
+ echo "Cache found. Will pull base image."
24
+ echo 'export GET_BASE=PULL' > /tmp/docker/get_base_image.sh
29
25
else
30
- echo "echo Building base image ..." > "$GET_BASE "
31
- echo "docker build -t kaczmarj/nipype:base - < /home/circleci/nipype/ docker/Dockerfile.base" >> "$GET_BASE"
26
+ echo "Cache not found. Will build base image. "
27
+ echo 'export GET_BASE=BUILD' > /tmp/ docker/get_base_image.sh
32
28
fi
33
29
- persist_to_workspace :
34
30
root : /tmp
35
31
paths :
36
- - docker/*
32
+ - docker/get_base_image.sh
37
33
38
34
39
35
build_and_test :
40
36
parallelism : 4
41
37
machine :
42
- # Ubuntu 14.04 with Docker 17.03 .0-ce
43
- image : circleci/classic:201703-01
38
+ # Ubuntu 14.04 with Docker 17.10 .0-ce
39
+ image : circleci/classic:201710-02
44
40
steps :
45
41
- checkout :
46
42
path : /home/circleci/nipype
@@ -60,10 +56,19 @@ jobs:
60
56
- run :
61
57
name : Get base image (pull or build)
62
58
no_output_timeout : 60m
63
- # TODO: remove `docker pull` once once caching works.
59
+ working_directory : /home/circleci/nipype
64
60
command : |
65
- # bash /tmp/docker/get_base_image.sh
66
- docker pull kaczmarj/nipype:base
61
+ source /tmp/docker/get_base_image.sh
62
+ if [ "$GET_BASE" == "PULL" ]; then
63
+ echo "Pulling base image ..."
64
+ docker pull nipype/nipype:base
65
+ elif [ "$GET_BASE" == "BUILD" ]; then
66
+ echo "Building base image ..."
67
+ docker build -t nipype/nipype:base - < docker/Dockerfile.base
68
+ else
69
+ echo "Error: method to get base image not understood"
70
+ exit 1
71
+ fi
67
72
- run :
68
73
name : Build main image (py36)
69
74
no_output_timeout : 60m
72
77
e=1 && for i in {1..5}; do
73
78
docker build \
74
79
--rm=false \
75
- --tag kaczmarj /nipype:latest \
76
- --tag kaczmarj /nipype:py36 \
80
+ --tag nipype /nipype:latest \
81
+ --tag nipype /nipype:py36 \
77
82
--build-arg BUILD_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
78
83
--build-arg VCS_REF="$(git rev-parse --short HEAD)" \
79
84
--build-arg VERSION="${CIRCLE_TAG}" /home/circleci/nipype \
87
92
e=1 && for i in {1..5}; do
88
93
docker build \
89
94
--rm=false \
90
- --tag kaczmarj /nipype:py27 \
95
+ --tag nipype /nipype:py27 \
91
96
--build-arg PYTHON_VERSION_MAJOR=2 \
92
97
--build-arg PYTHON_VERSION_MINOR=7 \
93
98
--build-arg BUILD_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
@@ -125,21 +130,26 @@ jobs:
125
130
name : Save Docker images to workspace
126
131
no_output_timeout : 60m
127
132
command : |
128
- if [ "$CIRCLE_NODE_INDEX" -eq "0" ]; then
129
- docker save kaczmarj/nipype:base \
130
- kaczmarj/nipype:latest \
131
- kaczmarj/nipype:py36 \
132
- kaczmarj/nipype:py27 > /tmp/docker/nipype-base-latest-py36-py27.tar
133
+ if [ "$CIRCLE_NODE_INDEX" -eq "0" ] && [ "$CIRCLE_BRANCH" == "master" ]; then
134
+ docker save nipype/nipype:base \
135
+ nipype/nipype:latest \
136
+ nipype/nipype:py36 \
137
+ nipype/nipype:py27 | gzip -1 > /tmp/docker/nipype-base-latest-py36-py27.tar.gz
138
+ du -h /tmp/docker/nipype-base-latest-py36-py27.tar.gz
139
+ else
140
+ # Workaround for `persist_to_workspace` to succeed when we are
141
+ # not deploying Docker images.
142
+ touch /tmp/docker/nipype-base-latest-py36-py27.tar.gz
133
143
fi
134
144
- persist_to_workspace :
135
145
root : /tmp
136
146
paths :
137
- - docker/*
147
+ - docker/nipype-base-latest-py36-py27.tar.gz
138
148
139
149
140
150
deploy :
141
151
docker :
142
- - image : docker:17.09 .0-ce-git
152
+ - image : docker:17.10 .0-ce-git
143
153
steps :
144
154
- checkout :
145
155
path : /home/circleci/nipype
@@ -150,27 +160,27 @@ jobs:
150
160
name : Load saved Docker images.
151
161
no_output_timeout : 60m
152
162
command : |
153
- docker load < /tmp/docker/nipype-base-latest-py36-py27.tar
163
+ docker load < /tmp/docker/nipype-base-latest-py36-py27.tar.gz
154
164
- run :
155
165
name : Push to DockerHub
156
166
no_output_timeout : 120m
157
167
command : |
158
168
echo "$DOCKER_PASS" | docker login -u "$DOCKER_USER" --password-stdin
159
- docker push kaczmarj /nipype:base
160
- docker push kaczmarj /nipype:latest
161
- docker push kaczmarj /nipype:py36
162
- docker push kaczmarj /nipype:py27
169
+ docker push nipype /nipype:base
170
+ docker push nipype /nipype:latest
171
+ docker push nipype /nipype:py36
172
+ docker push nipype /nipype:py27
163
173
- run :
164
174
name : Prune base Dockerfile to update cache
165
175
working_directory : /home/circleci/nipype/docker
166
176
command : |
167
- mkdir -p /tmp/docker
177
+ mkdir -p /tmp/docker/cache
168
178
# Use the sha256 sum of the pruned Dockerfile as the cache key.
169
- ash prune_dockerfile.sh Dockerfile.base > /tmp/docker/Dockerfile.base-pruned
179
+ ash prune_dockerfile.sh Dockerfile.base > /tmp/docker/cache/ Dockerfile.base-pruned
170
180
- save_cache :
171
181
paths :
172
- - /tmp/docker/Dockerfile.base-pruned
173
- key : dftest-v5- {{ .Branch }}-{{ checksum "/tmp/docker/Dockerfile.base-pruned" }}
182
+ - /tmp/docker/cache/ Dockerfile.base-pruned
183
+ key : dockerfile-cache-v1- {{ .Branch }}-{{ checksum "/tmp/docker/cache /Dockerfile.base-pruned" }}
174
184
175
185
176
186
workflows :
@@ -184,7 +194,6 @@ workflows:
184
194
- deploy :
185
195
filters :
186
196
branches :
187
- # TODO: change this to master after we are sure this works.
188
- only : enh/circleci-neurodocker
197
+ only : master
189
198
requires :
190
199
- build_and_test
0 commit comments