@@ -25,12 +25,12 @@ version: 2
25
25
jobs :
26
26
27
27
build :
28
+ machine :
29
+ image : circleci/classic:201711-01
30
+ working_directory : /tmp/src/dmriprep
28
31
environment :
29
32
TZ : " /usr/share/zoneinfo/America/Los_Angeles"
30
33
SCRATCH : " /scratch"
31
- docker :
32
- - image : docker:18.01.0-ce-git
33
- working_directory : /tmp/src/dmriprep
34
34
steps :
35
35
- checkout
36
36
- run :
@@ -40,34 +40,46 @@ jobs:
40
40
echo "Only docs build"
41
41
circleci step halt
42
42
fi
43
-
44
- - run :
45
- name : Install parallel gzip and python3
46
- command : |
47
- apk add --no-cache pigz python3
48
43
- restore_cache :
49
44
keys :
50
- - docker-v0 -{{ .Branch }}-{{ .Revision }}
51
- - docker-v0 -{{ .Branch }}-
52
- - docker-v0 -master-
53
- - docker-v0 -
45
+ - build-v1 -{{ .Branch }}-{{ epoch }}
46
+ - build-v1 -{{ .Branch }}-
47
+ - build-v1 -master-
48
+ - build-v1 -
54
49
paths :
55
- - /tmp/cache/docker.tar.gz
56
- - setup_remote_docker
50
+ - /tmp/docker
57
51
- run :
58
- name : Load Docker image layer cache
59
- no_output_timeout : 30m
52
+ name : Set-up a Docker registry
60
53
command : |
61
- docker info
62
- set +o pipefail
63
- if [ -f /tmp/cache/docker.tar.gz ]; then
64
- pigz -d --stdout /tmp/cache/docker.tar.gz | docker load
65
- docker images
54
+ docker run -d -p 5000:5000 --restart=always --name=registry \
55
+ -v /tmp/docker:/var/lib/registry registry:2
56
+ - run :
57
+ name : Pull images
58
+ command : |
59
+ set +e
60
+ docker pull localhost:5000/ubuntu
61
+ success=$?
62
+ set -e
63
+ if [[ "$success" = "0" ]]; then
64
+ echo "Pulling from local registry"
65
+ docker tag localhost:5000/ubuntu ubuntu:xenial-20191010
66
+ docker pull localhost:5000/dmriprep
67
+ docker tag localhost:5000/dmriprep nipreps/dmriprep:latest
68
+ docker tag localhost:5000/dmriprep nipreps/dmriprep
69
+ else
70
+ echo "Pulling from Docker Hub"
71
+ docker pull ubuntu:xenial-20191010
72
+ docker tag ubuntu:xenial-20191010 localhost:5000/ubuntu
73
+ docker push localhost:5000/ubuntu
74
+ docker pull nipreps/dmriprep:latest
66
75
fi
67
76
- run :
68
77
name : Build Docker image
69
78
no_output_timeout : 60m
70
79
command : |
80
+ export PY3=$(pyenv versions | grep '3\.' |
81
+ sed -e 's/.* 3\./3./' -e 's/ .*//')
82
+ pyenv local $PY3
71
83
# Get version, update files.
72
84
THISVERSION=$( python3 get_version.py )
73
85
if [[ ${THISVERSION:0:2} == "0+" ]] ; then
@@ -78,54 +90,34 @@ jobs:
78
90
fi
79
91
# Build docker image
80
92
e=1 && for i in {1..5}; do
81
- docker build \
93
+ docker build --rm \
82
94
--cache-from=nipreps/dmriprep \
83
- --rm=false \
84
95
-t nipreps/dmriprep:latest \
85
96
--build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
86
97
--build-arg VCS_REF=`git rev-parse --short HEAD` \
87
98
--build-arg VERSION="${CIRCLE_TAG:-$THISVERSION}" . \
88
99
&& e=0 && break || sleep 15
89
100
done && [ "$e" -eq "0" ]
90
- # test if development image should be built
91
- if [[ "$( git log --format=oneline -n 1 $CIRCLE_SHA1 | grep -i -E '\[build[ _]?devel\]' )" != "" ]]; then
92
- echo "building development container"
93
- docker tag nipreps/dmriprep nipreps/dmriprep:unstable
94
- docker build \
95
- --rm=false \
96
- -t nipreps/dmriprep_devel \
97
- -f Dockerfile_devel .
98
- fi
99
-
100
101
- run :
101
- name : Docker save
102
+ name : Docker push to local registry
102
103
no_output_timeout : 40m
103
104
command : |
104
- mkdir -p /tmp/cache
105
- docker save ubuntu:xenial-20161213 nipreps/dmriprep:latest \
106
- | pigz -3 > /tmp/cache/docker.tar.gz
107
- - save_cache :
108
- key : docker-v0-{{ .Branch }}-{{ .Revision }}-{{ epoch }}
109
- paths :
110
- - /tmp/cache/docker.tar.gz
111
-
105
+ docker tag nipreps/dmriprep:latest localhost:5000/dmriprep
106
+ docker push localhost:5000/dmriprep
112
107
- run :
113
- name : Smoke test Docker image
108
+ name : Docker registry garbage collection
114
109
command : |
115
- THISVERSION=$( python3 get_version.py )
116
- THISVERSION=${THISVERSION%.dirty*}
117
- THISVERSION=${CIRCLE_TAG:-$THISVERSION}
118
- DOCKERVERSION=$(docker run --rm -it nipreps/dmriprep:latest --version)
119
- DOCKERVERSION=${DOCKERVERSION%$'\r'}
120
- DOCKERVERSION=${DOCKERVERSION#*"dmriprep v"}
121
- echo "VERSION: \"$THISVERSION\""
122
- echo "DOCKERVERSION: \"${DOCKERVERSION}\""
123
- test "$DOCKERVERSION" = "$THISVERSION"
124
-
110
+ docker exec -it registry /bin/registry garbage-collect --delete-untagged \
111
+ /etc/docker/registry/config.yml
112
+ - save_cache :
113
+ key : build-v1-{{ .Branch }}-{{ epoch }}
114
+ paths :
115
+ - /tmp/docker
125
116
- persist_to_workspace :
126
117
root : /tmp
127
118
paths :
128
119
- src/dmriprep
120
+
129
121
get_data :
130
122
machine :
131
123
# Ubuntu 14.04 with Docker 17.10.0-ce
@@ -207,32 +199,30 @@ jobs:
207
199
at : /tmp
208
200
- restore_cache :
209
201
keys :
210
- - docker -v0-{{ .Branch }} -{{ .Revision }}
202
+ - data -v0-{{ .Revision }}
211
203
- restore_cache :
212
204
keys :
213
- - data-v0-{{ .Revision }}
205
+ - build-v1-{{ .Branch }}-{{ epoch }}
206
+ - build-v1-{{ .Branch }}-
207
+ - build-v1-
208
+ paths :
209
+ - /tmp/docker
210
+ - run :
211
+ name : Set-up a Docker registry
212
+ command : |
213
+ docker run -d -p 5000:5000 --restart=always --name=registry \
214
+ -v /tmp/docker:/var/lib/registry registry:2
215
+ - run :
216
+ name : Pull images from local registry
217
+ command : |
218
+ docker pull localhost:5000/dmriprep
219
+ docker tag localhost:5000/dmriprep nipreps/dmriprep:latest
214
220
- restore_cache :
215
221
keys :
216
222
- THP002-anat-v00-{{ .Branch }}-{{ .Revision }}
217
223
- THP002-anat-v00-{{ .Branch }}
218
224
- THP002-anat-v00-master
219
225
- THP002-anat-v00-
220
- - run :
221
- name : Setting up test
222
- command : |
223
- mkdir -p /tmp/THP002/derivatives && sudo setfacl -d -m group:$(id -gn):rwx /tmp/THP002/derivatives && sudo setfacl -m group:$(id -gn):rwx /tmp/THP002/derivatives
224
- pip install --upgrade pip setuptools
225
- - run :
226
- name : Load Docker image layer cache
227
- no_output_timeout : 30m
228
- command : |
229
- docker info
230
- set +o pipefail
231
- if [ -f /tmp/cache/docker.tar.gz ]; then
232
- sudo apt update && sudo apt -y install pigz
233
- pigz -d --stdout /tmp/cache/docker.tar.gz | docker load
234
- docker images
235
- fi
236
226
- run :
237
227
name : Run anatomical workflow on THP002
238
228
no_output_timeout : 2h
@@ -286,21 +276,40 @@ jobs:
286
276
image : circleci/classic:201711-01
287
277
working_directory : /tmp/src/dmriprep
288
278
steps :
289
-
279
+ - run :
280
+ name : Check whether image should be deployed to Docker Hub
281
+ command : |
282
+ if [[ "$CIRCLE_PROJECT_USERNAME" != "nipreps" ]]; then
283
+ echo "Nothing to deploy for $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME."
284
+ circleci step halt
285
+ fi
286
+ - checkout :
287
+ path : /home/circleci/src/dmriprep
288
+ - run :
289
+ name : Check whether build should be skipped
290
+ command : |
291
+ cd /home/circleci/src/dmriprep
292
+ if [[ "$( git log --format='format:%s' -n 1 $CIRCLE_SHA1 | grep -i -E '^docs?(\(\w+\))?:' )" != "" ]]; then
293
+ echo "Only docs build"
294
+ circleci step halt
295
+ fi
290
296
- restore_cache :
291
297
keys :
292
- - docker-v0-{{ .Branch }}-{{ .Revision }}
298
+ - build-v1-{{ .Branch }}-{{ epoch }}
299
+ - build-v1-{{ .Branch }}-
300
+ - build-v1-
301
+ paths :
302
+ - /tmp/docker
293
303
- run :
294
- name : Load Docker image layer cache
295
- no_output_timeout : 30m
304
+ name : Set-up a Docker registry
296
305
command : |
297
- docker info
298
- set +o pipefail
299
- if [ -f /tmp/cache/docker.tar.gz ]; then
300
- sudo apt update && sudo apt -y install pigz
301
- pigz -d --stdout /tmp/cache/docker.tar.gz | docker load
302
- docker images
303
- fi
306
+ docker run -d -p 5000:5000 --restart=always --name=registry \
307
+ -v /tmp/docker:/var/lib/registry registry:2
308
+ - run :
309
+ name : Pull images from local registry
310
+ command : |
311
+ docker pull localhost:5000/dmriprep
312
+ docker tag localhost:5000/dmriprep nipreps/dmriprep:latest
304
313
- run :
305
314
name : Deploy to Docker Hub
306
315
no_output_timeout : 40m
@@ -335,18 +344,21 @@ jobs:
335
344
fi
336
345
- restore_cache :
337
346
keys :
338
- - docker-v0-{{ .Branch }}-{{ .Revision }}
347
+ - build-v1-{{ .Branch }}-{{ epoch }}
348
+ - build-v1-{{ .Branch }}-
349
+ - build-v1-
350
+ paths :
351
+ - /tmp/docker
339
352
- run :
340
- name : Load Docker image layer cache
341
- no_output_timeout : 30m
353
+ name : Set-up a Docker registry
342
354
command : |
343
- docker info
344
- set +o pipefail
345
- if [ -f /tmp/cache/docker.tar.gz ]; then
346
- sudo apt update && sudo apt -y install pigz
347
- pigz -d --stdout /tmp/cache/docker.tar.gz | docker load
348
- docker images
349
- fi
355
+ docker run -d -p 5000:5000 --restart=always --name=registry \
356
+ -v /tmp/docker:/var/lib/registry registry:2
357
+ - run :
358
+ name : Pull images from local registry
359
+ command : |
360
+ docker pull localhost:5000/dmriprep
361
+ docker tag localhost:5000/dmriprep nipreps/dmriprep:latest
350
362
- run :
351
363
name : Deploy to Docker Hub
352
364
no_output_timeout : 40m
0 commit comments