@@ -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 }}-{{ .Revision }}
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,28 @@ 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 }}-{{ .Revision }}
206
+ paths :
207
+ - /tmp/docker
208
+ - run :
209
+ name : Set-up a Docker registry
210
+ command : |
211
+ docker run -d -p 5000:5000 --restart=always --name=registry \
212
+ -v /tmp/docker:/var/lib/registry registry:2
213
+ - run :
214
+ name : Pull images from local registry
215
+ command : |
216
+ docker pull localhost:5000/dmriprep
217
+ docker tag localhost:5000/dmriprep nipreps/dmriprep:latest
214
218
- restore_cache :
215
219
keys :
216
220
- THP002-anat-v00-{{ .Branch }}-{{ .Revision }}
217
221
- THP002-anat-v00-{{ .Branch }}
218
222
- THP002-anat-v00-master
219
223
- 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
224
- run :
237
225
name : Run anatomical workflow on THP002
238
226
no_output_timeout : 2h
@@ -286,21 +274,38 @@ jobs:
286
274
image : circleci/classic:201711-01
287
275
working_directory : /tmp/src/dmriprep
288
276
steps :
289
-
277
+ - run :
278
+ name : Check whether image should be deployed to Docker Hub
279
+ command : |
280
+ if [[ "$CIRCLE_PROJECT_USERNAME" != "nipreps" ]]; then
281
+ echo "Nothing to deploy for $CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME."
282
+ circleci step halt
283
+ fi
284
+ - checkout :
285
+ path : /home/circleci/src/dmriprep
286
+ - run :
287
+ name : Check whether build should be skipped
288
+ command : |
289
+ cd /home/circleci/src/dmriprep
290
+ if [[ "$( git log --format='format:%s' -n 1 $CIRCLE_SHA1 | grep -i -E '^docs?(\(\w+\))?:' )" != "" ]]; then
291
+ echo "Only docs build"
292
+ circleci step halt
293
+ fi
290
294
- restore_cache :
291
295
keys :
292
- - docker-v0-{{ .Branch }}-{{ .Revision }}
296
+ - build-v1-{{ .Branch }}-{{ .Revision }}
297
+ paths :
298
+ - /tmp/docker
293
299
- run :
294
- name : Load Docker image layer cache
295
- no_output_timeout : 30m
300
+ name : Set-up a Docker registry
296
301
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
302
+ docker run -d -p 5000:5000 --restart=always --name=registry \
303
+ -v /tmp/docker:/var/lib/registry registry:2
304
+ - run :
305
+ name : Pull images from local registry
306
+ command : |
307
+ docker pull localhost:5000/dmriprep
308
+ docker tag localhost:5000/dmriprep nipreps/dmriprep:latest
304
309
- run :
305
310
name : Deploy to Docker Hub
306
311
no_output_timeout : 40m
@@ -335,18 +340,19 @@ jobs:
335
340
fi
336
341
- restore_cache :
337
342
keys :
338
- - docker-v0-{{ .Branch }}-{{ .Revision }}
343
+ - build-v1-{{ .Branch }}-{{ .Revision }}
344
+ paths :
345
+ - /tmp/docker
339
346
- run :
340
- name : Load Docker image layer cache
341
- no_output_timeout : 30m
347
+ name : Set-up a Docker registry
342
348
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
349
+ docker run -d -p 5000:5000 --restart=always --name=registry \
350
+ -v /tmp/docker:/var/lib/registry registry:2
351
+ - run :
352
+ name : Pull images from local registry
353
+ command : |
354
+ docker pull localhost:5000/dmriprep
355
+ docker tag localhost:5000/dmriprep nipreps/dmriprep:latest
350
356
- run :
351
357
name : Deploy to Docker Hub
352
358
no_output_timeout : 40m
0 commit comments