33
44 compare_base_dockerfiles :
55 docker :
6- - image : docker:17.09 .0-ce-git
6+ - image : docker:17.10 .0-ce-git
77 steps :
88 - checkout :
99 path : /home/circleci/nipype
@@ -15,32 +15,28 @@ jobs:
1515 # Use the sha256 sum of the pruned Dockerfile as the cache key.
1616 ash prune_dockerfile.sh Dockerfile.base > /tmp/docker/Dockerfile.base-pruned
1717 - 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" }}
2019 - run :
2120 name : Determine how to get base image
2221 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
2925 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
3228 fi
3329 - persist_to_workspace :
3430 root : /tmp
3531 paths :
36- - docker/*
32+ - docker/get_base_image.sh
3733
3834
3935 build_and_test :
4036 parallelism : 4
4137 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
4440 steps :
4541 - checkout :
4642 path : /home/circleci/nipype
@@ -60,10 +56,19 @@ jobs:
6056 - run :
6157 name : Get base image (pull or build)
6258 no_output_timeout : 60m
63- # TODO: remove `docker pull` once once caching works.
59+ working_directory : /home/circleci/nipype
6460 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
6772 - run :
6873 name : Build main image (py36)
6974 no_output_timeout : 60m
7277 e=1 && for i in {1..5}; do
7378 docker build \
7479 --rm=false \
75- --tag kaczmarj /nipype:latest \
76- --tag kaczmarj /nipype:py36 \
80+ --tag nipype /nipype:latest \
81+ --tag nipype /nipype:py36 \
7782 --build-arg BUILD_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
7883 --build-arg VCS_REF="$(git rev-parse --short HEAD)" \
7984 --build-arg VERSION="${CIRCLE_TAG}" /home/circleci/nipype \
8792 e=1 && for i in {1..5}; do
8893 docker build \
8994 --rm=false \
90- --tag kaczmarj /nipype:py27 \
95+ --tag nipype /nipype:py27 \
9196 --build-arg PYTHON_VERSION_MAJOR=2 \
9297 --build-arg PYTHON_VERSION_MINOR=7 \
9398 --build-arg BUILD_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
@@ -125,21 +130,26 @@ jobs:
125130 name : Save Docker images to workspace
126131 no_output_timeout : 60m
127132 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
133143 fi
134144 - persist_to_workspace :
135145 root : /tmp
136146 paths :
137- - docker/*
147+ - docker/nipype-base-latest-py36-py27.tar.gz
138148
139149
140150 deploy :
141151 docker :
142- - image : docker:17.09 .0-ce-git
152+ - image : docker:17.10 .0-ce-git
143153 steps :
144154 - checkout :
145155 path : /home/circleci/nipype
@@ -150,27 +160,27 @@ jobs:
150160 name : Load saved Docker images.
151161 no_output_timeout : 60m
152162 command : |
153- docker load < /tmp/docker/nipype-base-latest-py36-py27.tar
163+ docker load < /tmp/docker/nipype-base-latest-py36-py27.tar.gz
154164 - run :
155165 name : Push to DockerHub
156166 no_output_timeout : 120m
157167 command : |
158168 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
163173 - run :
164174 name : Prune base Dockerfile to update cache
165175 working_directory : /home/circleci/nipype/docker
166176 command : |
167- mkdir -p /tmp/docker
177+ mkdir -p /tmp/docker/cache
168178 # 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
170180 - save_cache :
171181 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" }}
174184
175185
176186workflows :
@@ -184,7 +194,6 @@ workflows:
184194 - deploy :
185195 filters :
186196 branches :
187- # TODO: change this to master after we are sure this works.
188- only : enh/circleci-neurodocker
197+ only : master
189198 requires :
190199 - build_and_test
0 commit comments